Simplify enemy animation logic

This commit is contained in:
2025-10-06 02:13:05 -07:00
parent ad29e57fc9
commit ec0f9ebff7
56 changed files with 1584 additions and 5011 deletions

View File

@@ -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)