]> git.localhorst.tv Git - l2e.git/commitdiff
added getters for interpreted objects
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Wed, 29 Aug 2012 18:15:04 +0000 (20:15 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Wed, 29 Aug 2012 18:15:04 +0000 (20:15 +0200)
src/loader/Interpreter.cpp
src/loader/Interpreter.h

index 9e076c1cb68494c46ce18c54bacf41ff578312c7..b0aa1a4d2e1c98dfddaf729ad168a66c91a8c606 100644 (file)
@@ -14,6 +14,8 @@
 #include "../graphics/SimpleAnimation.h"
 #include "../graphics/Sprite.h"
 
+#include <SDL_image.h>
+
 using battle::Hero;
 using battle::Monster;
 using battle::Stats;
@@ -29,6 +31,52 @@ using std::vector;
 
 namespace loader {
 
+Animation *Interpreter::GetAnimation(const std::string &name) {
+       map<string, Animation *>::const_iterator i(animations.find(name));
+       if (i != animations.end()) {
+               return i->second;
+       } else {
+               throw Error("access to undefined Animation " + name);
+       }
+}
+
+Hero *Interpreter::GetHero(const std::string &name) {
+       map<string, Hero *>::const_iterator i(heroes.find(name));
+       if (i != heroes.end()) {
+               return i->second;
+       } else {
+               throw Error("access to undefined Hero " + name);
+       }
+}
+
+Monster *Interpreter::GetMonster(const std::string &name) {
+       map<string, Monster *>::const_iterator i(monsters.find(name));
+       if (i != monsters.end()) {
+               return i->second;
+       } else {
+               throw Error("access to undefined Monster " + name);
+       }
+}
+
+int Interpreter::GetNumber(const std::string &name) const {
+       map<string, int>::const_iterator i(numbers.find(name));
+       if (i != numbers.end()) {
+               return i->second;
+       } else {
+               throw Error("access to undefined Number " + name);
+       }
+}
+
+Sprite *Interpreter::GetSprite(const std::string &name) {
+       map<string, Sprite *>::const_iterator i(sprites.find(name));
+       if (i != sprites.end()) {
+               return i->second;
+       } else {
+               throw Error("access to undefined Sprite " + name);
+       }
+}
+
+
 void Interpreter::ReadSource() {
        for (set<string>::const_iterator i(source.Exports().begin()), end(source.Exports().end()); i != end; ++i) {
                ReadDefinition(source.GetDefinition(*i));
@@ -125,12 +173,8 @@ bool Interpreter::GetBoolean(const Value &v) {
 }
 
 SDL_Surface *Interpreter::GetImage(const Value &v) {
-       if (v.IsLiteral()) {
-               // TODO: image lookup
-               return NULL;
-       } else {
-               throw Error("identifier resolution not implemented for images");
-       }
+       const char *file(GetString(v));
+       return IMG_Load(file);
 }
 
 int Interpreter::GetNumber(const Value &v) {
index 9ba5924a8ab85173e4967c167cc6a62ac6139149..2748c63bdadfa44e80539fca52d9517cb4636822 100644 (file)
@@ -55,6 +55,13 @@ private:
 public:
        void ReadSource();
 
+public:
+       graphics::Animation *GetAnimation(const std::string &name);
+       battle::Hero *GetHero(const std::string &name);
+       battle::Monster *GetMonster(const std::string &name);
+       int GetNumber(const std::string &name) const;
+       graphics::Sprite *GetSprite(const std::string &name);
+
 private:
        void ReadDefinition(const Definition &);
        void ReadLiteral(const Definition &);