using Godot; [Tool] public partial class Arrow : Bullet, IMountItem { [Export, ExportFillNode] public AnimatedSprite2D HalfSprite { get; set; } public override void OnPlayDisappearEffect() { } public override void OnPlayCollisionEffect(KinematicCollision2D collision) { } public override void OnCollisionTarget(IHurt hurt) { base.OnCollisionTarget(hurt); var activityObject = hurt.GetActivityObject(); if (activityObject != null) { CallDeferred(nameof(OnBindTarget), activityObject); } } public override void LogicalFinish() { SetEnableMovement(false); } private void OnBindTarget(ActivityObject activityObject) { Altitude = -activityObject.ToLocal(GlobalPosition).Y; activityObject.BindMountObject(this); AnimatedSprite.Play(AnimatorNames.HalfEnd); HalfSprite.Visible = true; } public void OnMount(ActivityObject target) { Reparent(target); } public void OnUnmount(ActivityObject target) { SetEnableMovement(true); MoveController.ClearForce(); MoveController.BasisVelocity = Vector2.Zero; Throw(10, 60, new Vector2(20, 0), 0); } }