Skip to content
Snippets Groups Projects
Verified Commit 7da653c4 authored by Adrian Paschkowski's avatar Adrian Paschkowski :thinking:
Browse files

Rename PlayerStats/EnemyStats to FighterStats

Both fighter types share the same types of stats, so de-duplicate code by using a common FighterStats struct.
parent ecc04802
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
}
......
......@@ -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,
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment