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(); 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 = "格挡值 : " + 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(); Texture2D getTex = Resources.Load(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 numRender = buff.transform.Find("num").GetComponent(); // 获取图片资源 Texture2D buffTex = Resources.Load("Textures/Cards/Buff/buff_" + buff.ID); Texture2D numTex = Resources.Load(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; } } }