X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Floader%2FInterpreter.h;fp=src%2Floader%2FInterpreter.h;h=b826d2cf7be2b15b03c58903b7b3078881545d04;hb=ac3755adc509404528ef7de58695bf8e3bfb7dcd;hp=044a3c0848c0dd51bb0df8a3124fb48e1c0457f2;hpb=f821f7bf3d3faa6aa27eec278350b861badfa03d;p=l2e.git diff --git a/src/loader/Interpreter.h b/src/loader/Interpreter.h index 044a3c0..b826d2c 100644 --- a/src/loader/Interpreter.h +++ b/src/loader/Interpreter.h @@ -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 GetVector(const std::string &name) const; - -public: - const std::vector &BattleResources() const { return battleResources; } - const std::vector &Booleans() const { return booleans; } - const std::vector &Colors() const { return colors; } - const std::vector &ComplexAnimations() const { return complexAnimations; } - const std::vector &Fonts() const { return fonts; } - const std::vector &Frames() const { return frames; } - const std::vector &Gauges() const { return gauges; } - const std::vector &Heroes() const { return heroes; } - const std::vector &Ikaris() const { return ikaris; } - const std::vector &Images() const { return images; } - const std::vector &Items() const { return items; } - const std::vector &MenuProperties() const { return menuProperties; } - const std::vector &Monsters() const { return monsters; } - const std::vector &Numbers() const { return numbers; } - const std::vector &PartyLayouts() const { return partyLayouts; } - const std::vector &SimpleAnimations() const { return simpleAnimations; } - const std::vector &Spells() const { return spells; } - const std::vector &Sprites() const { return sprites; } - const std::vector &Strings() const { return strings; } - const std::vector &TargetingModes() const { return targetingModes; } - const std::vector > &Vectors() const { return vectors; } + const std::vector &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 &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 &GetValueArray(const Value &); - geometry::Vector 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 parsedDefinitions; + bool CanLink(const Value &) const; + void Postpone(int type, int id, std::ptrdiff_t offset, const std::string &identifier, int linkedType); + std::vector postponedDefinitions; + std::map imageCache; - std::vector battleResources; - std::vector booleans; - std::vector colors; - std::vector complexAnimations; - std::vector fonts; - std::vector frames; - std::vector gauges; - std::vector heroes; - std::vector ikaris; - std::vector images; - std::vector items; - std::vector menuProperties; - std::vector monsters; - std::vector numbers; - std::vector partyLayouts; - std::vector propertyLists; - std::vector > propertyListArrays; - std::vector simpleAnimations; - std::vector spells; - std::vector sprites; - std::vector strings; - std::vector targetingModes; - std::vector > valueArrays; - std::vector > vectors; + std::map > values; };