using Cirno.Scripts.Components.Actors; using Cirno.Scripts.Components.Actors._3D; using Cirno.Scripts.Enums; using Godot; namespace Cirno.Scripts.Components.FSM.Enemy._3D; public partial class EnemyAnimationModule3D : ModuleBase { private IStateMachine _machine; [Export] public PlayerAnimationProvider3D AnimationProvider { get; private set; } [Export] public EnemyStorage3D Storage { get; private set; } [Export] public ActorResourceProvider HealthProvider { get; private set; } public override void EnterState(EnemyState state) { AnimationProvider.SetAnimation(Storage.AimingDirection); AnimationProvider.SetAnimation(Vector2.Zero); if (HealthProvider is not null) { HealthProvider.ResourceDecreased += HealthProviderOnResourceDecreased; } } private void HealthProviderOnResourceDecreased(float oldValue, float newValue, float maxValue) { AnimationProvider?.Blink(); } public override void ExitState(EnemyState state) { AnimationProvider.SetAnimation(Vector2.Zero); if (HealthProvider is not null) { HealthProvider.ResourceDecreased -= HealthProviderOnResourceDecreased; } } public override void Init(IStateMachine machine) { _machine = machine; } public override void Process(double delta) { AnimationProvider.SetAnimation(Storage.AimingDirection); if (_machine.MainObject.Velocity == Vector3.Zero) { AnimationProvider.SetAnimation(Vector2.Zero); } } public override void PhysicsProcess(double delta) { } }