Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / prop / buff / BuffPropProp0010.cs
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 分裂子弹 子弹数量翻倍, 但是精准度和伤害降低
  6. /// </summary>
  7. [Tool]
  8. public partial class BuffPropProp0010 : BuffProp
  9. {
  10. public override void OnPickUpItem()
  11. {
  12. Master.RoleState.CalcBulletCountEvent += CalcBulletCountEvent;
  13. Master.RoleState.CalcBulletDeviationAngleEvent += CalcBulletDeviationAngleEvent;
  14. Master.RoleState.CalcDamageEvent += CalcDamageEvent;
  15. Master.RoleState.CalcBulletSpeedEvent += CalcBulletSpeedEvent;
  16. }
  17.  
  18. public override void OnRemoveItem()
  19. {
  20. Master.RoleState.CalcBulletCountEvent -= CalcBulletCountEvent;
  21. Master.RoleState.CalcBulletDeviationAngleEvent -= CalcBulletDeviationAngleEvent;
  22. Master.RoleState.CalcDamageEvent -= CalcDamageEvent;
  23. Master.RoleState.CalcBulletSpeedEvent -= CalcBulletSpeedEvent;
  24. }
  25. private void CalcBulletCountEvent(Weapon weapon, int originCount, RefValue<int> refValue)
  26. {
  27. refValue.Value += originCount;
  28. }
  29.  
  30. private void CalcBulletDeviationAngleEvent(Weapon weapon, float originAngle, RefValue<float> refValue)
  31. {
  32. refValue.Value += Utils.Random.RandomRangeFloat(-8, 8);
  33. }
  34. private void CalcDamageEvent(int originDamage, RefValue<int> refValue)
  35. {
  36. if (refValue.Value <= 0)
  37. {
  38. return;
  39. }
  40.  
  41. refValue.Value = Mathf.Max(1, refValue.Value - Mathf.FloorToInt(originDamage * 0.4f));
  42. }
  43. private void CalcBulletSpeedEvent(Weapon weapon, float originSpeed, RefValue<float> speed)
  44. {
  45. speed.Value += originSpeed * Utils.Random.RandomRangeFloat(-0.05f, 0.05f);
  46. }
  47. }