]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Interpreter.h
fixed some issues to get it to compile again
[l2e.git] / src / loader / Interpreter.h
index 044a3c0848c0dd51bb0df8a3124fb48e1c0457f2..b826d2cf7be2b15b03c58903b7b3078881545d04 100644 (file)
@@ -8,6 +8,7 @@
 #ifndef LOADER_INTERPRETER_H_
 #define LOADER_INTERPRETER_H_
 
+#include "TypeDescription.h"
 #include "../geometry/Vector.h"
 #include "../graphics/Color.h"
 #include "../graphics/ComplexAnimation.h"
@@ -67,163 +68,47 @@ private:
 
 public:
        void ReadSource();
+       void *GetObject(int typeId, const std::string &name);
+
+       static void CreateTypeDescriptions();
+       struct PostponedDefinition {
+               PostponedDefinition(int type, int id, std::ptrdiff_t offset, const char *identifier, int linkedType)
+               : type(type), id(id), offset(offset), identifier(identifier), linkedType(linkedType) { }
+               int type;
+               int id;
+               std::ptrdiff_t offset;
+               const char *identifier;
+               int linkedType;
+       };
 
-public:
-       graphics::Animation *GetAnimation(const std::string &name);
-       battle::Resources *GetBattleResources(const std::string &name);
-       bool GetBoolean(const std::string &name) const;
-       const graphics::Color &GetColor(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);
-       graphics::MenuProperties *GetMenuProperties(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);
-       const char *GetPath(const std::string &name) const;
-       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<battle::Resources *> &BattleResources() const { return battleResources; }
-       const std::vector<bool> &Booleans() const { return booleans; }
-       const std::vector<graphics::Color> &Colors() const { return colors; }
-       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<graphics::MenuProperties *> &MenuProperties() const { return menuProperties; }
-       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; }
+       const std::vector<PostponedDefinition> &PostponedDefinitions() { return postponedDefinitions; }
 
 private:
        void ReadDefinition(const Definition &);
        void ReadLiteral(const Definition &);
        void ReadObject(const Definition &);
 
-       graphics::Animation *GetAnimation(const Value &);
-       battle::Resources *GetBattleResources(const Value &);
-       graphics::Color GetColor(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 &);
-       graphics::MenuProperties *GetMenuProperties(const Value &);
-       battle::Monster *GetMonster(const Value &);
-       int GetNumber(const Value &);
-       battle::PartyLayout *GetPartyLayout(const Value &);
-       const PropertyList *GetPropertyList(const Value &);
-       const std::vector<PropertyList *> &GetPropertyListArray(const Value &);
-       const char *GetPath(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 ReadBattleResources(battle::Resources &, const PropertyList &);
-       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 ReadMenuProperties(graphics::MenuProperties &, 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 &);
+       void *GetObject(int typeId, const Value &value);
+       void ReadObject(int typeId, int id, char *dest, const PropertyList &);
 
 private:
        const ParsedSource &source;
-       enum Type {
-               BATTLE_RESOURCES,
-               BOOLEAN,
-               COLOR,
-               COMPLEX_ANIMATION,
-               FONT,
-               FRAME,
-               GAUGE,
-               HERO,
-               IKARI,
-               IMAGE,
-               ITEM,
-               MENU_PROPERTIES,
-               MONSTER,
-               NUMBER,
-               PARTY_LAYOUT,
-               PATH,
-               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) { }
+               ParsedDefinition(const Definition *dfn, int type, int id)
+               : dfn(dfn), type(type), id(id) { }
                const Definition *dfn;
-               Type type;
-               int index;
+               int type;
+               int id;
        };
        std::map<std::string, ParsedDefinition> parsedDefinitions;
 
+       bool CanLink(const Value &) const;
+       void Postpone(int type, int id, std::ptrdiff_t offset, const std::string &identifier, int linkedType);
+       std::vector<PostponedDefinition> postponedDefinitions;
+
        std::map<std::string, SDL_Surface *> imageCache;
 
-       std::vector<battle::Resources *> battleResources;
-       std::vector<bool> booleans;
-       std::vector<graphics::Color> colors;
-       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<graphics::MenuProperties *> menuProperties;
-       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;
+       std::map<int, std::vector<void *> > values;
 
 };