diff --git a/Assets/Scripts/Fighter.cs b/Assets/Scripts/Fighter.cs index fdf008160d434763c5b56c052e71bda87e46281f..078202b480350cf6679206e19f09da3142db045e 100644 --- a/Assets/Scripts/Fighter.cs +++ b/Assets/Scripts/Fighter.cs @@ -22,6 +22,7 @@ public abstract class Fighter : MonoBehaviour protected int currentHealth = 100; protected Animator animator; protected bool alive { get => currentHealth > 0; } + protected FighterTypes fighterType; protected abstract void Attack(); float timeSinceLastAttack = 0f; @@ -29,8 +30,12 @@ public abstract class Fighter : MonoBehaviour protected virtual void Awake() { animator = GetComponent<Animator>(); - var enemyStats = StatsManager.instance.GetEnemyStats(); - currentHealth = Mathf.RoundToInt(baseHealth * enemyStats.healthMultiplier); + fighterType = FighterTypes.ENEMY; + } + + protected virtual void Start() + { + currentHealth = Mathf.RoundToInt(baseHealth * GetStats().healthMultiplier); } protected virtual void Update() @@ -51,8 +56,7 @@ public abstract class Fighter : MonoBehaviour public void DealDamage(int dmg) { - var enemyStats = StatsManager.instance.GetEnemyStats(); - var actualDamage = Mathf.Max(0, Mathf.RoundToInt(dmg - baseArmor * enemyStats.armorMultiplier)); + var actualDamage = Mathf.Max(0, Mathf.RoundToInt(dmg - baseArmor * GetStats().armorMultiplier)); currentHealth = Mathf.Max(currentHealth - actualDamage, 0); if (currentHealth == 0) { @@ -67,12 +71,16 @@ public abstract class Fighter : MonoBehaviour } } + protected FighterStats GetStats() + { + return StatsManager.instance.fighterStats[fighterType]; + } + void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("AntiPlayer")) { - var enemyStats = StatsManager.instance.GetEnemyStats(); - var damageToDeal = Mathf.RoundToInt(baseAttackDamage * enemyStats.damageMultiplier); + var damageToDeal = Mathf.RoundToInt(baseAttackDamage * GetStats().damageMultiplier); other.GetComponent<Fighter>().DealDamage(damageToDeal); } } diff --git a/Assets/Scripts/StatsManager.cs b/Assets/Scripts/StatsManager.cs index ea985e2465f905d35fad488d07d6e669c5b40344..dc23221b67f2d53b24281164e1af48102dc0c183 100644 --- a/Assets/Scripts/StatsManager.cs +++ b/Assets/Scripts/StatsManager.cs @@ -11,14 +11,13 @@ public enum UpgradeTypes MANA_COST, } -public struct EnemyStats +public enum FighterTypes { - public float healthMultiplier; - public float damageMultiplier; - public float armorMultiplier; + ANTI_PLAYER, + ENEMY, } -public struct PlayerStats +public struct FighterStats { public float healthMultiplier; public float damageMultiplier; @@ -53,26 +52,15 @@ public class StatsManager : MonoBehaviour public static StatsManager instance { get; private set; } - EnemyStats currentEnemyStats; - PlayerStats currentPlayerStats; [SerializeField] int currentMana; - [SerializeField] List<Upgrade> availableUpgrades; + // The currently active statistics for each fighter type + public Dictionary<FighterTypes, FighterStats> fighterStats = new Dictionary<FighterTypes, FighterStats>(); + // Information about currently available and purchased upgrades. Should only be read, not modified. public Dictionary<UpgradeTypes, UpgradeData> upgrades = new Dictionary<UpgradeTypes, UpgradeData>(); - public EnemyStats GetEnemyStats() - { - return currentEnemyStats; - } - - public PlayerStats GetPlayerStats(int stage) - { - // TODO use `stage` - return currentPlayerStats; - } - public int GetMana() { return currentMana; @@ -120,9 +108,10 @@ public class StatsManager : MonoBehaviour void RecalculateStatMultipliers() { - currentEnemyStats.healthMultiplier = upgrades[UpgradeTypes.ENEMY_HEALTH].GetTotalEffectMultiplier(); - currentEnemyStats.damageMultiplier = upgrades[UpgradeTypes.ENEMY_DAMAGE].GetTotalEffectMultiplier(); - currentEnemyStats.armorMultiplier = upgrades[UpgradeTypes.ENEMY_ARMOR].GetTotalEffectMultiplier(); + var enemyStats = fighterStats[FighterTypes.ENEMY]; + enemyStats.healthMultiplier = upgrades[UpgradeTypes.ENEMY_HEALTH].GetTotalEffectMultiplier(); + enemyStats.damageMultiplier = upgrades[UpgradeTypes.ENEMY_DAMAGE].GetTotalEffectMultiplier(); + enemyStats.armorMultiplier = upgrades[UpgradeTypes.ENEMY_ARMOR].GetTotalEffectMultiplier(); } void Awake() @@ -143,11 +132,17 @@ public class StatsManager : MonoBehaviour upgrades.Add(upgrade.type, upgradeData); } - currentEnemyStats.healthMultiplier = 1f; - currentEnemyStats.damageMultiplier = 1f; - currentEnemyStats.armorMultiplier = 1f; - currentPlayerStats.healthMultiplier = 1f; - currentPlayerStats.damageMultiplier = 1f; - currentPlayerStats.armorMultiplier = 1f; + fighterStats.Add(FighterTypes.ANTI_PLAYER, new FighterStats() + { + healthMultiplier = 1f, + damageMultiplier = 1f, + armorMultiplier = 1f, + }); + fighterStats.Add(FighterTypes.ENEMY, new FighterStats() + { + healthMultiplier = 1f, + damageMultiplier = 1f, + armorMultiplier = 1f, + }); } }