From 33d282ebfb6913cba884b11c6c0664a3fcf1801b Mon Sep 17 00:00:00 2001 From: Zenny Date: Sat, 7 Sep 2024 01:07:47 -0700 Subject: [PATCH] Fix data model for elemental damage and resistance --- src/enemy/Enemy.cs | 2 +- src/items/armor/ArmorInfo.cs | 12 ++++++++++++ src/items/weapons/WeaponInfo.cs | 12 ++++++++++++ src/player/Player.cs | 2 +- src/player/PlayerStatInfo.cs | 24 ------------------------ src/system/stats/DamageCalculator.cs | 22 +++++++++++----------- src/system/stats/ICharacterStats.cs | 24 ------------------------ 7 files changed, 37 insertions(+), 61 deletions(-) diff --git a/src/enemy/Enemy.cs b/src/enemy/Enemy.cs index 8526cebb..985b0d30 100644 --- a/src/enemy/Enemy.cs +++ b/src/enemy/Enemy.cs @@ -177,7 +177,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide { if (CurrentHP.Value > 0) { - var damage = DamageCalculator.CalculatePlayerDamage(hitBox.Damage, hitBox.GetParent().PlayerStatInfo, EnemyStatInfo); + var damage = DamageCalculator.CalculatePlayerDamage(hitBox.Damage, hitBox.GetParent().PlayerStatInfo, EnemyStatInfo, GameRepo.EquippedWeapon); GD.Print($"Enemy Hit for {damage} damage."); EnemyLogic.Input(new EnemyLogic.Input.HitByPlayer(damage)); } diff --git a/src/items/armor/ArmorInfo.cs b/src/items/armor/ArmorInfo.cs index cb1ce29b..07ee0e44 100644 --- a/src/items/armor/ArmorInfo.cs +++ b/src/items/armor/ArmorInfo.cs @@ -7,4 +7,16 @@ public partial class ArmorInfo : InventoryItemInfo { [Export] public int Defense { get; set; } + + [Export] + public double TelluricResistance { get; set; } + + [Export] + public double AeolicResistance { get; set; } + + [Export] + public double HydricResistance { get; set; } + + [Export] + public double IgneousResistance { get; set; } } diff --git a/src/items/weapons/WeaponInfo.cs b/src/items/weapons/WeaponInfo.cs index e647730f..03557b46 100644 --- a/src/items/weapons/WeaponInfo.cs +++ b/src/items/weapons/WeaponInfo.cs @@ -6,5 +6,17 @@ public partial class WeaponInfo : InventoryItemInfo [Export] public required int Damage { get; set; } + [Export] + public double TelluricDamageBonus { get; set; } + + [Export] + public double AeolicDamageBonus { get; set; } + + [Export] + public double BaseHydricDamageBonus { get; set; } + + [Export] + public double IgneousDamageBonus { get; set; } + public static WeaponInfo Default => new WeaponInfo() { Damage = 1 }; } diff --git a/src/player/Player.cs b/src/player/Player.cs index 0b459496..15d771b8 100644 --- a/src/player/Player.cs +++ b/src/player/Player.cs @@ -154,7 +154,7 @@ namespace GameJamDungeon if (_currentHP.Value > 0) { var enemy = hitBox.GetParent(); - var damage = DamageCalculator.CalculateEnemyDamage(hitBox.Damage, PlayerStatInfo, enemy.EnemyStatInfo); + var damage = DamageCalculator.CalculateEnemyDamage(hitBox.Damage, PlayerStatInfo, enemy.EnemyStatInfo, GameRepo.EquippedArmor); _currentHP.OnNext(_currentHP.Value - damage); GD.Print($"Player hit for {damage} damage."); } diff --git a/src/player/PlayerStatInfo.cs b/src/player/PlayerStatInfo.cs index 933a9958..c9dbe828 100644 --- a/src/player/PlayerStatInfo.cs +++ b/src/player/PlayerStatInfo.cs @@ -16,29 +16,5 @@ namespace GameJamDungeon [Export] public int BaseDefense { get; set; } - - [Export] - public double TelluricResistance { get; set; } - - [Export] - public double AeolicResistance { get; set; } - - [Export] - public double HydricResistance { get; set; } - - [Export] - public double IgneousResistance { get; set; } - - [Export] - public double TelluricDamageBonus { get; set; } - - [Export] - public double AeolicDamageBonus { get; set; } - - [Export] - public double BaseHydricDamageBonus { get; set; } - - [Export] - public double IgneousDamageBonus { get; set; } } } diff --git a/src/system/stats/DamageCalculator.cs b/src/system/stats/DamageCalculator.cs index 4784a493..a59fb493 100644 --- a/src/system/stats/DamageCalculator.cs +++ b/src/system/stats/DamageCalculator.cs @@ -4,27 +4,27 @@ namespace GameJamDungeon { public static class DamageCalculator { - public static double CalculatePlayerDamage(int attackDamage, PlayerStatInfo playerStatInfo, EnemyStatInfo enemyStatInfo) + public static double CalculatePlayerDamage(int attackDamage, PlayerStatInfo playerStatInfo, EnemyStatInfo enemyStatInfo, WeaponInfo weapon) { var baseDamage = attackDamage + playerStatInfo.BaseAttack; - var elementADamage = (playerStatInfo.BaseHydricDamageBonus > 0 ? playerStatInfo.BaseHydricDamageBonus - enemyStatInfo.HydricResistance : 0) / 100; - var elementBDamage = (playerStatInfo.IgneousDamageBonus > 0 ? playerStatInfo.IgneousDamageBonus - enemyStatInfo.IgneousResistance : 0) / 100; - var elementCDamage = (playerStatInfo.TelluricDamageBonus > 0 ? playerStatInfo.TelluricDamageBonus - enemyStatInfo.TelluricResistance : 0) / 100; - var elementDDamage = (playerStatInfo.AeolicDamageBonus > 0 ? playerStatInfo.AeolicDamageBonus - enemyStatInfo.AeolicResistance : 0) / 100; + var elementADamage = (weapon.BaseHydricDamageBonus > 0 ? weapon.BaseHydricDamageBonus - enemyStatInfo.HydricResistance : 0) / 100; + var elementBDamage = (weapon.IgneousDamageBonus > 0 ? weapon.IgneousDamageBonus - enemyStatInfo.IgneousResistance : 0) / 100; + var elementCDamage = (weapon.TelluricDamageBonus > 0 ? weapon.TelluricDamageBonus - enemyStatInfo.TelluricResistance : 0) / 100; + var elementDDamage = (weapon.AeolicDamageBonus > 0 ? weapon.AeolicDamageBonus - enemyStatInfo.AeolicResistance : 0) / 100; var elementalBonusDamage = baseDamage + (baseDamage * elementADamage) + (baseDamage * elementBDamage) + (baseDamage * elementCDamage) + (baseDamage * elementDDamage); var calculatedDamage = elementalBonusDamage - enemyStatInfo.BaseDefense; return calculatedDamage; } - public static double CalculateEnemyDamage(int attackDamage, PlayerStatInfo playerStatInfo, EnemyStatInfo enemyStatInfo) + public static double CalculateEnemyDamage(int attackDamage, PlayerStatInfo playerStatInfo, EnemyStatInfo enemyStatInfo, ArmorInfo armor) { var baseDamage = attackDamage + enemyStatInfo.BaseAttack; - var elementADamage = (enemyStatInfo.BaseHydricDamageBonus > 0 ? enemyStatInfo.BaseHydricDamageBonus - playerStatInfo.HydricResistance : 0) / 100; - var elementBDamage = (enemyStatInfo.IgneousDamageBonus > 0 ? enemyStatInfo.IgneousDamageBonus - playerStatInfo.IgneousResistance : 0) / 100; - var elementCDamage = (enemyStatInfo.TelluricDamageBonus > 0 ? enemyStatInfo.TelluricDamageBonus - playerStatInfo.TelluricResistance : 0) / 100; - var elementDDamage = (enemyStatInfo.AeolicDamageBonus > 0 ? enemyStatInfo.AeolicDamageBonus - playerStatInfo.AeolicResistance : 0) / 100; + var elementADamage = (enemyStatInfo.BaseHydricDamageBonus > 0 ? enemyStatInfo.BaseHydricDamageBonus - armor.HydricResistance : 0) / 100; + var elementBDamage = (enemyStatInfo.IgneousDamageBonus > 0 ? enemyStatInfo.IgneousDamageBonus - armor.IgneousResistance : 0) / 100; + var elementCDamage = (enemyStatInfo.TelluricDamageBonus > 0 ? enemyStatInfo.TelluricDamageBonus - armor.TelluricResistance : 0) / 100; + var elementDDamage = (enemyStatInfo.AeolicDamageBonus > 0 ? enemyStatInfo.AeolicDamageBonus - armor.AeolicResistance : 0) / 100; var elementalBonusDamage = baseDamage + (baseDamage * elementADamage) + (baseDamage * elementBDamage) + (baseDamage * elementCDamage) + (baseDamage * elementDDamage); - var calculatedDamage = elementalBonusDamage - playerStatInfo.BaseDefense; + var calculatedDamage = elementalBonusDamage - playerStatInfo.BaseDefense - armor.Defense; return calculatedDamage; } } diff --git a/src/system/stats/ICharacterStats.cs b/src/system/stats/ICharacterStats.cs index 0d5eed9d..36977890 100644 --- a/src/system/stats/ICharacterStats.cs +++ b/src/system/stats/ICharacterStats.cs @@ -9,29 +9,5 @@ namespace GameJamDungeon public int BaseAttack { get; } public int BaseDefense { get; } - - [Export] - public double TelluricResistance { get; set; } - - [Export] - public double AeolicResistance { get; set; } - - [Export] - public double HydricResistance { get; set; } - - [Export] - public double IgneousResistance { get; set; } - - [Export] - public double TelluricDamageBonus { get; set; } - - [Export] - public double AeolicDamageBonus { get; set; } - - [Export] - public double BaseHydricDamageBonus { get; set; } - - [Export] - public double IgneousDamageBonus { get; set; } } }