Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / bullet / normal / Arrow.cs
@小李xl 小李xl on 15 Feb 2024 1 KB 地牢编辑器2格墙壁支持
  1.  
  2. using Godot;
  3.  
  4. [Tool]
  5. public partial class Arrow : Bullet, IMountItem
  6. {
  7. [Export, ExportFillNode]
  8. public AnimatedSprite2D HalfSprite { get; set; }
  9.  
  10. public override void InitData(BulletData data, uint attackLayer)
  11. {
  12. base.InitData(data, attackLayer);
  13. EnableVerticalMotion = false;
  14. DefaultLayer = RoomLayerEnum.NormalLayer;
  15. }
  16.  
  17. public override void OnPlayDisappearEffect()
  18. {
  19. }
  20.  
  21. public override void OnPlayCollisionEffect(KinematicCollision2D collision)
  22. {
  23. }
  24.  
  25. public override void OnCollisionTarget(IHurt hurt)
  26. {
  27. base.OnCollisionTarget(hurt);
  28. var activityObject = hurt.GetActivityObject();
  29. if (activityObject != null)
  30. {
  31. CallDeferred(nameof(OnBindTarget), activityObject);
  32. }
  33. }
  34.  
  35. public override void LogicalFinish()
  36. {
  37. SetEnableMovement(false);
  38. var slideCollision = GetLastSlideCollision();
  39. if (slideCollision != null)
  40. {
  41. Position -= slideCollision.GetTravel();
  42. }
  43. }
  44.  
  45. private void OnBindTarget(ActivityObject activityObject)
  46. {
  47. Altitude = -activityObject.ToLocal(GlobalPosition).Y;
  48. activityObject.AddMountObject(this);
  49. }
  50.  
  51. public void OnMount(ActivityObject target)
  52. {
  53. Reparent(target);
  54. AnimatedSprite.Play(AnimatorNames.HalfEnd);
  55. HalfSprite.Visible = true;
  56. }
  57.  
  58. public void OnUnmount(ActivityObject target)
  59. {
  60. AnimatedSprite.Play(AnimatorNames.Default);
  61. HalfSprite.Visible = false;
  62. SetEnableMovement(true);
  63. EnableVerticalMotion = true;
  64. MoveController.ClearForce();
  65. MoveController.BasisVelocity = Vector2.Zero;
  66. ShadowOffset = new Vector2(0, 1);
  67. Throw(10, 60, new Vector2(20, 0), 0);
  68. }
  69. }