mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 10:55:35 +00:00
63 lines
No EOL
1.5 KiB
C#
63 lines
No EOL
1.5 KiB
C#
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>("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();
|
|
}
|
|
|
|
} |