]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Interpreter.cpp
added interpretation of battle resources
[l2e.git] / src / loader / Interpreter.cpp
index 372a114b8fb26fd83d63493b26099bbc6eef0c85..fcfe473eaad533b69210a914ebd66d9710873704 100644 (file)
@@ -11,6 +11,7 @@
 #include "../battle/Hero.h"
 #include "../battle/Monster.h"
 #include "../battle/PartyLayout.h"
+#include "../battle/Resources.h"
 #include "../common/Ikari.h"
 #include "../common/Item.h"
 #include "../common/Spell.h"
@@ -53,6 +54,9 @@ using std::vector;
 namespace loader {
 
 Interpreter::~Interpreter() {
+       for (vector<battle::Resources *>::const_iterator i(battleResources.begin()), end(battleResources.end()); i != end; ++i) {
+               delete *i;
+       }
        for (vector<ComplexAnimation *>::const_iterator i(complexAnimations.begin()), end(complexAnimations.end()); i != end; ++i) {
                delete *i;
        }
@@ -119,6 +123,19 @@ Animation *Interpreter::GetAnimation(const std::string &name) {
        }
 }
 
+battle::Resources *Interpreter::GetBattleResources(const std::string &name) {
+       map<string, ParsedDefinition>::const_iterator i(parsedDefinitions.find(name));
+       if (i != parsedDefinitions.end()) {
+               if (i->second.type == BATTLE_RESOURCES) {
+                       return battleResources[i->second.index];
+               } else {
+                       throw Error("cannot cast " + i->second.dfn->TypeName() + " to BattleResources");
+               }
+       } else {
+               throw Error("access to undefined BattleResources " + name);
+       }
+}
+
 bool Interpreter::GetBoolean(const std::string &name) const {
        map<string, ParsedDefinition>::const_iterator i(parsedDefinitions.find(name));
        if (i != parsedDefinitions.end()) {
@@ -441,6 +458,17 @@ Animation *Interpreter::GetAnimation(const Value &v) {
        }
 }
 
+battle::Resources *Interpreter::GetBattleResources(const Value &v) {
+       if (v.IsLiteral()) {
+               battle::Resources *r(new battle::Resources);
+               ReadBattleResources(*r, *v.GetLiteral().GetProperties());
+               return r;
+       } else {
+               ReadDefinition(source.GetDefinition(v.GetIdentifier()));
+               return GetBattleResources(v.GetIdentifier());
+       }
+}
+
 bool Interpreter::GetBoolean(const Value &v) {
        if (v.IsLiteral()) {
                return v.GetLiteral().GetBoolean();
@@ -666,7 +694,13 @@ const vector<Value *> &Interpreter::GetValueArray(const Value &v) {
 
 
 void Interpreter::ReadObject(const Definition &dfn) {
-       if (dfn.TypeName() == "ComplexAnimation") {
+       if (dfn.TypeName() == "BattleResources") {
+               battle::Resources *res(new battle::Resources);
+               int index(battleResources.size());
+               battleResources.push_back(res);
+               ReadBattleResources(*res, *dfn.GetProperties());
+               parsedDefinitions.insert(make_pair(dfn.Identifier(), ParsedDefinition(&dfn, BATTLE_RESOURCES, index)));
+       } else if (dfn.TypeName() == "ComplexAnimation") {
                ComplexAnimation *animation(new ComplexAnimation);
                int index(complexAnimations.size());
                complexAnimations.push_back(animation);
@@ -756,6 +790,114 @@ void Interpreter::ReadObject(const Definition &dfn) {
 }
 
 
+void Interpreter::ReadBattleResources(battle::Resources &res, const PropertyList &props) {
+       for (PropertyList::ConstIterator i(props.Begin()), end(props.End()); i != end; ++i) {
+               if (i->first == "swapCursor") {
+                       res.swapCursor = GetSprite(*i->second);
+               } else if (i->first == "moveIcons") {
+                       res.moveIcons = GetSprite(*i->second);
+               } else if (i->first == "attackIcons") {
+                       res.attackIcons = GetSprite(*i->second);
+               } else if (i->first == "attackChoiceIcons") {
+                       res.attackChoiceIcons = GetSprite(*i->second);
+               } else if (i->first == "titleFrame") {
+                       res.titleFrame = GetFrame(*i->second);
+               } else if (i->first == "titleFont") {
+                       res.titleFont = GetFont(*i->second);
+               } else if (i->first == "heroTagFrame") {
+                       res.heroTagFrame = GetFrame(*i->second);
+               } else if (i->first == "activeHeroTagFrame") {
+                       res.activeHeroTagFrame = GetFrame(*i->second);
+               } else if (i->first == "smallHeroTagFrame") {
+                       res.smallHeroTagFrame = GetFrame(*i->second);
+               } else if (i->first == "lastSmallHeroTagFrame") {
+                       res.lastSmallHeroTagFrame = GetFrame(*i->second);
+               } else if (i->first == "heroTagFont") {
+                       res.heroTagFont = GetFont(*i->second);
+               } else if (i->first == "heroTagLabels") {
+                       res.heroTagLabels = GetSprite(*i->second);
+               } else if (i->first == "healthGauge") {
+                       res.healthGauge = GetGauge(*i->second);
+               } else if (i->first == "manaGauge") {
+                       res.manaGauge = GetGauge(*i->second);
+               } else if (i->first == "ikariGauge") {
+                       res.ikariGauge = GetGauge(*i->second);
+               } else if (i->first == "selectFrame") {
+                       res.selectFrame = GetFrame(*i->second);
+               } else if (i->first == "normalFont") {
+                       res.normalFont = GetFont(*i->second);
+               } else if (i->first == "disabledFont") {
+                       res.disabledFont = GetFont(*i->second);
+               } else if (i->first == "menuCursor") {
+                       res.menuCursor = GetSprite(*i->second);
+               } else if (i->first == "weaponTargetCursor") {
+                       res.weaponTargetCursor = GetSprite(*i->second);
+               } else if (i->first == "magicTargetCursor") {
+                       res.magicTargetCursor = GetSprite(*i->second);
+               } else if (i->first == "itemTargetCursor") {
+                       res.itemTargetCursor = GetSprite(*i->second);
+               } else if (i->first == "spellMenuHeadline") {
+                       res.spellMenuHeadline = GetString(*i->second);
+               } else if (i->first == "spellMenuProperties") {
+                       res.spellMenuProperties = GetMenuProperties(*i->second);
+               } else if (i->first == "itemMenuHeadline") {
+                       res.itemMenuHeadline = GetString(*i->second);
+               } else if (i->first == "itemMenuProperties") {
+                       res.itemMenuProperties = GetMenuProperties(*i->second);
+               } else if (i->first == "ikariMenuHeadline") {
+                       res.ikariMenuHeadline = GetString(*i->second);
+               } else if (i->first == "ikariMenuProperties") {
+                       res.ikariMenuProperties = GetMenuProperties(*i->second);
+               } else if (i->first == "noEquipmentText") {
+                       res.noEquipmentText = GetString(*i->second);
+               } else if (i->first == "escapeText") {
+                       res.escapeText = GetString(*i->second);
+               } else if (i->first == "numberAnimationPrototype") {
+                       res.numberAnimationPrototype = GetAnimation(*i->second);
+               } else if (i->first == "bigNumberSprite") {
+                       res.bigNumberSprite = GetSprite(*i->second);
+               } else if (i->first == "greenNumberSprite") {
+                       res.greenNumberSprite = GetSprite(*i->second);
+               } else if (i->first == "weaponMenuIcon") {
+                       res.weaponMenuIcon = GetSprite(*i->second);
+               } else if (i->first == "armorMenuIcon") {
+                       res.armorMenuIcon = GetSprite(*i->second);
+               } else if (i->first == "shieldMenuIcon") {
+                       res.shieldMenuIcon = GetSprite(*i->second);
+               } else if (i->first == "helmetMenuIcon") {
+                       res.helmetMenuIcon = GetSprite(*i->second);
+               } else if (i->first == "ringMenuIcon") {
+                       res.ringMenuIcon = GetSprite(*i->second);
+               } else if (i->first == "jewelMenuIcon") {
+                       res.jewelMenuIcon = GetSprite(*i->second);
+               } else if (i->first == "levelLabelCol") {
+                       res.levelLabelCol = GetNumber(*i->second);
+               } else if (i->first == "levelLabelRow") {
+                       res.levelLabelRow = GetNumber(*i->second);
+               } else if (i->first == "healthLabelCol") {
+                       res.healthLabelCol = GetNumber(*i->second);
+               } else if (i->first == "healthLabelRow") {
+                       res.healthLabelRow = GetNumber(*i->second);
+               } else if (i->first == "manaLabelCol") {
+                       res.manaLabelCol = GetNumber(*i->second);
+               } else if (i->first == "manaLabelRow") {
+                       res.manaLabelRow = GetNumber(*i->second);
+               } else if (i->first == "moveLabelCol") {
+                       res.moveLabelCol = GetNumber(*i->second);
+               } else if (i->first == "moveLabelRow") {
+                       res.moveLabelRow = GetNumber(*i->second);
+               } else if (i->first == "ikariLabelCol") {
+                       res.ikariLabelCol = GetNumber(*i->second);
+               } else if (i->first == "ikariLabelRow") {
+                       res.ikariLabelRow = GetNumber(*i->second);
+               } else if (i->first == "heroesBgColor") {
+                       res.heroesBgColor = GetColor(*i->second);
+               } else {
+                       throw Error("unknown BattleResources property: " + i->first);
+               }
+       }
+}
+
 void Interpreter::ReadComplexAnimation(ComplexAnimation &a, const PropertyList &props) {
        for (PropertyList::ConstIterator i(props.Begin()), end(props.End()); i != end; ++i) {
                if (i->first == "sprite") {