mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 11:15:33 +00:00
69 lines
No EOL
1.7 KiB
C#
69 lines
No EOL
1.7 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 = 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)
|
|
{
|
|
}
|
|
} |