#region File Description //----------------------------------------------------------------------------- // Monster.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #endregion #region Using Statements using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; #endregion namespace RolePlayingGameData { /// /// An enemy NPC that fights you in combat. /// /// /// Any combat many have many of the same monster, and they don't exist beyond /// combat. Therefore, current statistics are tracked in the runtime combat engine. /// public class Monster : FightingCharacter { #region Artificial Intelligence Parameters /// /// The chance that this monster will defend instead of attack. /// private int defendPercentage; /// /// The chance that this monster will defend instead of attack. /// public int DefendPercentage { get { return defendPercentage; } set { defendPercentage = (value > 100 ? 100 : (value < 0 ? 0 : value)); } } #endregion #region Combat Rewards /// /// The possible gear drops from this monster. /// private List gearDrops = new List(); /// /// The possible gear drops from this monster. /// public List GearDrops { get { return gearDrops; } set { gearDrops = value; } } public int CalculateGoldReward(Random random) { return CharacterClass.BaseGoldValue * CharacterLevel; } public int CalculateExperienceReward(Random random) { return CharacterClass.BaseExperienceValue * CharacterLevel; } public List CalculateGearDrop(Random random) { List gearRewards = new List(); Random useRandom = random; if (useRandom == null) { useRandom = new Random(); } foreach (GearDrop gearDrop in GearDrops) { if (random.Next(100) < gearDrop.DropPercentage) { gearRewards.Add(gearDrop.GearName); } } return gearRewards; } #endregion #region Content Type Reader /// /// Reads a Monster object from the content pipeline. /// public class MonsterReader : ContentTypeReader { protected override Monster Read(ContentReader input, Monster existingInstance) { Monster monster = existingInstance; if (monster == null) { monster = new Monster(); } input.ReadRawObject(monster as FightingCharacter); monster.DefendPercentage = input.ReadInt32(); monster.GearDrops.AddRange(input.ReadObject>()); return monster; } } #endregion } }