public override void TakeDamage(CombatManager.DamageResult results) { int hitsTaken = 0; // A rat has no resistances or weaknesses to any type of damage, so all damage is taken // off the rat's HP. foreach (var damagePair in results.DamageDealt) { hitsTaken += damagePair.Value; } if (hitsTaken > _HP) { Die(this, results.Attacker); } else { _HP -= hitsTaken; } }
public abstract void TakeDamage(CombatManager.DamageResult results);
} // ICombatant public void TakeDamage(CombatManager.DamageResult results) { // If you're hit if (results.AttackResult.Critical || results.AttackResult.Hit) { int hitsTaken = 0; int poisonDamage = 0; bool energyDrained = false; // Sort out the damage types foreach (var damagePair in results.DamageDealt) { switch (damagePair.Key) { case CombatManager.DamageType.Slashing: case CombatManager.DamageType.Bludgeoning: case CombatManager.DamageType.Piercing: hitsTaken += damagePair.Value; break; case CombatManager.DamageType.Rust: // TODO: Implement damage to armor in Inventory class break; case CombatManager.DamageType.Poison: poisonDamage += damagePair.Value; // TODO: Research actual poison damage handling, but for now just set Poisoned // For now, TakePoisonDmg randomly causes HP damage while poisoned and healing is stopped. InventoryEffectManager.HeroPoisoned = true; break; case CombatManager.DamageType.Energy: energy -= damagePair.Value; energyDrained = true; break; default: break; } } // If you died from regular damage if (!TakeHit(hitsTaken)) { deathMessage = "The " + results.Attacker.EntityName + " has killed you."; DungeonGameEngine.ThisGame.GameOver("killed by a " + results.Attacker.EntityName); } // If your energy was drained... if (energyDrained) { // And you survived the drainage... if (SurvivesEnergyChange()) { DungeonGameEngine.ProcessMessageQueue(false, "You feel a sudden loss of energy."); } else { // or if you die from the drainage CombatManager.AppendDeathMessage( "You had all your remaining energy sucked right out of you."); DungeonGameEngine.ThisGame.GameOver("drained to death"); } } } } // ICombatant