mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-14 15:23:47 +00:00
Ability for enemies to shoot when controlled
This commit is contained in:
parent
dfd9abe91b
commit
2d6bcc5f00
10 changed files with 93 additions and 34 deletions
|
|
@ -1,3 +1,4 @@
|
|||
using Cirno.Scripts.Components.Actors;
|
||||
using Godot;
|
||||
|
||||
public partial class EnemyPossessionMovement : ActorFreeMovement
|
||||
|
|
@ -11,6 +12,14 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
[Export]
|
||||
public AnimatedSprite2D PossessionSprite { get; private set; }
|
||||
|
||||
[Export] public string ControlEndAction { get; private set; } = "pause";
|
||||
|
||||
[Export] public string ShootAction { get; private set; } = "shoot";
|
||||
|
||||
[Export] public DamageReceiverActorModule DamageReceiver { get; private set; }
|
||||
|
||||
[Export] public Weapon EquippedWeapon;
|
||||
|
||||
public override void Init(Actor parent)
|
||||
{
|
||||
base.Init(parent);
|
||||
|
|
@ -19,11 +28,26 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
_parent.OnControlAssumed += AssumeControl;
|
||||
|
||||
_previousAiState = _actorAi.Ai;
|
||||
|
||||
parent.OnDeath += () =>
|
||||
{
|
||||
if (_actorAi.Ai is AiState.Controlled)
|
||||
{
|
||||
ResumeControl();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public override void Update(double deltaTime)
|
||||
{
|
||||
if (_actorAi.Ai is AiState.Controlled && Input.IsActionJustPressed("pause"))
|
||||
if (_actorAi.Ai is not AiState.Controlled) return;
|
||||
|
||||
if (GetActionPressed(ShootAction))
|
||||
{
|
||||
Shoot();
|
||||
}
|
||||
|
||||
if (GetActionJustPressed(ControlEndAction))
|
||||
{
|
||||
if (GameManager.Instance.ToggleControlMode() is GameState.Playing)
|
||||
{
|
||||
|
|
@ -31,6 +55,17 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Shoot()
|
||||
{
|
||||
if (EquippedWeapon == null) return;
|
||||
|
||||
var direction = FacingDirection.Normalized();
|
||||
|
||||
EquippedWeapon.ShootDirection = direction;
|
||||
|
||||
EquippedWeapon.Shoot(BulletOwner.Player);
|
||||
}
|
||||
|
||||
public override void PhysicsUpdate(double delta)
|
||||
{
|
||||
|
|
@ -47,6 +82,8 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
_previousAiState = _actorAi.Ai;
|
||||
_actorAi.Ai = AiState.Controlled;
|
||||
|
||||
DamageReceiver.BulletGroup = BulletOwner.Player;
|
||||
|
||||
PossessionSprite?.Show();
|
||||
}
|
||||
|
||||
|
|
@ -57,6 +94,8 @@ public partial class EnemyPossessionMovement : ActorFreeMovement
|
|||
GameManager.Instance.CameraTargetPlayer();
|
||||
GameManager.Instance.Player.RequestMovementDisable(false);
|
||||
|
||||
DamageReceiver.BulletGroup = BulletOwner.Enemy;
|
||||
|
||||
PossessionSprite?.Hide();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue