mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-08 13:45:54 +00:00
Possession handling
This commit is contained in:
parent
681510d75c
commit
31ffe6156e
9 changed files with 305 additions and 22 deletions
|
|
@ -7,11 +7,30 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
public bool IsDestroyed => _parent.IsDestroyed;
|
||||
// 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)
|
||||
|
|
@ -21,4 +40,25 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
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();
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue