ReflectPercentHurtFunEvent.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using UnityEngine;
  2. using System.Collections;
  3. public class ReflectPercentHurtFunEvent : DurationFunctionEvent
  4. {
  5. int internalFrame = 0;
  6. int nextRecoverFrame = 0;
  7. bool bIsCanReflect = false;
  8. public static ReflectPercentHurtFunEvent Creator(BuffFunctionData data)
  9. {
  10. return new ReflectPercentHurtFunEvent(data);
  11. }
  12. public ReflectPercentHurtFunEvent(BuffFunctionData data) : base(data)
  13. {
  14. mType = data.functionType;
  15. internalFrame = (int)(data.intervalTime * Constants.frame_to_time);
  16. nextRecoverFrame = 0;
  17. bIsCanReflect = false;
  18. }
  19. public override void Enter(Fighter fighter)
  20. {
  21. EventMgr.AddEventListener<UIEventParamFighterHurt>(ECoreEventType.EID_FIGHTER_HURT, OnFighterHurt);
  22. base.Enter(fighter);
  23. }
  24. public override void Exit(Fighter fighter)
  25. {
  26. EventMgr.RemoveEventListener<UIEventParamFighterHurt>(ECoreEventType.EID_FIGHTER_HURT, OnFighterHurt);
  27. base.Exit(fighter);
  28. }
  29. public override void Update(float deltaTime)
  30. {
  31. base.Update(deltaTime);
  32. if (bIsCanReflect)
  33. return;
  34. nextRecoverFrame--;
  35. if (nextRecoverFrame <= 0)
  36. {
  37. nextRecoverFrame = internalFrame;
  38. bIsCanReflect = true;
  39. }
  40. }
  41. private void OnFighterHurt(CoreEvent<UIEventParamFighterHurt> ce)
  42. {
  43. if (!bIsCanReflect)
  44. return;
  45. else
  46. bIsCanReflect = false;
  47. UIEventParamFighterHurt param = ce.Data;
  48. Fighter caster = param.mCaster;
  49. Fighter target = param.mTarget;
  50. if (HitInfo.Target.Id == target.Id)
  51. {
  52. //Debug.Log("百分比反伤!");
  53. SFloat ReflectDamage = 0f;
  54. switch (mType)
  55. {
  56. case Buff_Function_Type.Reflect_Hurt_ByTargetAttr:
  57. //Debug.Log("属性 " + target.GetAttrByType(Data.fromAttr).ToString());
  58. //Debug.Log("百分比 " + (Data.value * 0.01f).ToString());
  59. ReflectDamage = target.GetAttrByType(Data.fromAttr) * Data.value * 0.01f;
  60. break;
  61. case Buff_Function_Type.Reflect_Hurt_BySourceAttr:
  62. //Debug.Log("属性 "+ Caster.GetAttrByType(Data.fromAttr).ToString());
  63. //Debug.Log("百分比 " + (Data.value * 0.01f).ToString());
  64. ReflectDamage = Caster.GetAttrByType(Data.fromAttr) * Data.value * 0.01f;
  65. break;
  66. }
  67. //Debug.Log("ReflectDamage "+ ReflectDamage.ToString());
  68. if(ReflectDamage > 0)
  69. caster.ProcessReflectDamage(ReflectDamage, "", target);
  70. }
  71. }
  72. }