Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / weapon / bow / Bow.cs
@小李xl 小李xl on 25 Feb 2024 2 KB 小修改
  1. using Godot;
  2.  
  3. /// <summary>
  4. /// 弓箭
  5. /// </summary>
  6. [Tool]
  7. public partial class Bow : Weapon
  8. {
  9. /// <summary>
  10. /// 弓箭挂载点
  11. /// </summary>
  12. [Export, ExportFillNode]
  13. public Marker2D ArrowPoint { get; set; }
  14.  
  15. //正在使用的弓箭
  16. private Arrow _activeArrow;
  17.  
  18. public override void OnInit()
  19. {
  20. base.OnInit();
  21. _activeArrow = (Arrow)FireManager.ShootBullet(this, 0, Attribute.Bullet);
  22. _activeArrow.Pickup();
  23. _activeArrow.MoveController.Enable = false;
  24. _activeArrow.CollisionArea.Monitoring = false;
  25. _activeArrow.Collision.Disabled = true;
  26. _activeArrow.Position = Vector2.Zero;
  27. _activeArrow.RefreshBulletColor(false);
  28. ArrowPoint.AddChild(_activeArrow);
  29. }
  30.  
  31. protected override void Process(float delta)
  32. {
  33. base.Process(delta);
  34. _activeArrow.ShadowOffset = ShadowOffset + new Vector2(0, Altitude);
  35. _activeArrow.Visible = !IsTotalAmmoEmpty();
  36. }
  37.  
  38. protected override void OnPickUp(Role master)
  39. {
  40. _activeArrow.RefreshBulletColor(master.IsEnemyWithPlayer());
  41. }
  42.  
  43. protected override void OnRemove(Role master)
  44. {
  45. _activeArrow.RefreshBulletColor(false);
  46. }
  47.  
  48. protected override void OnBeginCharge()
  49. {
  50. //拉弓开始蓄力
  51. AnimationPlayer.Play(AnimatorNames.Pull);
  52. }
  53.  
  54. protected override void OnChargeFinish()
  55. {
  56. //蓄力完成
  57. SetShake(0.7f);
  58. }
  59.  
  60. protected override void OnEndCharge()
  61. {
  62. //结束蓄力
  63. SetShake(0);
  64. AnimationPlayer.Play(AnimatorNames.Reset);
  65. }
  66.  
  67. protected override void OnFire()
  68. {
  69. if (Master.IsPlayer())
  70. {
  71. //创建抖动
  72. GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * Attribute.CameraShake);
  73. }
  74. }
  75.  
  76. protected override void OnShoot(float fireRotation)
  77. {
  78. FireManager.ShootBullet(this, fireRotation, Attribute.Bullet);
  79. }
  80.  
  81. protected override void OnDestroy()
  82. {
  83. base.OnDestroy();
  84. if (_activeArrow != null)
  85. {
  86. _activeArrow.Destroy();
  87. _activeArrow = null;
  88. }
  89. }
  90. }