Grazing for shields

This commit is contained in:
Marco 2025-04-01 15:46:25 +02:00
commit 8b28805cbd
22 changed files with 554 additions and 9 deletions

View file

@ -0,0 +1,65 @@
using Cirno.Scripts.Components.Actors;
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.IsGrazed = true;
Shield.CurrentResource += bullet.BulletInfo.GrazeValue;
// 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)
{
}
}

View file

@ -0,0 +1 @@
uid://d2r5eh3wn16bg