arenaelementtype.cpp
Go to the documentation of this file.
00001 #include "arenaelementtype.h"
00002 #include "arenaelement.h"
00003 
00004 #include <QDebug>
00005 
00006 ArenaElementType::ArenaElementType()
00007     : m_instanceCount(0)
00008 {
00009 }
00010 
00011 bool ArenaElementType::load(const QDir &folderDir)
00012 {
00013     m_name = folderDir.dirName();
00014 
00015     QFile in(folderDir.filePath("properties.xml"));
00016     Q_ASSERT(in.exists());
00017     in.open(QFile::ReadOnly);
00018     QDomDocument doc;
00019     doc.setContent(&in);
00020     in.close();
00021 
00022     QDomElement node = doc.firstChild().toElement();
00023     Q_ASSERT(!node.isNull());
00024     if (node.tagName() != "properties")
00025     {
00026         qDebug() << "Error loading properties.xml in " << QFileInfo(in).filePath() << ": Root element must be <property>!";
00027         return false;
00028     }
00029 
00030     QDomNodeList childNodes = node.childNodes();
00031     for (int i = 0; i < childNodes.size(); i++)
00032     {
00033         QDomElement child = childNodes.at(i).toElement();
00034         Q_ASSERT(!child.isNull());
00035         /*
00036         if (child.tagName() == "name")
00037         {
00038             m_name = child.text();
00039         }
00040         else */if (child.tagName() == "type")
00041         {
00042             if (child.text() == "floor")
00043                 m_type = FloorType;
00044             else if (child.text() == "wall")
00045                 m_type = WallType;
00046             else if (child.text() == "mountable-item")
00047                 m_type = MountableItemType;
00048             else if (child.text() == "item")
00049                 m_type = ItemType;
00050             else
00051             {
00052                 qDebug() << "Error loading properties.xml in " << QFileInfo(in).filePath() << ": Unknown element type!";
00053                 return false;
00054             }
00055         }
00056         else if (child.tagName() == "pixmap")
00057         {
00058             m_pixmap = QPixmap(folderDir.filePath(child.text()));
00059         }
00060         else if (child.tagName() == "mesh")
00061         {
00062             m_mesh = child.text();
00063         }
00064         else if (child.tagName() == "meta-info")
00065         {
00066             QDomNodeList metaInfos = child.childNodes();
00067             for (int i = 0; i < metaInfos.size(); i++)
00068             {
00069                 QDomElement metaInfo = metaInfos.at(i).toElement();
00070                 Q_ASSERT(!metaInfo.isNull());
00071                 // Only these elements are valid meta info nodes
00072                 if (metaInfo.tagName() == "mi")
00073                 {
00074                     if (!metaInfo.hasAttribute("desc"))
00075                     {
00076                         qDebug() << "Warning: meta-info element is missing \"desc\" attribute in "
00077                                  << QFileInfo(in).filePath();
00078                         continue;
00079                     }
00080                     QString desc = metaInfo.attribute("desc");
00081 
00082                     if (metaInfo.text().isEmpty())
00083                     {
00084                         qDebug() << "Warning: Empty meta-info element in "
00085                                  << QFileInfo(in).filePath();
00086                         continue;
00087                     }
00088                     QString value = metaInfo.text();
00089                     m_metaInfos.append(QStringPair(desc, value));
00090                 }
00091             }
00092         }
00093         else if (child.tagName() == "item-mount-points")
00094         {
00095             QDomNodeList itemMountPoints = child.childNodes();
00096             for (int i = 0; i < itemMountPoints.size(); i++)
00097             {
00098                 QDomElement itemMountPoint = itemMountPoints.at(i).toElement();
00099                 Q_ASSERT(!itemMountPoint.isNull());
00100                 // Only these elements are valid
00101                 if (itemMountPoint.tagName() == "item-mount-point")
00102                 {
00103                     QPointF pos;
00104                     QString desc;
00105                     if (itemMountPoint.hasAttribute("x"))
00106                         pos.rx() = itemMountPoint.attribute("x").toFloat();
00107                     if (itemMountPoint.hasAttribute("y"))
00108                         pos.ry() = itemMountPoint.attribute("y").toFloat();
00109                     if (itemMountPoint.hasAttribute("desc"))
00110                         desc = itemMountPoint.attribute("desc");
00111                     m_itemMountPoints.push_back(ItemMountPoint(desc, pos));
00112                 }
00113             }
00114         }
00115     }
00116 }
00117 
00118 QString ArenaElementType::humanReadableName() const
00119 {
00120     foreach (QStringPair metaInfo, m_metaInfos)
00121         if (metaInfo.first == "Name")
00122             return metaInfo.second;
00123     return name();
00124 }
00125 
00126 ArenaElement* ArenaElementType::createInstance() const
00127 {
00128     ArenaElement *element = new ArenaElement(this, m_instanceCount++);
00129     return element;
00130 }


hector_nist_arena_designer
Author(s): Johannes Simon, Stefan Kohlbrecher
autogenerated on Mon Oct 6 2014 00:26:31