4 * Created on: Aug 26, 2012
8 #ifndef LOADER_INTERPRETER_H_
9 #define LOADER_INTERPRETER_H_
11 #include "../geometry/Vector.h"
12 #include "../graphics/ComplexAnimation.h"
28 class SimpleAnimation;
42 class Error: public std::runtime_error {
44 Error(const std::string &msg) : std::runtime_error("interpreter error: " + msg) { }
48 Interpreter(const ParsedSource &source) : source(source) { }
51 Interpreter(const Interpreter &);
52 Interpreter &operator =(const Interpreter &);
58 graphics::Animation *GetAnimation(const std::string &name);
59 bool GetBoolean(const std::string &name) const;
60 battle::Hero *GetHero(const std::string &name);
61 battle::Monster *GetMonster(const std::string &name);
62 int GetNumber(const std::string &name) const;
63 graphics::Sprite *GetSprite(const std::string &name);
64 const char *GetString(const std::string &name) const;
65 geometry::Vector<int> GetVector(const std::string &name) const;
68 const std::vector<bool> &Booleans() const { return booleans; }
69 const std::vector<graphics::ComplexAnimation *> &ComplexAnimations() const { return complexAnimations; }
70 const std::vector<battle::Hero *> &Heroes() const { return heroes; }
71 const std::vector<SDL_Surface *> &Images() const { return images; }
72 const std::vector<battle::Monster *> &Monsters() const { return monsters; }
73 const std::vector<int> &Numbers() const { return numbers; }
74 const std::vector<graphics::SimpleAnimation *> &SimpleAnimations() const { return simpleAnimations; }
75 const std::vector<graphics::Sprite *> &Sprites() const { return sprites; }
76 const std::vector<const char *> &Strings() const { return strings; }
77 const std::vector<geometry::Vector<int> > &Vectors() const { return vectors; }
80 void ReadDefinition(const Definition &);
81 void ReadLiteral(const Definition &);
82 void ReadObject(const Definition &);
84 graphics::Animation *GetAnimation(const Value &);
85 bool GetBoolean(const Value &);
86 SDL_Surface *GetImage(const Value &);
87 int GetNumber(const Value &);
88 const PropertyList *GetPropertyList(const Value &);
89 const std::vector<PropertyList *> &GetPropertyListArray(const Value &);
90 graphics::Sprite *GetSprite(const Value &);
91 const char *GetString(const Value &);
92 const std::vector<Value *> &GetValueArray(const Value &);
93 geometry::Vector<int> GetVector(const Value &);
95 void ReadComplexAnimation(graphics::ComplexAnimation &, const PropertyList &);
96 void ReadComplexAnimationFrame(graphics::ComplexAnimation::FrameProp &, const PropertyList &);
97 void ReadHero(battle::Hero &, const PropertyList &);
98 void ReadMonster(battle::Monster &, const PropertyList &);
99 void ReadSimpleAnimation(graphics::SimpleAnimation &, const PropertyList &);
100 void ReadSprite(graphics::Sprite &, const PropertyList &);
101 void ReadStats(battle::Stats &, const PropertyList &);
104 const ParsedSource &source;
119 struct ParsedDefinition {
120 ParsedDefinition(const Definition *dfn, Type type, int index)
121 : dfn(dfn), type(type), index(index) { }
122 const Definition *dfn;
126 std::map<std::string, ParsedDefinition> parsedDefinitions;
128 std::vector<bool> booleans;
129 std::vector<graphics::ComplexAnimation *> complexAnimations;
130 std::vector<battle::Hero *> heroes;
131 std::vector<SDL_Surface *> images;
132 std::vector<battle::Monster *> monsters;
133 std::vector<int> numbers;
134 std::vector<PropertyList *> propertyLists;
135 std::vector<std::vector<PropertyList *> > propertyListArrays;
136 std::vector<graphics::SimpleAnimation *> simpleAnimations;
137 std::vector<graphics::Sprite *> sprites;
138 std::vector<const char *> strings;
139 std::vector<std::vector<Value *> > valueArrays;
140 std::vector<geometry::Vector<int> > vectors;
146 #endif /* LOADER_INTERPRETER_H_ */