Add more sigil component behavior
This commit is contained in:
@@ -8,9 +8,18 @@ public interface ISigil
|
|||||||
[Export]
|
[Export]
|
||||||
public double DamageModifier { get; }
|
public double DamageModifier { get; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public double DefenseModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public double MoveSpeedModifier { get; }
|
public double MoveSpeedModifier { get; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public double HealAmountModifier { get; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public double VTDrainSpeedModifier { get; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public ElementType ElementType { get; }
|
public ElementType ElementType { get; }
|
||||||
|
|
||||||
|
|||||||
@@ -607,8 +607,9 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
private void EnactConsumableItemEffects(ConsumableItem consumableItem)
|
private void EnactConsumableItemEffects(ConsumableItem consumableItem)
|
||||||
{
|
{
|
||||||
|
var healHPAmount = Mathf.RoundToInt(consumableItem.HealHPAmount * (1 + _player.SigilComponent.Sigil.HealAmountModifier));
|
||||||
if (consumableItem.HealHPAmount > 0 && consumableItem.HealVTAmount > 0)
|
var healVTAmount = Mathf.RoundToInt(consumableItem.HealVTAmount * (1 + _player.SigilComponent.Sigil.HealAmountModifier));
|
||||||
|
if (healHPAmount > 0 && healVTAmount > 0)
|
||||||
{
|
{
|
||||||
SfxDatabase.Instance.Play(SoundEffect.Eucharistia);
|
SfxDatabase.Instance.Play(SoundEffect.Eucharistia);
|
||||||
|
|
||||||
@@ -620,8 +621,8 @@ public partial class Game : Node3D, IGame
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_player.HealthComponent.Heal(consumableItem.HealHPAmount);
|
_player.HealthComponent.Heal(healHPAmount);
|
||||||
_player.VTComponent.Restore(consumableItem.HealVTAmount);
|
_player.VTComponent.Restore(healVTAmount);
|
||||||
InventoryEventNotification.Invoke($"Restored {consumableItem.RaiseHPAmount}HP." + System.Environment.NewLine + $"Restored {consumableItem.RaiseVTAmount}VT.");
|
InventoryEventNotification.Invoke($"Restored {consumableItem.RaiseHPAmount}HP." + System.Environment.NewLine + $"Restored {consumableItem.RaiseVTAmount}VT.");
|
||||||
}
|
}
|
||||||
if (_player.StatusEffectComponent.Rust.Value)
|
if (_player.StatusEffectComponent.Rust.Value)
|
||||||
@@ -644,18 +645,18 @@ public partial class Game : Node3D, IGame
|
|||||||
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
|
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
|
||||||
InventoryEventNotification.Invoke($"Raised maximum VT by {consumableItem.RaiseVTAmount}.");
|
InventoryEventNotification.Invoke($"Raised maximum VT by {consumableItem.RaiseVTAmount}.");
|
||||||
}
|
}
|
||||||
else if (consumableItem.HealHPAmount > 0)
|
else if (healHPAmount > 0)
|
||||||
{
|
{
|
||||||
var currentHP = _player.HealthComponent.CurrentHP;
|
var currentHP = _player.HealthComponent.CurrentHP;
|
||||||
_player.HealthComponent.Heal(consumableItem.HealHPAmount);
|
_player.HealthComponent.Heal(healHPAmount);
|
||||||
SfxDatabase.Instance.Play(SoundEffect.HealHP);
|
SfxDatabase.Instance.Play(SoundEffect.HealHP);
|
||||||
InventoryEventNotification.Invoke($"Restored {consumableItem.HealHPAmount}HP.");
|
InventoryEventNotification.Invoke($"Restored {healHPAmount}HP.");
|
||||||
}
|
}
|
||||||
else if (consumableItem.HealVTAmount > 0)
|
else if (healVTAmount > 0)
|
||||||
{
|
{
|
||||||
_player.VTComponent.Restore(consumableItem.HealVTAmount);
|
_player.VTComponent.Restore(healVTAmount);
|
||||||
SfxDatabase.Instance.Play(SoundEffect.HealVT);
|
SfxDatabase.Instance.Play(SoundEffect.HealVT);
|
||||||
InventoryEventNotification.Invoke($"Restored {consumableItem.HealVTAmount}VT.");
|
InventoryEventNotification.Invoke($"Restored {healVTAmount}VT.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (consumableItem.Stats.HealsStatusAilments)
|
if (consumableItem.Stats.HealsStatusAilments)
|
||||||
|
|||||||
@@ -219,7 +219,6 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
|
|||||||
ExperiencePointsComponent.PlayerLevelUp += OnLevelUp;
|
ExperiencePointsComponent.PlayerLevelUp += OnLevelUp;
|
||||||
ExperiencePointsComponent.PlayerLevelDown += OnLevelDown;
|
ExperiencePointsComponent.PlayerLevelDown += OnLevelDown;
|
||||||
PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished;
|
PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished;
|
||||||
HealthTimer.WaitTime = _healthTimerWaitTime;
|
|
||||||
HealthTimer.Timeout += OnHealthTimerTimeout;
|
HealthTimer.Timeout += OnHealthTimerTimeout;
|
||||||
|
|
||||||
_projectileCooldownTimer = new Timer();
|
_projectileCooldownTimer = new Timer();
|
||||||
@@ -248,6 +247,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
|
|||||||
{
|
{
|
||||||
SetProcessInput(true);
|
SetProcessInput(true);
|
||||||
SetPhysicsProcess(true);
|
SetPhysicsProcess(true);
|
||||||
|
HealthTimer.WaitTime = _healthTimerWaitTime * (1 + SigilComponent.Sigil.VTDrainSpeedModifier);
|
||||||
SetHealthTimerStatus(HealthTimerIsActive);
|
SetHealthTimerStatus(HealthTimerIsActive);
|
||||||
ShowCamera(true);
|
ShowCamera(true);
|
||||||
Hitbox.SetDeferred(Area3D.PropertyName.Monitoring, true);
|
Hitbox.SetDeferred(Area3D.PropertyName.Monitoring, true);
|
||||||
@@ -276,7 +276,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
|
|||||||
{
|
{
|
||||||
HealthTimerSpeedModifier = newSpeed;
|
HealthTimerSpeedModifier = newSpeed;
|
||||||
HealthTimer.Stop();
|
HealthTimer.Stop();
|
||||||
HealthTimer.WaitTime = _healthTimerWaitTime * newSpeed;
|
HealthTimer.WaitTime = (_healthTimerWaitTime * newSpeed) * (1 + SigilComponent.Sigil.VTDrainSpeedModifier);
|
||||||
HealthTimer.Start();
|
HealthTimer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +304,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
|
|||||||
var defense = TotalDefense;
|
var defense = TotalDefense;
|
||||||
var elementalResistance = EquipmentComponent.ElementalResistance + SigilComponent.Sigil.ElementalResistanceSet;
|
var elementalResistance = EquipmentComponent.ElementalResistance + SigilComponent.Sigil.ElementalResistanceSet;
|
||||||
var damageReceived = DamageCalculator.CalculateDamage(damage, defense, elementalResistance);
|
var damageReceived = DamageCalculator.CalculateDamage(damage, defense, elementalResistance);
|
||||||
damageReceived *= Mathf.RoundToInt(1 + SigilComponent.Sigil.DamageModifier);
|
damageReceived = Mathf.RoundToInt(damageReceived * (1 - SigilComponent.Sigil.DefenseModifier));
|
||||||
GD.Print($"Damage dealt: {damageReceived}");
|
GD.Print($"Damage dealt: {damageReceived}");
|
||||||
HealthComponent.Damage(damageReceived, damage.ElementType);
|
HealthComponent.Damage(damageReceived, damage.ElementType);
|
||||||
SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
|
SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
|
||||||
|
|||||||
@@ -16,8 +16,14 @@ public partial class NoneSigil : ISigil
|
|||||||
{
|
{
|
||||||
public double DamageModifier { get; } = 0;
|
public double DamageModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double MoveSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
|
|
||||||
public ElementType ElementType { get; } = ElementType.None;
|
public ElementType ElementType { get; } = ElementType.None;
|
||||||
@@ -29,10 +35,16 @@ public partial class NoneSigil : ISigil
|
|||||||
|
|
||||||
public partial class AeolicSigil : ISigil
|
public partial class AeolicSigil : ISigil
|
||||||
{
|
{
|
||||||
public double DamageModifier { get; } = 0;
|
public double DamageModifier { get; } = -0.25;
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0.25;
|
public double MoveSpeedModifier { get; } = 0.25;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
|
|
||||||
public ElementType ElementType { get; } = ElementType.Aeolic;
|
public ElementType ElementType { get; } = ElementType.Aeolic;
|
||||||
@@ -44,10 +56,16 @@ public partial class AeolicSigil : ISigil
|
|||||||
|
|
||||||
public partial class IgneousSigil : ISigil
|
public partial class IgneousSigil : ISigil
|
||||||
{
|
{
|
||||||
public double DamageModifier { get; } = 0.5;
|
public double DamageModifier { get; } = 0.25;
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = -0.25;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double MoveSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
public ElementType ElementType { get; } = ElementType.Igneous;
|
public ElementType ElementType { get; } = ElementType.Igneous;
|
||||||
|
|
||||||
@@ -60,7 +78,13 @@ public partial class TelluricSigil : ISigil
|
|||||||
{
|
{
|
||||||
public double DamageModifier { get; } = 0;
|
public double DamageModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double DefenseModifier { get; } = 0.25;
|
||||||
|
|
||||||
|
public double MoveSpeedModifier { get; } = -0.25;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
|
|
||||||
@@ -75,8 +99,14 @@ public partial class HydricSigil : ISigil
|
|||||||
{
|
{
|
||||||
public double DamageModifier { get; } = 0;
|
public double DamageModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double MoveSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0.25;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = -0.25;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
|
|
||||||
public ElementType ElementType { get; } = ElementType.Hydric;
|
public ElementType ElementType { get; } = ElementType.Hydric;
|
||||||
@@ -90,8 +120,14 @@ public partial class FerrumSigil : ISigil
|
|||||||
{
|
{
|
||||||
public double DamageModifier { get; }
|
public double DamageModifier { get; }
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double MoveSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
|
|
||||||
public ElementType ElementType { get; } = ElementType.Ferrum;
|
public ElementType ElementType { get; } = ElementType.Ferrum;
|
||||||
@@ -105,8 +141,14 @@ public partial class SanktaSigil : ISigil
|
|||||||
{
|
{
|
||||||
public double DamageModifier { get; }
|
public double DamageModifier { get; }
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double MoveSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = true;
|
public bool AutoRevive { get; } = true;
|
||||||
|
|
||||||
public ElementType ElementType { get; } = ElementType.Sankta;
|
public ElementType ElementType { get; } = ElementType.Sankta;
|
||||||
@@ -120,8 +162,14 @@ public partial class ShuraSigil : ISigil
|
|||||||
{
|
{
|
||||||
public double DamageModifier { get; }
|
public double DamageModifier { get; }
|
||||||
|
|
||||||
|
public double DefenseModifier { get; } = 0;
|
||||||
|
|
||||||
public double MoveSpeedModifier { get; } = 0;
|
public double MoveSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double HealAmountModifier { get; } = 0;
|
||||||
|
|
||||||
|
public double VTDrainSpeedModifier { get; } = 0;
|
||||||
|
|
||||||
public bool AutoRevive { get; } = false;
|
public bool AutoRevive { get; } = false;
|
||||||
|
|
||||||
public ElementType ElementType { get; } = ElementType.Shura;
|
public ElementType ElementType { get; } = ElementType.Shura;
|
||||||
|
|||||||
Reference in New Issue
Block a user