Role.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using FSBuff;
  5. using FSAssist;
  6. namespace FSRole {
  7. /*
  8. * 角色组件
  9. */
  10. public class Role : MonoBehaviour {
  11. // 角色原始属性
  12. public RoleAttr OriginAttr;
  13. // 角色当前属性
  14. public RoleAttr CurrentAttr;
  15. // 角色所挂载的BUFF数组,所有Buff都放在这里面
  16. public ArrayList buffs;
  17. // 血条
  18. private Vector2 originSize;
  19. private RectTransform bloodRect;
  20. public void SetBloodTrs(Transform blood) {
  21. bloodRect = blood.GetComponent<RectTransform>();
  22. originSize = bloodRect.sizeDelta;
  23. }
  24. // Use this for initialization
  25. void Start() {
  26. buffs = new ArrayList();
  27. }
  28. // Update is called once per frame
  29. void Update() {
  30. }
  31. /*
  32. * 添加角色的各个接口
  33. */
  34. /*
  35. * 受到伤害
  36. */
  37. public void GetDamage(int value) {
  38. int damage = DamagePassBuff(value);
  39. print("角色 : " + CurrentAttr.ID + " 受到了 " + damage + " 点伤害,剩余血量 : " + (CurrentAttr.Hp + damage));
  40. CurrentAttr.Hp += damage;
  41. // 当血量大于0时
  42. if (CurrentAttr.Hp >= 0) {
  43. float newWidth = (float)CurrentAttr.Hp / OriginAttr.Hp * originSize.x;
  44. bloodRect.sizeDelta = new Vector2(newWidth, originSize.y);
  45. }
  46. }
  47. /*
  48. * 消耗精力
  49. */
  50. public void CostEngine(int value) {
  51. CurrentAttr.Mp -= value;
  52. }
  53. /*
  54. * 增加防御力
  55. */
  56. public void Defense(int value) {
  57. print("角色 : " + CurrentAttr.ID + "增加了" + value + "点防御,当前防御 : " + (CurrentAttr.Def + value));
  58. CurrentAttr.Def += value;
  59. }
  60. /*
  61. * 运行BUFF
  62. */
  63. public void BuffExecute() {
  64. //// 遍历数组来运行BUFF
  65. //foreach (Buff index in buffs) {
  66. // print("角色" + CurrentAttr.ID + "的Buff ID 为 " + index.ID);
  67. // index.Execute();
  68. //}
  69. int index = buffs.Count - 1;
  70. while (true) {
  71. // 当索引位置小于0时,结束查询
  72. if (index < 0) {
  73. return;
  74. }
  75. Debug.Log("运行一个Buff : " + index);
  76. Buff buff = (Buff)buffs[index];
  77. buff.Execute();
  78. index--;
  79. }
  80. }
  81. /*
  82. * 添加Buff
  83. */
  84. public void AddBuff(Buff buff) {
  85. // 首先判断数组中是否已经存在此Buff
  86. // 未来还需要根据两个相同buff的属性来进行更新
  87. foreach (Buff index in buffs) {
  88. if (index.ID.Equals(buff.ID)) {
  89. // 未来在这里做些什么
  90. // 如果有同样的BUFF,则更新原BUFF,并叠加层数
  91. index.Round = buff.Round;
  92. index.Overlay++;
  93. return;
  94. }
  95. }
  96. // 往数组中添加数组
  97. buffs.Add(buff);
  98. }
  99. /*
  100. * 移除Buff
  101. */
  102. public void EraseBuff(Buff buff) {
  103. // 从数组中查找
  104. foreach (Buff index in buffs) {
  105. if (index.ID.Equals(buff.ID)) {
  106. print("角色 " + CurrentAttr.ID + " 取消BUFF " + buff.ID);
  107. buffs.Remove(index);
  108. return;
  109. }
  110. }
  111. }
  112. /*
  113. * 攻击时经过Buff判定
  114. */
  115. private int DamagePassBuff(int value) {
  116. // 根据不同的Buff给出不同的处理
  117. if (ContainBuff(AssistConfig.Fracture)) {
  118. print("存在骨折Buff的影响 ... ");
  119. Buff buff = GetBuff(AssistConfig.Fracture);
  120. // 根据叠加层数来进行判断
  121. if (buff.Overlay < 3) {
  122. // 当层数小于3时
  123. return (int)(value * 1.2f);
  124. } else if (buff.Overlay >= 3 && buff.Overlay < 6) {
  125. // 当层数小于6时
  126. return (int)(value * 1.4f);
  127. } else if (buff.Overlay >= 6 && buff.Overlay < 9) {
  128. // 当层数小于9时
  129. return (int)(value * 1.6f);
  130. } else {
  131. // 层数大于9时
  132. return (int)(value * (1.6f + (buff.Overlay - 9) * 0.2f));
  133. }
  134. }
  135. return value;
  136. }
  137. /*
  138. * 比牌时经过Buff判定
  139. */
  140. public int CompairePassBuff(int value) {
  141. // 根据不同的Buff给出不同的处理
  142. if (ContainBuff(AssistConfig.Paralysis)) {
  143. Buff buff = GetBuff(AssistConfig.Paralysis);
  144. print("存在麻痹Buff的影响 ... " + buff.Overlay);
  145. // 根据叠加层数来进行判断
  146. if (buff.Overlay < 3) {
  147. // 当层数小于3时
  148. return value - 1;
  149. } else if (buff.Overlay >= 3 && buff.Overlay < 6) {
  150. // 当层数小于6时
  151. return value - 2;
  152. } else if (buff.Overlay >= 6 && buff.Overlay < 9) {
  153. // 当层数小于9时
  154. return value - 3;
  155. } else {
  156. // 层数大于9时
  157. return value - 3 - (buff.Overlay - 9);
  158. }
  159. }
  160. return value;
  161. }
  162. /*
  163. * 判断是否有包含某个数组
  164. */
  165. private bool ContainBuff(string ID) {
  166. foreach (Buff index in buffs) {
  167. // 根据ID来判断
  168. if (index.ID == ID) {
  169. return true;
  170. }
  171. }
  172. return false;
  173. }
  174. /*
  175. * 获取指定ID的Buff
  176. */
  177. private Buff GetBuff(string ID) {
  178. foreach (Buff index in buffs) {
  179. // 根据ID来判断
  180. if (index.ID == ID) {
  181. return index;
  182. }
  183. }
  184. return null;
  185. }
  186. }
  187. }