Fix attacks by player and enemy

This commit is contained in:
2025-02-06 03:33:25 -08:00
parent 4e6c545e81
commit 0cdae88952
31 changed files with 231 additions and 64 deletions

View File

@@ -17,6 +17,8 @@ namespace GameJamDungeon
public void ApplyCentralImpulseToPlayer(Vector3 velocity);
public void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false);
public void LevelUp();
event Player.InventoryButtonPressedEventHandler InventoryButtonPressed;
@@ -185,19 +187,22 @@ namespace GameJamDungeon
Hitbox.AreaEntered += Hitbox_AreaEntered;
}
private void Hitbox_AreaEntered(Area3D area)
{
var enemy = Hitbox.GetParent<IEnemy>();
enemy.TakeDamage((PlayerStatResource.CurrentAttack + PlayerStatResource.BonusAttack) * PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.ElementalDamageBonus,
PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponElement,
ignoreElementalResistance: PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.IgnoreAffinity));
}
public void OnReady()
{
SetPhysicsProcess(true);
}
public void TakeDamage(double damage, ElementType elementType, bool isCriticalHit = false)
{
if (PlayerData.CurrentHP.Value > 0)
{
damage = CalculateDefenseResistance(damage);
if (isCriticalHit)
damage *= 2;
PlayerData.SetCurrentHP(PlayerData.CurrentHP.Value - (int)damage);
}
}
public void LevelUp()
{
var nextLevel = PlayerData.CurrentLevel.Value + 1;
@@ -342,5 +347,22 @@ namespace GameJamDungeon
if (PlayerData.CurrentExp.Value >= PlayerData.ExpToNextLevel.Value)
LevelUp();
}
private double CalculateDefenseResistance(double incomingDamage)
{
return Mathf.Max(incomingDamage - (PlayerData.CurrentDefense.Value + PlayerData.BonusDefense), 0.0);
}
private void Hitbox_AreaEntered(Area3D area)
{
var target = area.GetOwner();
if (target is IEnemy enemy)
{
enemy.TakeDamage(
(PlayerStatResource.CurrentAttack + PlayerStatResource.BonusAttack + PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.Damage) * PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.ElementalDamageBonus,
PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponElement,
ignoreElementalResistance: PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.IgnoreAffinity));
}
}
}
}

View File

@@ -355,8 +355,8 @@ _defaultArmor = ExtResource("4_bj1ma")
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -1)
collision_layer = 16
collision_mask = 16
collision_layer = 2048
collision_mask = 2048
script = ExtResource("2_lb3qc")
[node name="HitboxCollision" type="CollisionShape3D" parent="Hitbox"]