using System.Threading.Tasks; using Godot; namespace Cirno.Scripts.Activables; public partial class PlayerMover : ChainActivable { private GameManager _gameManager; [Export] public Vector2 RelativeTargetPosition = Vector2.Zero; [Export] public float MovementTime = 1f; [Export] public Tween.EaseType EaseType = Tween.EaseType.InOut; [Export] public Tween.TransitionType TransitionType = Tween.TransitionType.Linear; public override void _Ready() { base._Ready(); _gameManager = this.GetGameManager(); } public override void Activate(ActivationType activationType = ActivationType.Toggle) { if (_gameManager.Player is null) return; _ = MovePlayer(); } private async Task MovePlayer() { _gameManager.Player.RequestMovementDisable(true); Tween tween = GetTree().CreateTween(); tween.SetEase(EaseType); tween.SetTrans(TransitionType); tween.TweenProperty(_gameManager.Player, "global_position", _gameManager.Player.GlobalPosition + RelativeTargetPosition, MovementTime); // Wait for the tween to finish await ToSignal(tween, "finished"); _gameManager.Player.RequestMovementDisable(false); ActivateTargets(); } }