Simplify enemy animation logic
This commit is contained in:
@@ -43,7 +43,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
|
||||
[Node] private RayCast3D Raycast { get; set; } = default!;
|
||||
|
||||
[Node] protected IEnemyModelView _enemyModelView { get; set; } = default!;
|
||||
[Node] public IEnemyModelView EnemyModelView { get; set; } = default!;
|
||||
#endregion
|
||||
|
||||
public AutoProp<double> CurrentHP { get; set; }
|
||||
@@ -98,21 +98,13 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
if (!lookDir.IsEqualApprox(GlobalPosition))
|
||||
LookAt(lookDir, Vector3.Up, true);
|
||||
|
||||
_enemyModelView.SetCurrentDirection(GlobalBasis, -_player.CurrentBasis.Z);
|
||||
|
||||
if (_enemyModelView is EnemyModelView2D)
|
||||
{
|
||||
if (_enemyLogic.Value is EnemyLogic.State.Patrolling or EnemyLogic.State.FollowPlayer)
|
||||
_enemyModelView.PlayWalkAnimation();
|
||||
else if (_enemyModelView is not ICanActivate)
|
||||
_enemyModelView.PlayIdleAnimation();
|
||||
}
|
||||
EnemyModelView.SetCurrentDirection(GlobalBasis, -_player.CurrentBasis.Z);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public virtual void TakeAction()
|
||||
{
|
||||
_enemyModelView.PlayPrimaryAttackAnimation();
|
||||
EnemyModelView.PlayPrimaryAttackAnimation();
|
||||
}
|
||||
|
||||
public virtual void SetTarget(Vector3 target)
|
||||
@@ -145,7 +137,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
if (CurrentHP.Value <= 0)
|
||||
return;
|
||||
|
||||
_enemyModelView.PlayHitAnimation();
|
||||
EnemyModelView.PlayHitAnimation();
|
||||
_enemyLogic.Input(new EnemyLogic.Input.Alerted());
|
||||
|
||||
if (this is ICanActivate activatable)
|
||||
@@ -169,7 +161,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
CurrentHP.OnNext(0);
|
||||
_enemyLogic.Input(new EnemyLogic.Input.EnemyDefeated());
|
||||
_collisionShape.SetDeferred("disabled", true);
|
||||
_enemyModelView.PlayDeathAnimation();
|
||||
EnemyModelView.PlayDeathAnimation();
|
||||
var tweener = CreateTween();
|
||||
tweener.TweenInterval(1.0f);
|
||||
tweener.TweenCallback(Callable.From(QueueFree));
|
||||
@@ -196,6 +188,16 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
_attackTimer.Timeout -= OnAttackTimeout;
|
||||
}
|
||||
|
||||
public void Idle()
|
||||
{
|
||||
EnemyModelView.PlayIdleAnimation();
|
||||
}
|
||||
|
||||
public void Move()
|
||||
{
|
||||
EnemyModelView.PlayWalkAnimation();
|
||||
}
|
||||
|
||||
public Vector3 GetEnemyGlobalPosition() => GlobalPosition;
|
||||
|
||||
public void SetEnemyGlobalPosition(Vector3 target)
|
||||
|
||||
Reference in New Issue
Block a user