using Cirno.Scripts.Components.Actors; using Cirno.Scripts.Enums; using Godot; namespace Cirno.Scripts.Components.FSM.Player; public partial class PlayerGrazingModule : PlayerArea2DModule { [Export] public BulletOwner Owner { get; private set; } = BulletOwner.Player; [Export] public ActorResourceProvider Shield { get; private set; } private bool _enabled = false; public bool Enabled { get => _enabled; set { if (_enabled == value) return; _enabled = value; } } public override void EnterState(PlayerState state) { Enabled = true; this.AreaEntered += OnAreaEntered; } private void OnAreaEntered(Area2D area) { if (!Enabled) return; if (area is Bullet bullet) { if (bullet.IsGrazed) return; if (!bullet.BulletInfo.Grazeable) return; if (bullet.BulletOwner is BulletOwner.Player) return; GD.Print("Grazed"); bullet.Graze(); //bullet.IsGrazed = true; var baseGrazeValue = bullet.BulletInfo.GrazeValue; float grazeShield = baseGrazeValue * GlobalState.Instance.SessionSettings.DifficultyDamageMultiplier; Shield.CurrentResource += grazeShield; // check if it's grazed // check if it's grazeable // restore appropriate amount of shield } } public override void ExitState(PlayerState state) { Enabled = false; this.AreaEntered -= OnAreaEntered; } public override void Process(double delta) { } public override void PhysicsProcess(double delta) { } }