Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / prop / buff / BuffProp0010.cs
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 分裂子弹 子弹数量翻倍, 但是精准度, 击退和伤害降低
  6. /// </summary>
  7. [Tool]
  8. public partial class BuffProp0010 : 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. Master.RoleState.CalcBulletRepelEvent += CalcBulletRepelEvent;
  17. }
  18.  
  19. public override void OnRemoveItem()
  20. {
  21. Master.RoleState.CalcBulletCountEvent -= CalcBulletCountEvent;
  22. Master.RoleState.CalcBulletDeviationAngleEvent -= CalcBulletDeviationAngleEvent;
  23. Master.RoleState.CalcDamageEvent -= CalcDamageEvent;
  24. Master.RoleState.CalcBulletSpeedEvent -= CalcBulletSpeedEvent;
  25. Master.RoleState.CalcBulletRepelEvent -= CalcBulletRepelEvent;
  26. }
  27. private void CalcBulletCountEvent(int originCount, RefValue<int> refValue)
  28. {
  29. refValue.Value += originCount;
  30. }
  31.  
  32. private void CalcBulletDeviationAngleEvent(float originAngle, RefValue<float> refValue)
  33. {
  34. refValue.Value += Utils.Random.RandomRangeFloat(-8, 8);
  35. }
  36. private void CalcDamageEvent(int originDamage, RefValue<int> refValue)
  37. {
  38. if (refValue.Value <= 0)
  39. {
  40. return;
  41. }
  42.  
  43. refValue.Value = Mathf.Max(1, refValue.Value - Mathf.FloorToInt(refValue.Value * 0.35f));
  44. }
  45. private void CalcBulletSpeedEvent(float originSpeed, RefValue<float> speed)
  46. {
  47. speed.Value += originSpeed * Utils.Random.RandomRangeFloat(-0.05f, 0.05f);
  48. }
  49. private void CalcBulletRepelEvent(float originRepel, RefValue<float> repel)
  50. {
  51. if (repel.Value < 0 || (Master.WeaponPack.ActiveItem != null &&
  52. Master.WeaponPack.ActiveItem.Attribute.IsMelee))
  53. {
  54. return;
  55. }
  56. repel.Value = Mathf.Max(1, repel.Value - Mathf.FloorToInt(repel.Value * 0.35f));
  57. }
  58. }