]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Caster.cpp
activated the loader
[l2e.git] / src / loader / Caster.cpp
index 050ac930e9ef956d90bb16763fd94a47e02697b5..63b389adc9d848dda118d22490a23eb3b5ed2049 100644 (file)
@@ -1,5 +1,7 @@
 #include "Caster.h"
 
+#include "Interpreter.h"
+#include "Loader.h"
 #include "TypeDescription.h"
 #include "../battle/Resources.h"
 #include "../battle/Monster.h"
@@ -23,49 +25,71 @@ using std::string;
 
 namespace loader {
 
-Caster::Caster(Interpreter &intp)
-: intp(intp) {
+Caster::Caster(Loader &ld, Interpreter &intp)
+: ld(ld)
+, intp(intp) {
 
 }
 
 
 battle::Resources *Caster::GetBattleResources(const string &ident) {
        return reinterpret_cast<battle::Resources *>(
-                       intp.GetObject(battle::Resources::TYPE_ID, ident));
+                       GetObject(battle::Resources::TYPE_ID, ident));
 }
 
 Capsule *Caster::GetCapsule(const string &ident) {
-       return reinterpret_cast<Capsule *>(intp.GetObject(Capsule::TYPE_ID, ident));
+       return reinterpret_cast<Capsule *>(
+                       GetObject(Capsule::TYPE_ID, ident));
 }
 
 Hero *Caster::GetHero(const string &ident) {
-       return reinterpret_cast<Hero *>(intp.GetObject(Hero::TYPE_ID, ident));
+       return reinterpret_cast<Hero *>(
+                       GetObject(Hero::TYPE_ID, ident));
 }
 
 Item *Caster::GetItem(const string &ident) {
-       return reinterpret_cast<Item *>(intp.GetObject(Item::TYPE_ID, ident));
+       return reinterpret_cast<Item *>(
+                       GetObject(Item::TYPE_ID, ident));
 }
 
 Map *Caster::GetMap(const string &ident) {
-       return reinterpret_cast<Map *>(intp.GetObject(Map::TYPE_ID, ident));
+       return reinterpret_cast<Map *>(
+                       GetObject(Map::TYPE_ID, ident));
 }
 
 menu::Resources *Caster::GetMenuResources(const string &ident) {
        return reinterpret_cast<menu::Resources *>(
-                       intp.GetObject(menu::Resources::TYPE_ID, ident));
+                       GetObject(menu::Resources::TYPE_ID, ident));
 }
 
 Monster *Caster::GetMonster(const string &ident) {
-       return reinterpret_cast<Monster *>(intp.GetObject(Monster::TYPE_ID, ident));
+       return reinterpret_cast<Monster *>(
+                       GetObject(Monster::TYPE_ID, ident));
 }
 
 PartyLayout *Caster::GetPartyLayout(const string &ident) {
        return reinterpret_cast<PartyLayout *>(
-                       intp.GetObject(PartyLayout::TYPE_ID, ident));
+                       GetObject(PartyLayout::TYPE_ID, ident));
 }
 
 Spell *Caster::GetSpell(const string &ident) {
-       return reinterpret_cast<Spell *>(intp.GetObject(Spell::TYPE_ID, ident));
+       return reinterpret_cast<Spell *>(
+                       GetObject(Spell::TYPE_ID, ident));
+}
+
+
+void *Caster::GetObject(int typeId, const string &ident) {
+       std::map<string, LoadedExport>::const_iterator i(
+                       ld.Exports().find(ident));
+       if (i != ld.Exports().end()) {
+               if (i->second.typeId != typeId) {
+                       throw std::runtime_error("mismatched type for "
+                                       + ident);
+               } else {
+                       return i->second.location;
+               }
+       }
+       return intp.GetObject(typeId, ident);
 }
 
 }