Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
 public abstract void TakeDamage(CombatManager.DamageResult results);
Esempio n. 3
0
        }                   // 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