++curClass;
}
+void Capsule::NextClass() {
+ ++curClass;
+ if (curClass >= maxClass) {
+ curClass = 0;
+ }
+}
+
+void Capsule::PreviousClass() {
+ --curClass;
+ if (curClass < 0) {
+ curClass = maxClass - 1;
+ }
+}
+
+void Capsule::SetClass(int index) {
+ curClass = index;
+ if (curClass < 0 ) {
+ curClass = 0;
+ }
+ if (curClass >= maxClass) {
+ curClass = maxClass - 1;
+ }
+}
+
Sprite *Capsule::BattleSprite() {
return GetClass().battleSprite;
}
+int Capsule::HungerEmpty() const {
+ return HungerTotal() - HungerFull();
+}
+
+int Capsule::HungerTotal() const {
+ return GetClass().hunger;
+}
+
+int Capsule::HungerFull() const {
+ return GetClass().hungerFull;
+}
+
+bool Capsule::IsHungry() const {
+ return HungerEmpty();
+}
+
+void Capsule::Feed(const common::Item *) {
+ // TODO: find out how to calculate an item's feed value
+ // TODO: an item the capsule favors (changes on every feed and after every
+ // battle) doubles the value
+ int value = 1;
+ GetClass().hungerFull += value;
+ if (GetClass().hungerFull >= GetClass().hunger) {
+ GetClass().hungerFull = GetClass().hunger;
+ UpgradeClass();
+ }
+}
+
+
Capsule::Class::Class()
: name(0)
, tribe(0)
, attackAnimation(0)
, spellAnimation(0)
+, hunger(32)
+, hungerFull(0)
+
, healthBoost(0) {
attacks[0] = 0;
attacks[1] = 0;
td.AddField("attackAnimation", FieldDescription(((char *)&c.attackAnimation) - ((char *)&c), Animation::TYPE_ID).SetReferenced());
td.AddField("spellAnimation", FieldDescription(((char *)&c.spellAnimation) - ((char *)&c), Animation::TYPE_ID).SetReferenced());
+ td.AddField("hunger", FieldDescription(((char *)&c.hunger) - ((char *)&c), Interpreter::NUMBER_ID));
+
td.AddField("healthBoost", FieldDescription(((char *)&c.healthBoost) - ((char *)&c), Interpreter::NUMBER_ID));
td.AddField("statBoost", FieldDescription(((char *)&c.statBoost) - ((char *)&c), Stats::TYPE_ID));
}