This commit is contained in:
2026-04-25 22:06:37 -07:00
parent 2fe007c59d
commit a55ab4a342
11 changed files with 417 additions and 193 deletions

View File

@@ -101,6 +101,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
[Node] private ShakeCamera _camera3D { get; set; } = default!;
[Node] private Barrier Barrier { get; set; } = default!;
[Node] private ProjectileSystem _airReactorProjectileSystem { get; set; } = default!;
[Node] private ProjectileSystem _fireReactorProjectileSystem { get; set; } = default!;
[Node] private ProjectileSystem _waterReactorProjectileSystem { get; set; } = default!;
@@ -116,6 +118,12 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
[Export]
public bool AutoIdentifyItems { get; set; } = false;
[Export]
public bool BriefImmunity { get; set; } = false;
[Export]
private float _immunityTime { get; set; } = 30f;
[Export]
public float HealthTimerSpeedModifier { get; set; } = 1f;
@@ -137,6 +145,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
private PlayerEffectService _playerEffectService;
private Timer _projectileCooldownTimer;
private Timer _immunityTimer;
private bool _fired;
public void Initialize()
@@ -212,9 +221,21 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
_projectileCooldownTimer.WaitTime = 1.8f;
_projectileCooldownTimer.Timeout += ProjectileCooldown;
_immunityTimer = new Timer();
AddChild(_immunityTimer);
_immunityTimer.WaitTime = _immunityTime;
_immunityTimer.Timeout += _immunityTimer_Timeout;
SetProcessInput(false);
SetPhysicsProcess(false);
}
private void _immunityTimer_Timeout()
{
BriefImmunity = false;
Barrier.FadeOut();
SfxDatabase.Instance.Play(SoundEffect.Debuff);
}
#endregion
public void Activate()
@@ -266,6 +287,9 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
public void TakeDamage(AttackData damage)
{
if (BriefImmunity)
return;
_camera3D.AddShake(1.0f);
TakeDamageAnimationPlayer.Play("take_damage");
var damageReceived = DamageCalculator.CalculateDamage(damage, TotalDefense, EquipmentComponent.ElementalResistance);
@@ -649,6 +673,14 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
HealthComponent.LowerMaximumHP(hpIncrease);
}
public void EnactBriefImmunity()
{
SfxDatabase.Instance.Play(SoundEffect.Buff);
BriefImmunity = true;
Barrier.FadeIn();
_immunityTimer.Start();
}
private static float LeftStrafeInputVector => Godot.Input.GetActionStrength(GameInputs.StrafeLeft);
private static float RightStrafeInputVector => Godot.Input.GetActionStrength(GameInputs.StrafeRight);