cirnogodot/Scripts/Components/FSM/Player/PlayerGrazingModule.cs
2025-04-08 19:06:39 +02:00

75 lines
No EOL
1.9 KiB
C#

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 = GlobalState.Instance.SessionSettings.Difficulty switch
{
DifficultyLevel.Easy => baseGrazeValue * 5,
DifficultyLevel.Normal => baseGrazeValue * 2,
DifficultyLevel.Hard or DifficultyLevel.Lunatic => baseGrazeValue,
_ => baseGrazeValue
};
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)
{
}
}