/// <summary> /// Controls battle based on current stance. /// </summary> /// <param name="Stance"></param> public void SetStanceModifier(Ifight attacker, Ifight defender) { ItemWeapon attackerWeapon = attacker.EquippedWeapon as ItemWeapon; ItemArmor attackerArmor = attacker.EquippedArmor as ItemArmor; ItemArmor defenderArmor = defender.EquippedArmor as ItemArmor; double damage = 0; int healthModifier; switch (Stance) { case BattleStance.ATTACK: if (attackerWeapon.WeaponDamageType == defenderArmor.ArmorResistanceType) { damage = Math.Round(attackerWeapon.WeaponDamageAmount * defenderArmor.ArmorResistModifier); } else { damage = attackerWeapon.WeaponDamageAmount; } break; case BattleStance.DEFEND: damage = 0; break; case BattleStance.FLEE: //GameViewModel.OnPlayerFlee(); damage = 0; break; default: break; } NPC defenderHealth = defender as NPC; healthModifier = (int)damage; defenderHealth.Health = defenderHealth.Health - healthModifier; // Temporary: To be moved to a method in the Fighter NPC switch (healthModifier) { case 0: defender.Stance = BattleStance.ATTACK; break; case 35: defender.Stance = BattleStance.DEFEND; break; case 50: defender.Stance = BattleStance.FLEE; break; default: break; } }
/// <summary> /// Controls battle based on current stance. /// </summary> /// <param name="Stance"></param> public void SetStanceModifier(Ifight attacker, Ifight defender) { ItemWeapon attackerWeapon = attacker.EquippedWeapon as ItemWeapon; ItemArmor attackerArmor = attacker.EquippedArmor as ItemArmor; ItemArmor defenderArmor = attacker.EquippedArmor as ItemArmor; double damage = 0; int healthModifier; switch (Stance) { case BattleStance.ATTACK: if (attackerWeapon.WeaponDamageType == defenderArmor.ArmorResistanceType) { damage = Math.Round(attackerWeapon.WeaponDamageAmount * defenderArmor.ArmorResistModifier); } else { damage = attackerWeapon.WeaponDamageAmount; } break; case BattleStance.DEFEND: damage = 0; break; case BattleStance.FLEE: damage = 0; break; default: break; } Player defenderHealth = defender as Player; healthModifier = (int)damage; defenderHealth.Health = -healthModifier; }
/// <summary> /// Method that controls combat: /// </summary> public void OnPlayerFight() { if (_currentNPC != null && _currentNPC is Ifight) { Ifight combatNPC = _currentNPC as Ifight; if (combatNPC.Stance == Character.BattleStance.NOFIGHT) { CombatLog += "What are you doing? That one is a friend! Ease up a bit..." + "\n"; } else { switch (Player.Stance) { case Character.BattleStance.NOFIGHT: break; case Character.BattleStance.ATTACK: CombatLog += $"You attack with your {Player.EquippedWeapon.ItemName}" + "\n"; break; case Character.BattleStance.DEFEND: CombatLog += $"You attempt to brace yourself agaisnt the foe with your {Player.EquippedArmor.ItemName} to protect you." + "\n"; break; case Character.BattleStance.FLEE: PlayerFlee(); break; case Character.BattleStance.AUTOFIGHT: break; default: break; } if (_player.Stance != Character.BattleStance.FLEE) { _player.SetStanceModifier(_player, combatNPC); _currentNPC.Health = combatNPC.Health; CheckIfNPCDie(); if (combatNPC != null) { BattleRounds++; if (combatNPC is Monger && BattleRounds == 2) { combatNPC.Stance = Character.BattleStance.FLEE; BattleRounds = 0; } switch (combatNPC.Stance) { case Character.BattleStance.NOFIGHT: break; case Character.BattleStance.ATTACK: CombatLog += $"Your foe attacks you with their {combatNPC.EquippedWeapon.ItemName}" + "\n"; break; case Character.BattleStance.DEFEND: CombatLog += $"Your foe leverages their {combatNPC.EquippedArmor.ItemName} in attempt to deflects some of your attack." + "\n"; break; case Character.BattleStance.FLEE: NPCFlee(); break; case Character.BattleStance.AUTOFIGHT: break; default: break; } if (combatNPC != null) { combatNPC.SetStanceModifier(combatNPC, _player); } _player.CheckPlayerHealthByCombat(); } } } } }