Fix data model for elemental damage and resistance
This commit is contained in:
@@ -177,7 +177,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
|
||||
{
|
||||
if (CurrentHP.Value > 0)
|
||||
{
|
||||
var damage = DamageCalculator.CalculatePlayerDamage(hitBox.Damage, hitBox.GetParent<IPlayer>().PlayerStatInfo, EnemyStatInfo);
|
||||
var damage = DamageCalculator.CalculatePlayerDamage(hitBox.Damage, hitBox.GetParent<IPlayer>().PlayerStatInfo, EnemyStatInfo, GameRepo.EquippedWeapon);
|
||||
GD.Print($"Enemy Hit for {damage} damage.");
|
||||
EnemyLogic.Input(new EnemyLogic.Input.HitByPlayer(damage));
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ namespace GameJamDungeon
|
||||
if (_currentHP.Value > 0)
|
||||
{
|
||||
var enemy = hitBox.GetParent<IEnemy>();
|
||||
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.");
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user