#include "Monster.h"
+#include "../loader/TypeDescription.h"
+
+using loader::FieldDescription;
+using loader::TypeDescription;
+
namespace battle {
-Monster::Monster() {
- // TODO Auto-generated constructor stub
+Monster::Monster()
+: name("")
+, sprite(0)
+, dropItem(0)
+, attackScript(0)
+, defenseScript(0)
+
+, meleeAnimation(0)
+, attackAnimation(0)
+, spellAnimation(0)
+
+, maxHealth(0)
+, health(0)
+, maxMana(0)
+, mana(0)
+
+, expReward(0)
+, goldReward(0)
+
+, level(0)
+, dropChance(0) {
}
Monster::~Monster() {
- // TODO Auto-generated destructor stub
}
-} /* namespace battle */
+
+void Monster::SubtractHealth(int amount) {
+ if (amount > Health()) {
+ health = 0;
+ } else {
+ health -= amount;
+ }
+}
+
+
+void Monster::CreateTypeDescription() {
+ Monster m;
+
+ int animationId(TypeDescription::GetTypeId("Animation"));
+ int numberId(TypeDescription::GetTypeId("Number"));
+ int spriteId(TypeDescription::GetTypeId("Sprite"));
+ int statsId(TypeDescription::GetTypeId("Stats"));
+ int stringId(TypeDescription::GetTypeId("String"));
+
+ TypeDescription &td(TypeDescription::CreateOrGet("Monster"));
+ td.SetConstructor(&Construct);
+ td.SetSize(sizeof(Monster));
+
+ td.AddField("name", FieldDescription(((char *)&m.name) - ((char *)&m), stringId, true));
+ td.AddField("sprite", FieldDescription(((char *)&m.sprite) - ((char *)&m), spriteId, true));
+ td.AddField("level", FieldDescription(((char *)&m.level) - ((char *)&m), numberId, false));
+
+ td.AddField("maxHealth", FieldDescription(((char *)&m.maxHealth) - ((char *)&m), numberId, false));
+ td.AddField("health", FieldDescription(((char *)&m.health) - ((char *)&m), numberId, false));
+ td.AddField("maxMana", FieldDescription(((char *)&m.maxMana) - ((char *)&m), numberId, false));
+ td.AddField("mana", FieldDescription(((char *)&m.mana) - ((char *)&m), numberId, false));
+ td.AddField("stats", FieldDescription(((char *)&m.stats) - ((char *)&m), statsId, false));
+
+ td.AddField("attackAnimation", FieldDescription(((char *)&m.attackAnimation) - ((char *)&m), animationId, true));
+ td.AddField("spellAnimation", FieldDescription(((char *)&m.spellAnimation) - ((char *)&m), animationId, true));
+ td.AddField("meleeAnimation", FieldDescription(((char *)&m.meleeAnimation) - ((char *)&m), animationId, true));
+}
+
+void Monster::Construct(void *data) {
+ new (data) Monster;
+}
+
+}