Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / prop / buff / BuffProp0010.cs
@小李xl 小李xl on 9 Nov 2023 2 KB 制作3个道具
  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(Weapon weapon, int originCount, RefValue<int> refValue)
  28. {
  29. refValue.Value += originCount;
  30. }
  31.  
  32. private void CalcBulletDeviationAngleEvent(Weapon weapon, 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(Weapon weapon, float originSpeed, RefValue<float> speed)
  46. {
  47. speed.Value += originSpeed * Utils.Random.RandomRangeFloat(-0.05f, 0.05f);
  48. }
  49. private void CalcBulletRepelEvent(Weapon weapon, float originRepel, RefValue<float> repel)
  50. {
  51. if (weapon.Attribute.IsMelee || repel.Value < 0)
  52. {
  53. return;
  54. }
  55. repel.Value = Mathf.Max(1, repel.Value - Mathf.FloorToInt(repel.Value * 0.35f));
  56. }
  57. }