]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Interpreter.h
added interpretation of Ikari and Item
[l2e.git] / src / loader / Interpreter.h
index c2fc25f84b6a1b6cb09edf1492e046f1e13c50d2..ffbad42e1a6ef1e2897305c55a04ad3090e38832 100644 (file)
@@ -8,13 +8,36 @@
 #ifndef LOADER_INTERPRETER_H_
 #define LOADER_INTERPRETER_H_
 
+#include "../geometry/Vector.h"
+#include "../graphics/ComplexAnimation.h"
+
 #include <map>
 #include <stdexcept>
 #include <string>
 #include <vector>
+#include <SDL.h>
 
 namespace battle {
+       class Hero;
        class Monster;
+       class PartyLayout;
+       class Stats;
+}
+
+namespace common {
+       class Ikari;
+       class Item;
+       class Spell;
+       class TargetingMode;
+}
+
+namespace graphics {
+       class Animation;
+       class Font;
+       class Frame;
+       class Gauge;
+       class SimpleAnimation;
+       class Sprite;
 }
 
 namespace loader {
@@ -22,6 +45,7 @@ namespace loader {
 class Definition;
 class ParsedSource;
 class PropertyList;
+class Value;
 
 class Interpreter {
 
@@ -33,7 +57,7 @@ public:
 
 public:
        Interpreter(const ParsedSource &source) : source(source) { }
-       ~Interpreter() { }
+       ~Interpreter();
 private:
        Interpreter(const Interpreter &);
        Interpreter &operator =(const Interpreter &);
@@ -41,15 +65,139 @@ private:
 public:
        void ReadSource();
 
+public:
+       graphics::Animation *GetAnimation(const std::string &name);
+       bool GetBoolean(const std::string &name) const;
+       graphics::Font *GetFont(const std::string &name);
+       graphics::Frame *GetFrame(const std::string &name);
+       graphics::Gauge *GetGauge(const std::string &name);
+       battle::Hero *GetHero(const std::string &name);
+       common::Ikari *GetIkari(const std::string &name);
+       common::Item *GetItem(const std::string &name);
+       battle::Monster *GetMonster(const std::string &name);
+       int GetNumber(const std::string &name) const;
+       battle::PartyLayout *GetPartyLayout(const std::string &name);
+       common::Spell *GetSpell(const std::string &name);
+       graphics::Sprite *GetSprite(const std::string &name);
+       const char *GetString(const std::string &name) const;
+       common::TargetingMode *GetTargetingMode(const std::string &name);
+       geometry::Vector<int> GetVector(const std::string &name) const;
+
+public:
+       const std::vector<bool> &Booleans() const { return booleans; }
+       const std::vector<graphics::ComplexAnimation *> &ComplexAnimations() const { return complexAnimations; }
+       const std::vector<graphics::Font *> &Fonts() const { return fonts; }
+       const std::vector<graphics::Frame *> &Frames() const { return frames; }
+       const std::vector<graphics::Gauge *> &Gauges() const { return gauges; }
+       const std::vector<battle::Hero *> &Heroes() const { return heroes; }
+       const std::vector<common::Ikari *> &Ikaris() const { return ikaris; }
+       const std::vector<SDL_Surface *> &Images() const { return images; }
+       const std::vector<common::Item *> &Items() const { return items; }
+       const std::vector<battle::Monster *> &Monsters() const { return monsters; }
+       const std::vector<int> &Numbers() const { return numbers; }
+       const std::vector<battle::PartyLayout *> &PartyLayouts() const { return partyLayouts; }
+       const std::vector<graphics::SimpleAnimation *> &SimpleAnimations() const { return simpleAnimations; }
+       const std::vector<common::Spell *> &Spells() const { return spells; }
+       const std::vector<graphics::Sprite *> &Sprites() const { return sprites; }
+       const std::vector<const char *> &Strings() const { return strings; }
+       const std::vector<common::TargetingMode *> &TargetingModes() const { return targetingModes; }
+       const std::vector<geometry::Vector<int> > &Vectors() const { return vectors; }
+
 private:
+       void ReadDefinition(const Definition &);
        void ReadLiteral(const Definition &);
        void ReadObject(const Definition &);
 
+       graphics::Animation *GetAnimation(const Value &);
+       bool GetBoolean(const Value &);
+       graphics::Font *GetFont(const Value &);
+       graphics::Frame *GetFrame(const Value &);
+       graphics::Gauge *GetGauge(const Value &);
+       battle::Hero *GetHero(const Value &);
+       common::Ikari *GetIkari(const Value &);
+       SDL_Surface *GetImage(const Value &);
+       common::Item *GetItem(const Value &);
+       int GetNumber(const Value &);
+       battle::PartyLayout *GetPartyLayout(const Value &);
+       const PropertyList *GetPropertyList(const Value &);
+       const std::vector<PropertyList *> &GetPropertyListArray(const Value &);
+       common::Spell *GetSpell(const Value &);
+       graphics::Sprite *GetSprite(const Value &);
+       const char *GetString(const Value &);
+       common::TargetingMode *GetTargetingMode(const Value &);
+       const std::vector<Value *> &GetValueArray(const Value &);
+       geometry::Vector<int> GetVector(const Value &);
+
+       void ReadComplexAnimation(graphics::ComplexAnimation &, const PropertyList &);
+       void ReadComplexAnimationFrame(graphics::ComplexAnimation::FrameProp &, const PropertyList &);
+       void ReadFont(graphics::Font &, const PropertyList &);
+       void ReadFrame(graphics::Frame &, const PropertyList &);
+       void ReadGauge(graphics::Gauge &, const PropertyList &);
+       void ReadHero(battle::Hero &, const PropertyList &);
+       void ReadIkari(common::Ikari &, const PropertyList &);
+       void ReadItem(common::Item &, const PropertyList &);
        void ReadMonster(battle::Monster &, const PropertyList &);
+       void ReadPartyLayout(battle::PartyLayout &, const PropertyList &);
+       void ReadSimpleAnimation(graphics::SimpleAnimation &, const PropertyList &);
+       void ReadSpell(common::Spell &, const PropertyList &);
+       void ReadSprite(graphics::Sprite &, const PropertyList &);
+       void ReadStats(battle::Stats &, const PropertyList &);
+       void ReadTargetingMode(common::TargetingMode &, const PropertyList &);
 
 private:
        const ParsedSource &source;
-       std::vector<battle::Monster> monsters;
+       enum Type {
+               BOOLEAN,
+               COMPLEX_ANIMATION,
+               FONT,
+               FRAME,
+               GAUGE,
+               HERO,
+               IKARI,
+               IMAGE,
+               ITEM,
+               MONSTER,
+               NUMBER,
+               PARTY_LAYOUT,
+               PROPERTY_LIST_ARRAY,
+               SIMPLE_ANIMATION,
+               SPELL,
+               SPRITE,
+               STRING,
+               TARGETING_MODE,
+               VECTOR,
+               VALUE_ARRAY,
+       };
+       struct ParsedDefinition {
+               ParsedDefinition(const Definition *dfn, Type type, int index)
+               : dfn(dfn), type(type), index(index) { }
+               const Definition *dfn;
+               Type type;
+               int index;
+       };
+       std::map<std::string, ParsedDefinition> parsedDefinitions;
+
+       std::vector<bool> booleans;
+       std::vector<graphics::ComplexAnimation *> complexAnimations;
+       std::vector<graphics::Font *> fonts;
+       std::vector<graphics::Frame *> frames;
+       std::vector<graphics::Gauge *> gauges;
+       std::vector<battle::Hero *> heroes;
+       std::vector<common::Ikari *> ikaris;
+       std::vector<SDL_Surface *> images;
+       std::vector<common::Item *> items;
+       std::vector<battle::Monster *> monsters;
+       std::vector<int> numbers;
+       std::vector<battle::PartyLayout *> partyLayouts;
+       std::vector<PropertyList *> propertyLists;
+       std::vector<std::vector<PropertyList *> > propertyListArrays;
+       std::vector<graphics::SimpleAnimation *> simpleAnimations;
+       std::vector<common::Spell *> spells;
+       std::vector<graphics::Sprite *> sprites;
+       std::vector<const char *> strings;
+       std::vector<common::TargetingMode *> targetingModes;
+       std::vector<std::vector<Value *> > valueArrays;
+       std::vector<geometry::Vector<int> > vectors;
 
 };