123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using FSBuff;
- using FSAssist;
- using UnityEngine.UI;
- namespace FSRole {
- /*
- * 角色组件
- */
- public class Role : MonoBehaviour {
- // 角色原始属性
- public RoleAttr OriginAttr;
- // 角色当前属性
- public RoleAttr CurrentAttr;
- // 角色所挂载的BUFF数组,所有Buff都放在这里面
- public ArrayList buffs;
- // 血条
- private float originWidth;
- private RectTransform bloodRect;
- // 格挡值
- public Transform parryTransform;
- public void SetBloodTrs(Transform blood) {
- bloodRect = blood.Find("Blood").GetComponent<RectTransform>();
- originWidth = bloodRect.rect.width;
- }
- // Use this for initialization
- void Start() {
- buffs = new ArrayList();
- }
- // Update is called once per frame
- void Update() {
- }
- /*
- * 添加角色的各个接口
- */
- /*
- * 受到伤害
- */
- public void GetDamage(int value) {
- int damage = DamagePassBuff(value);
- print("角色 : " + CurrentAttr.ID + " 受到了 " + damage + " 点伤害,剩余血量 : " + (CurrentAttr.Hp + damage));
- CurrentAttr.Hp += damage;
- // 当血量大于0时
- if (CurrentAttr.Hp >= 0) {
- float newWidth = (float)CurrentAttr.Hp / OriginAttr.Hp * originWidth;
- print("长度对比 : new = " + newWidth + ", origin = " + originWidth);
- bloodRect.sizeDelta = new Vector2(newWidth, 0.8f);
- //bloodRect.rect.width = newWidth;
- } else {
- print("角色 : " + CurrentAttr.ID + " 死了 ...");
- }
- }
- /*
- * 消耗精力
- */
- public void CostEngine(int value) {
- CurrentAttr.Mp -= value;
- }
- /*
- * 增加防御力
- */
- public void Defense(int value) {
- print("角色 : " + CurrentAttr.ID + "增加了" + value + "点防御,当前防御 : " + (CurrentAttr.Def + value));
- CurrentAttr.Def += value;
- parryTransform.GetComponent<Text>().text = "格挡值 : " + CurrentAttr.Def;
- }
- /*
- * 运行BUFF
- */
- public void BuffExecute() {
- //// 遍历数组来运行BUFF
- //foreach (Buff index in buffs) {
- // print("角色" + CurrentAttr.ID + "的Buff ID 为 " + index.ID);
- // index.Execute();
- //}
- int index = buffs.Count - 1;
- while (true) {
- // 当索引位置小于0时,结束查询
- if (index < 0) {
- return;
- }
- Debug.Log("运行一个Buff : " + index);
- Buff buff = (Buff)buffs[index];
- buff.Execute();
- index--;
- }
- }
- /*
- * 添加Buff
- */
- public void AddBuff(Buff buff) {
- // 首先判断数组中是否已经存在此Buff
- // 未来还需要根据两个相同buff的属性来进行更新
- foreach (Buff index in buffs) {
- if (index.ID.Equals(buff.ID)) {
- // 未来在这里做些什么
- // 如果有同样的BUFF,则更新原BUFF,并叠加层数
- index.Round = buff.Round;
- index.Overlay++;
- // 获取指定的Sprite
- SpriteRenderer getRender = index.transform.Find("num").GetComponent<SpriteRenderer>();
- Texture2D getTex = Resources.Load<Texture2D>(string.Format("Textures/Cards/Buff/overlay_{0:d2}", index.Overlay));
- if (getTex != null && getRender != null) {
- Sprite numSprite = Sprite.Create(getTex, new Rect(0, 0, getTex.width, getTex.height), new Vector3(0.5f, 0));
- getRender.sprite = numSprite;
- }
- }
- // 调整Buff图片的位置
- index.transform.position = new Vector3(0.3f * buffs.Count, 1.5f, 1) + transform.position;
- }
- GameObject buffObj = Instantiate(Resources.Load("Prefabs/BuffSub"), transform) as GameObject;
- buff.transform = buffObj.transform;
- buffObj.transform.position = new Vector3(0.3f * buffs.Count, 1.5f, 1) + transform.position;
- // 获取Buff图片和层数图片
- SpriteRenderer buffRender = buff.transform.Find("buff").GetComponent<SpriteRenderer>();
- SpriteRenderer numRender = buff.transform.Find("num").GetComponent<SpriteRenderer>();
- // 获取图片资源
- Texture2D buffTex = Resources.Load<Texture2D>("Textures/Cards/Buff/buff_" + buff.ID);
- Texture2D numTex = Resources.Load<Texture2D>(string.Format("Textures/Cards/Buff/overlay_{0:d2}", buff.Overlay));
- // 添加上图片
- if (buffTex != null) {
- Sprite buffSprite = Sprite.Create(buffTex, new Rect(0, 0, buffTex.width, buffTex.height), new Vector3(0.5f, 0.5f));
- buffRender.sprite = buffSprite;
- }
- if (numTex != null) {
- Sprite numSprite = Sprite.Create(numTex, new Rect(0, 0, numTex.width, numTex.height), new Vector3(0.5f, 0.5f));
- numRender.sprite = numSprite;
- }
- // 往数组中添加数组
- buffs.Add(buff);
- }
- /*
- * 移除Buff
- */
- public void EraseBuff(Buff buff) {
- // 从数组中查找
- foreach (Buff index in buffs) {
- if (index.ID.Equals(buff.ID)) {
- print("角色 " + CurrentAttr.ID + " 取消BUFF " + buff.ID);
- buffs.Remove(index);
- Destroy(index.transform.gameObject);
- return;
- }
- }
- }
- /*
- * 攻击时经过Buff判定
- */
- private int DamagePassBuff(int value) {
- // 根据不同的Buff给出不同的处理
- if (ContainBuff(AssistConfig.Fracture)) {
- print("存在骨折Buff的影响 ... ");
- Buff buff = GetBuff(AssistConfig.Fracture);
- // 根据叠加层数来进行判断
- if (buff.Overlay < 3) {
- // 当层数小于3时
- return (int)(value * 1.2f);
- } else if (buff.Overlay >= 3 && buff.Overlay < 6) {
- // 当层数小于6时
- return (int)(value * 1.4f);
- } else if (buff.Overlay >= 6 && buff.Overlay < 9) {
- // 当层数小于9时
- return (int)(value * 1.6f);
- } else {
- // 层数大于9时
- return (int)(value * (1.6f + (buff.Overlay - 9) * 0.2f));
- }
- }
- return value;
- }
- /*
- * 比牌时经过Buff判定
- */
- public int CompairePassBuff(int value) {
- // 根据不同的Buff给出不同的处理
- if (ContainBuff(AssistConfig.Paralysis)) {
- Buff buff = GetBuff(AssistConfig.Paralysis);
- print("存在麻痹Buff的影响 ... " + buff.Overlay);
- // 根据叠加层数来进行判断
- if (buff.Overlay < 3) {
- // 当层数小于3时
- return value - 1;
- } else if (buff.Overlay >= 3 && buff.Overlay < 6) {
- // 当层数小于6时
- return value - 2;
- } else if (buff.Overlay >= 6 && buff.Overlay < 9) {
- // 当层数小于9时
- return value - 3;
- } else {
- // 层数大于9时
- return value - 3 - (buff.Overlay - 9);
- }
- }
- return value;
- }
- /*
- * 判断是否有包含某个数组
- */
- private bool ContainBuff(string ID) {
- foreach (Buff index in buffs) {
- // 根据ID来判断
- if (index.ID == ID) {
- return true;
- }
- }
- return false;
- }
- /*
- * 获取指定ID的Buff
- */
- private Buff GetBuff(string ID) {
- foreach (Buff index in buffs) {
- // 根据ID来判断
- if (index.ID == ID) {
- return index;
- }
- }
- return null;
- }
- }
- }
|