using Cirno.Scripts.Components.Actors; using Cirno.Scripts.Components.Actors._3D; using Cirno.Scripts.Utils; using Godot; namespace Cirno.Scripts.Components.FSM._3DPlayer; public partial class Active : BaseState { public override PlayerState StateId => PlayerState.Active; private CharacterBody3D _player; [Export] private InputProvider _inputProvider; [Export] public PlayerAnimationProvider3D AnimationProvider { get; private set; } [Export] public IsoPlayerStorageModule Storage { get; private set; } [Export] public PlayerDamageReceiver3D DamageReceiver { get; private set; } //[Export] public PlayerHitboxSpriteProvider3D HitboxSpriteProvider { get; private set; } public override void Init(IStateMachine machine) { base.Init(machine); //_hud = Hud.Instance; DamageReceiver.Death += () => { ChangeState(PlayerState.Dead); }; DamageReceiver.HealthDecreased += (value, newValue, maxValue) => { AnimationProvider.Blink(); }; DamageReceiver.ShieldDecreased += (value, newValue, maxValue) => { AnimationProvider.PlayShieldAnimation(); }; DamageReceiver.Init(StateMachine); DamageReceiver.RefillHealth(); DamageReceiver.RefillShield(); //_activationProvider.Init(MainObject); //_weaponProvider.Init(MainObject); } public override void EnterState() { base.EnterState(); MainObject.Show(); // enable sprite // enable crosshair //_crosshairProvider.Show(); AnimationProvider.ShowSprite(); DamageReceiver.Enabled = true; //_activationProvider.Enabled = true; //_interactionController.Enabled = true; } public override void ExitState() { base.ExitState(); AnimationProvider.SetAnimationSpeed(Vector2.Zero); // //_animationProvider.SetAnimation(Vector2.Zero); // _crosshairProvider.Hide(); // _hitboxSpriteProvider.Hide(); // DamageReceiver.Enabled = false; // _activationProvider.Enabled = false; // _interactionController.Enabled = false; } public override void PhysicsProcessState(double delta) { // Reset at start of frame //MainObject.Velocity = Vector2.Zero; // Process modules base.PhysicsProcessState(delta); } public override void ProcessState(double delta) { base.ProcessState(delta); HandleInputHotkeys(); AnimationProvider.SetAnimationSpeed(new Vector2(MainObject.Velocity.X, MainObject.Velocity.Z)); AnimationProvider.SetAnimation(Storage.FacingDirection); } private void HandleInputHotkeys() { if (_inputProvider.GetInventoryJustPressed()) { GameStateManager.SetState(GameState.Inventory); return; } if (_inputProvider.GetPauseJustPressed()) { GameStateManager.Instance.Pause(); //PauseDeferred(); return; } } private void PauseDeferred() { GameStateManager.Instance.Pause(); } }