00001 #include "arenaelementtyperegistry.h" 00002 00003 #include "arenaelementtype.h" 00004 #include "arenaelement.h" 00005 #include "xmlloadingexception.h" 00006 00007 #include "../global.h" 00008 00009 #include <QDebug> 00010 #include <QDir> 00011 00012 ArenaElementTypeRegistry::ArenaElementTypeRegistry(const QString& dir) 00013 { 00014 load(dir); 00015 } 00016 00017 QList<ArenaElementType*> ArenaElementTypeRegistry::elementTypes() 00018 { 00019 return m_elementTypes.values(); 00020 } 00021 00022 ArenaElementType* ArenaElementTypeRegistry::elementType(const QString &typeName) 00023 { 00024 return m_elementTypes[typeName]; 00025 } 00026 00027 bool ArenaElementTypeRegistry::hasElement(const QString &typeName) 00028 { 00029 return m_elementTypes.contains(typeName); 00030 } 00031 00032 ArenaElement* ArenaElementTypeRegistry::instantiateElement(const QString &typeName) 00033 { 00034 ArenaElementType *type = elementType(typeName); 00035 if (!type) 00036 return 0; 00037 ArenaElement *element = type->createInstance(); 00038 return element; 00039 } 00040 00041 void ArenaElementTypeRegistry::load(const QString &dir) 00042 { 00043 QDir topDir(dir); 00044 QStringList entries = topDir.entryList(QDir::Dirs); 00045 //qDebug() << "[Rescue Arena Designer] ArenaElementTypeRegistry: Loading elements."; 00046 foreach (QString entry, entries) 00047 { 00048 //qDebug() << "[Rescue Arena Designer] ArenaElementTypeRegistry: Checking elements/" + entry; 00049 // These aren't really folders... 00050 if (entry == "." || entry == "..") 00051 continue; 00052 00053 QDir entryDir(topDir.path() + "/" + entry); 00054 if (entryDir.exists("properties.xml")) 00055 { 00056 //qDebug() << "[Rescue Arena Designer] ArenaElementTypeRegistry: properties.xml exists. Loading element."; 00057 ArenaElementType *t = new ArenaElementType(); 00059 if (t->load(entryDir)) 00060 m_elementTypes[t->name()] = t; 00061 else 00062 delete t; 00063 } 00064 } 00065 }