#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
}
}