using Godot; public partial class EnemyPossessionMovement : ActorFreeMovement { private ActorAi _actorAi; // State accessor private AiState _previousAiState; [Export] public AnimatedSprite2D PossessionSprite { get; private set; } public override void Init(Actor parent) { base.Init(parent); _actorAi = parent.GetNode("ActorAi"); _parent.OnControlAssumed += AssumeControl; _previousAiState = _actorAi.Ai; } public override void Update(double deltaTime) { if (_actorAi.Ai is AiState.Controlled && Input.IsActionJustPressed("pause")) { if (GameManager.Instance.ToggleControlMode() is GameState.Playing) { ResumeControl(); } } } public override void PhysicsUpdate(double delta) { if (IsDestroyed) return; if (_actorAi.Ai is AiState.Controlled) base.PhysicsUpdate(delta); } public void AssumeControl() { GameManager.Instance.CameraTargetObject(_parent); GameManager.Instance.Player.RequestMovementDisable(true); _previousAiState = _actorAi.Ai; _actorAi.Ai = AiState.Controlled; PossessionSprite?.Show(); } public void ResumeControl() { _actorAi.Ai = _previousAiState; GameManager.Instance.CameraTargetPlayer(); GameManager.Instance.Player.RequestMovementDisable(false); PossessionSprite?.Hide(); } }