summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/animatedsprite.cpp63
-rw-r--r--src/animatedsprite.h18
-rw-r--r--src/resources/mapreader.cpp30
-rw-r--r--src/utils/xml.cpp54
-rw-r--r--src/utils/xml.h46
8 files changed, 138 insertions, 84 deletions
diff --git a/ChangeLog b/ChangeLog
index 9835f6a9..b5016604 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-15 Bjørn Lindeijer <bjorn@lindeijer.nl>
+
+ * src/animatedsprite.h, src/CMakeLists.txt, src/animatedsprite.cpp,
+ src/utils/xml.cpp, src/utils/xml.h, src/Makefile.am,
+ src/resources/mapreader.cpp: Separated getProperty method to an XML
+ utility namespace.
+
2006-11-15 Eugenio Favalli <elvenprogrammer@gmail.com>
* The Mana World.dev, tmw.cbp: Updated project files.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 35b01931..3981ee58 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -227,6 +227,8 @@ SET(SRCS
resources/buddylist.cpp
utils/dtor.h
utils/tostring.h
+ utils/xml.cpp
+ utils/xml.h
action.cpp
action.h
animatedsprite.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 8166efed..5f29bebc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -189,6 +189,8 @@ tmw_SOURCES = graphic/imagerect.h \
resources/buddylist.cpp \
utils/dtor.h \
utils/tostring.h \
+ utils/xml.cpp \
+ utils/xml.h \
action.cpp \
action.h \
animatedsprite.cpp \
diff --git a/src/animatedsprite.cpp b/src/animatedsprite.cpp
index 61d2f3cf..c2f7f133 100644
--- a/src/animatedsprite.cpp
+++ b/src/animatedsprite.cpp
@@ -32,11 +32,12 @@
#include "resources/spriteset.h"
#include "resources/image.h"
+#include "utils/xml.h"
+
AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
mAction(NULL),
mDirection(DIRECTION_DOWN),
- mLastTime(0),
- mSpeed(1.0f)
+ mLastTime(0)
{
int size;
ResourceManager *resman = ResourceManager::getInstance();
@@ -61,8 +62,8 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
}
// Get the variant
- int variant_num = getProperty(node, "variants", 0);
- int variant_offset = getProperty(node, "variant_offset", 0);
+ int variant_num = XML::getProperty(node, "variants", 0);
+ int variant_offset = XML::getProperty(node, "variant_offset", 0);
if (variant_num > 0 && variant < variant_num ) {
variant_offset *= variant;
@@ -74,10 +75,10 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
{
if (xmlStrEqual(node->name, BAD_CAST "imageset"))
{
- int width = getProperty(node, "width", 0);
- int height = getProperty(node, "height", 0);
- std::string name = getProperty(node, "name", "");
- std::string imageSrc = getProperty(node, "src", "");
+ int width = XML::getProperty(node, "width", 0);
+ int height = XML::getProperty(node, "height", 0);
+ std::string name = XML::getProperty(node, "name", "");
+ std::string imageSrc = XML::getProperty(node, "src", "");
Spriteset *spriteset =
resman->getSpriteset(imageSrc, width, height);
@@ -91,8 +92,8 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
// get action
else if (xmlStrEqual(node->name, BAD_CAST "action"))
{
- std::string actionName = getProperty(node, "name", "");
- std::string imagesetName = getProperty(node, "imageset", "");
+ std::string actionName = XML::getProperty(node, "name", "");
+ std::string imagesetName = XML::getProperty(node, "imageset", "");
SpritesetIterator si = mSpritesets.find(imagesetName);
if (si == mSpritesets.end()) {
@@ -133,7 +134,7 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
continue;
std::string directionName =
- getProperty(animationNode, "direction", "");
+ XML::getProperty(animationNode, "direction", "");
SpriteDirection directionType =
makeSpriteDirection(directionName);
@@ -155,13 +156,13 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
phaseNode != NULL;
phaseNode = phaseNode->next)
{
- int delay = getProperty(phaseNode, "delay", 0);
+ int delay = XML::getProperty(phaseNode, "delay", 0);
if (xmlStrEqual(phaseNode->name, BAD_CAST "frame"))
{
- int index = getProperty(phaseNode, "index", -1);
- int offsetX = getProperty(phaseNode, "offsetX", 0);
- int offsetY = getProperty(phaseNode, "offsetY", 0);
+ int index = XML::getProperty(phaseNode, "index", -1);
+ int offsetX = XML::getProperty(phaseNode, "offsetX", 0);
+ int offsetY = XML::getProperty(phaseNode, "offsetY", 0);
offsetY -= imageset->getHeight() - 32;
offsetX -= imageset->getWidth() / 2 - 16;
@@ -170,8 +171,8 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
}
else if (xmlStrEqual(phaseNode->name, BAD_CAST "sequence"))
{
- int start = getProperty(phaseNode, "start", 0);
- int end = getProperty(phaseNode, "end", 0);
+ int start = XML::getProperty(phaseNode, "start", 0);
+ int end = XML::getProperty(phaseNode, "end", 0);
int offsetY = -imageset->getHeight() + 32;
int offsetX = -imageset->getWidth() / 2 + 16;
while (end >= start)
@@ -212,34 +213,6 @@ AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
xmlFreeDoc(doc);
}
-int
-AnimatedSprite::getProperty(xmlNodePtr node, const char* name, int def)
-{
- int &ret = def;
-
- xmlChar *prop = xmlGetProp(node, BAD_CAST name);
- if (prop) {
- ret = atoi((char*)prop);
- xmlFree(prop);
- }
-
- return ret;
-}
-
-std::string
-AnimatedSprite::getProperty(xmlNodePtr node, const char *name,
- const std::string &def)
-{
- xmlChar *prop = xmlGetProp(node, BAD_CAST name);
- if (prop) {
- std::string val = (char*)prop;
- xmlFree(prop);
- return val;
- }
-
- return def;
-}
-
void
AnimatedSprite::substituteAction(SpriteAction complete,
SpriteAction with)
diff --git a/src/animatedsprite.h b/src/animatedsprite.h
index 73dfa529..721a2824 100644
--- a/src/animatedsprite.h
+++ b/src/animatedsprite.h
@@ -28,8 +28,6 @@
#include <string>
#include <SDL_types.h>
-#include <libxml/tree.h>
-
class Action;
class Graphics;
class Spriteset;
@@ -144,21 +142,6 @@ class AnimatedSprite
getCurrentPhase() const;
/**
- * Gets an integer property from an xmlNodePtr.
- *
- * TODO: Same function is present in MapReader. Should probably be
- * TODO: shared in a static utility class.
- */
- static int
- getProperty(xmlNodePtr node, const char *name, int def);
-
- /**
- * Gets a string property from an xmlNodePtr.
- */
- static std::string
- getProperty(xmlNodePtr node, const char *name, const std::string &def);
-
- /**
* Converts a string into a SpriteAction enum.
*/
static SpriteAction
@@ -182,7 +165,6 @@ class AnimatedSprite
Action *mAction;
SpriteDirection mDirection;
int mLastTime;
- float mSpeed;
};
#endif
diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp
index 2aea3dc5..cd74ded6 100644
--- a/src/resources/mapreader.cpp
+++ b/src/resources/mapreader.cpp
@@ -36,6 +36,7 @@
#include "../tileset.h"
#include "../utils/tostring.h"
+#include "../utils/xml.h"
const unsigned int DEFAULT_TILE_WIDTH = 32;
const unsigned int DEFAULT_TILE_HEIGHT = 32;
@@ -205,10 +206,10 @@ MapReader::readMap(xmlNodePtr node, const std::string &path)
prop = xmlGetProp(node, BAD_CAST "version");
xmlFree(prop);
- int w = getProperty(node, "width", 0);
- int h = getProperty(node, "height", 0);
- int tilew = getProperty(node, "tilewidth", DEFAULT_TILE_WIDTH);
- int tileh = getProperty(node, "tileheight", DEFAULT_TILE_HEIGHT);
+ int w = XML::getProperty(node, "width", 0);
+ int h = XML::getProperty(node, "height", 0);
+ int tilew = XML::getProperty(node, "tilewidth", DEFAULT_TILE_WIDTH);
+ int tileh = XML::getProperty(node, "tileheight", DEFAULT_TILE_HEIGHT);
int layerNr = 0;
Map *map = new Map(w, h, tilew, tileh);
@@ -354,7 +355,7 @@ MapReader::readLayer(xmlNodePtr node, Map *map, int layer)
if (!xmlStrEqual(n2->name, BAD_CAST "tile"))
continue;
- int gid = getProperty(n2, "gid", -1);
+ int gid = XML::getProperty(n2, "gid", -1);
map->setTileWithGid(x, y, layer, gid);
x++;
@@ -387,9 +388,9 @@ MapReader::readTileset(xmlNodePtr node,
return NULL;
}
- int firstGid = getProperty(node, "firstgid", 0);
- int tw = getProperty(node, "tilewidth", map->getTileWidth());
- int th = getProperty(node, "tileheight", map->getTileHeight());
+ int firstGid = XML::getProperty(node, "firstgid", 0);
+ int tw = XML::getProperty(node, "tilewidth", map->getTileWidth());
+ int th = XML::getProperty(node, "tileheight", map->getTileHeight());
for (node = node->xmlChildrenNode; node; node = node->next) {
if (!xmlStrEqual(node->name, BAD_CAST "image"))
@@ -422,16 +423,3 @@ MapReader::readTileset(xmlNodePtr node,
return NULL;
}
-
-int
-MapReader::getProperty(xmlNodePtr node, const char* name, int def)
-{
- int &ret = def;
-
- xmlChar *prop = xmlGetProp(node, BAD_CAST name);
- if (prop) {
- ret = atoi((char*)prop);
- xmlFree(prop);
- }
- return ret;
-}
diff --git a/src/utils/xml.cpp b/src/utils/xml.cpp
new file mode 100644
index 00000000..b820011d
--- /dev/null
+++ b/src/utils/xml.cpp
@@ -0,0 +1,54 @@
+/*
+ * The Mana World
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: dtor.h 2822 2006-11-05 14:30:53Z b_lindeijer $
+ */
+
+#include "xml.h"
+
+namespace XML
+{
+ int
+ getProperty(xmlNodePtr node, const char* name, int def)
+ {
+ int &ret = def;
+
+ xmlChar *prop = xmlGetProp(node, BAD_CAST name);
+ if (prop) {
+ ret = atoi((char*)prop);
+ xmlFree(prop);
+ }
+
+ return ret;
+ }
+
+ std::string
+ getProperty(xmlNodePtr node, const char *name, const std::string &def)
+ {
+ xmlChar *prop = xmlGetProp(node, BAD_CAST name);
+ if (prop) {
+ std::string val = (char*)prop;
+ xmlFree(prop);
+ return val;
+ }
+
+ return def;
+ }
+}
diff --git a/src/utils/xml.h b/src/utils/xml.h
new file mode 100644
index 00000000..9cbb5b2a
--- /dev/null
+++ b/src/utils/xml.h
@@ -0,0 +1,46 @@
+/*
+ * The Mana World
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: dtor.h 2822 2006-11-05 14:30:53Z b_lindeijer $
+ */
+
+#ifndef _TMW_XML_H
+#define _TMW_XML_H
+
+#include <libxml/tree.h>
+
+#include <string>
+
+namespace XML
+{
+ /**
+ * Gets an integer property from an xmlNodePtr.
+ */
+ int
+ getProperty(xmlNodePtr node, const char *name, int def);
+
+ /**
+ * Gets a string property from an xmlNodePtr.
+ */
+ std::string
+ getProperty(xmlNodePtr node, const char *name, const std::string &def);
+}
+
+#endif