mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 11:15:33 +00:00
Possession handling
This commit is contained in:
parent
681510d75c
commit
31ffe6156e
9 changed files with 305 additions and 22 deletions
|
|
@ -15,6 +15,9 @@ public partial class Actor : CharacterBody2D
|
|||
[Export] public Node2D DefeatScript { get; set; }
|
||||
|
||||
[Export] public ActivationType ActivationType { get; private set; } = ActivationType.Toggle;
|
||||
|
||||
[Export]
|
||||
public AiState StartingAiState { get; private set; }
|
||||
|
||||
public Vector2 MovementDirection { get; set; }
|
||||
public Vector2 FacingDirection { get; set; }
|
||||
|
|
@ -25,6 +28,9 @@ public partial class Actor : CharacterBody2D
|
|||
|
||||
[Signal]
|
||||
public delegate void OnDeathEventHandler();
|
||||
|
||||
[Signal]
|
||||
public delegate void OnControlAssumedEventHandler();
|
||||
|
||||
public bool IsDestroyed { get; set; }
|
||||
|
||||
|
|
@ -62,4 +68,9 @@ public partial class Actor : CharacterBody2D
|
|||
EmitSignal(SignalName.OnDeath);
|
||||
}
|
||||
|
||||
public void AssumeControl()
|
||||
{
|
||||
EmitSignal(SignalName.OnControlAssumed);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
using Cirno.Scripts.Components.Actors;
|
||||
using Godot;
|
||||
|
||||
public partial class ActorAi : Node2D
|
||||
public partial class ActorAi : ActorModule
|
||||
{
|
||||
|
||||
public EnemyState State { get; set; } = EnemyState.Idle;
|
||||
|
|
@ -8,5 +9,22 @@ public partial class ActorAi : Node2D
|
|||
[Export] // Temp until the special actor tha sets it
|
||||
public AiState Ai { get; set; } = AiState.Disabled;
|
||||
|
||||
protected Actor _actor;
|
||||
|
||||
public override void Init(Actor actor)
|
||||
{
|
||||
_actor = actor;
|
||||
|
||||
Ai = actor.StartingAiState;
|
||||
}
|
||||
|
||||
public override void PhysicsUpdate(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Update(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -35,12 +35,9 @@ public partial class ActorDefeatScriptHandler : ActorModule
|
|||
{
|
||||
if (DefeatScript is not IActivable target)
|
||||
{
|
||||
GD.PrintErr($"Target {DefeatScript.Name} is not activable");
|
||||
return;
|
||||
}
|
||||
|
||||
target?.Activate();
|
||||
|
||||
GD.Print($"{DefeatScript.Name} activated");
|
||||
}
|
||||
}
|
||||
11
Scripts/Components/Actors/EnemyActor.cs
Normal file
11
Scripts/Components/Actors/EnemyActor.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using System.Collections.Generic;
|
||||
using Cirno.Scripts;
|
||||
using Cirno.Scripts.Components.Actors;
|
||||
using Godot;
|
||||
|
||||
public partial class EnemyActor : Actor
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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