summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--src/Makefile.am2
-rw-r--r--src/animatedsprite.cpp340
-rw-r--r--src/animatedsprite.h135
-rw-r--r--src/animation.cpp311
-rw-r--r--src/animation.h98
-rw-r--r--src/being.cpp1
-rw-r--r--src/being.h2
-rw-r--r--src/main.cpp1
-rw-r--r--src/monster.cpp4
-rw-r--r--src/npc.cpp2
-rw-r--r--src/player.cpp3
12 files changed, 487 insertions, 416 deletions
diff --git a/ChangeLog b/ChangeLog
index 52fd90fb..ea0e0f19 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2006-07-28 Björn Steinbrink <B.Steinbrink@gmx.de>
+ * src/npc.cpp, src/player.cpp, src/animatedsprite.h, src/animation.h,
+ src/being.cpp, src/main.cpp, src/monster.cpp, src/animatedsprite.cpp,
+ src/animation.cpp, src/Makefile.am, src/being.h: Moved AnimatedSprite
+ into its own files, removed useless includes.
* src/engine.cpp: Removed an unused var.
2006-07-26 Eugenio Favalli <elvenprogrammer@gmail.com>
diff --git a/src/Makefile.am b/src/Makefile.am
index 1bb1d538..3400d3cf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -181,6 +181,8 @@ tmw_SOURCES = graphic/imagerect.h \
resources/buddylist.cpp \
utils/dtor.h \
utils/tostring.h \
+ animatedsprite.cpp \
+ animatedsprite.h \
animation.cpp \
animation.h \
base64.cpp \
diff --git a/src/animatedsprite.cpp b/src/animatedsprite.cpp
new file mode 100644
index 00000000..8daaf9fc
--- /dev/null
+++ b/src/animatedsprite.cpp
@@ -0,0 +1,340 @@
+/*
+ * 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: animation.cpp 2430 2006-07-24 00:13:24Z b_lindeijer $
+ */
+
+#include "animatedsprite.h"
+
+#include "animation.h"
+#include "log.h"
+
+#include "resources/resourcemanager.h"
+#include "resources/spriteset.h"
+
+AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
+ mAction(NULL),
+ mDirection("down"),
+ mLastTime(0),
+ mSpeed(1.0f)
+{
+ int size;
+ ResourceManager *resman = ResourceManager::getInstance();
+ char *data = (char*)resman->loadFile(animationFile.c_str(), size);
+
+ if (!data) {
+ logger->error("Animation: Could not find " + animationFile + "!");
+ }
+
+ xmlDocPtr doc = xmlParseMemory(data, size);
+ free(data);
+
+ if (!doc)
+ {
+ logger->error("Animation: Error while parsing animation definition file!");
+ return;
+ }
+
+ xmlNodePtr node = xmlDocGetRootElement(doc);
+ if (!node || !xmlStrEqual(node->name, BAD_CAST "sprite"))
+ {
+ logger->error("Animation: this is not a valid animation definition file!");
+ return;
+ }
+
+ // Get the variant
+ int variant_num = getProperty(node, "variants", 0);
+ int variant_offset = getProperty(node, "variant_offset", 0);
+
+ if (variant_num > 0 && variant < variant_num )
+ {
+ variant_offset *= variant;
+ }
+ else
+ {
+ variant_offset = 0;
+ }
+
+ for (node = node->xmlChildrenNode; node != NULL; node = node->next)
+ {
+ 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", "");
+
+ Spriteset *spriteset =
+ resman->getSpriteset(imageSrc, width, height);
+
+ if (!spriteset)
+ {
+ logger->error("Couldn't load spriteset!");
+ }
+ else
+ {
+ mSpritesets[name] = spriteset;
+ }
+ }
+ // get action
+ else if (xmlStrEqual(node->name, BAD_CAST "action"))
+ {
+ std::string name = getProperty(node, "name", "");
+ std::string imageset = getProperty(node, "imageset", "");
+
+ if (name.length() == 0)
+ {
+ logger->log("Warning: unnamed action in %s",
+ animationFile.c_str());
+ }
+
+ Action *action = new Action();
+
+ if (mSpritesets.find(imageset) != mSpritesets.end())
+ {
+ action->setSpriteset(mSpritesets[imageset]);
+ mActions[name] = action;
+ }
+ else
+ {
+ logger->log("Warning: imageset \"%s\" not defined in %s",
+ imageset.c_str(),
+ animationFile.c_str());
+
+ // Discard action and skip loading animations
+ delete action;
+ continue;
+ }
+
+ // get animations
+ for (xmlNodePtr animationNode = node->xmlChildrenNode;
+ animationNode != NULL;
+ animationNode = animationNode->next)
+ {
+ if (xmlStrEqual(animationNode->name, BAD_CAST "animation"))
+ {
+ std::string direction =
+ getProperty(animationNode, "direction", "");
+
+ Animation *animation = new Animation();
+
+ // Get animation phases
+ for (xmlNodePtr phaseNode = animationNode->xmlChildrenNode;
+ phaseNode != NULL;
+ phaseNode = phaseNode->next)
+ {
+ int delay = 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);
+
+ offsetY = offsetY - mSpritesets[imageset]->getHeight() + 32;
+ offsetX = offsetX - mSpritesets[imageset]->getWidth() / 2 + 16;
+ animation->addPhase(index + variant_offset, delay,
+ offsetX, offsetY);
+ }
+ else if (xmlStrEqual(phaseNode->name, BAD_CAST "sequence"))
+ {
+ int start = getProperty(phaseNode, "start", 0);
+ int end = getProperty(phaseNode, "end", 0);
+ int offsetY = 0 - mSpritesets[imageset]->getHeight() + 32;
+ int offsetX = 0 - mSpritesets[imageset]->getWidth() / 2 + 16;
+ while (end >= start)
+ {
+ animation->addPhase(start + variant_offset,
+ delay, offsetX, offsetY);
+ start++;
+ }
+ }
+ } // for phaseNode
+ action->setAnimation(direction, animation);
+ } // if "<animation>"
+ } // for animationNode
+ } // if "<imageset>" else if "<action>"
+ } // for node
+
+ // Complete missing actions
+ substituteAction("walk", "stand");
+ substituteAction("walk", "run");
+ substituteAction("attack", "stand");
+ substituteAction("attack_swing", "attack");
+ substituteAction("attack_stab", "attack_swing");
+ substituteAction("attack_bow", "attack_stab");
+ substituteAction("attack_throw", "attack_swing");
+ substituteAction("cast_magic", "attack_swing");
+ substituteAction("use_item", "cast_magic");
+ substituteAction("sit", "stand");
+ substituteAction("sleeping", "sit");
+ substituteAction("hurt", "stand");
+ substituteAction("dead", "hurt");
+
+ // Play the stand animation by default
+ play("stand");
+
+ xmlFreeDoc(doc);
+}
+
+int
+AnimatedSprite::getProperty(xmlNodePtr node, const char* name, int def)
+{
+ xmlChar *prop = xmlGetProp(node, BAD_CAST name);
+ if (prop) {
+ int val = atoi((char*)prop);
+ xmlFree(prop);
+ return val;
+ }
+ else {
+ return def;
+ }
+}
+
+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;
+ }
+ else {
+ return def;
+ }
+}
+
+void
+AnimatedSprite::substituteAction(const std::string& complete,
+ const std::string& with)
+{
+ if (mActions.find(complete) == mActions.end())
+ {
+ mActions[complete] = mActions[with];
+ }
+}
+
+AnimatedSprite::~AnimatedSprite()
+{
+ for (SpritesetIterator i = mSpritesets.begin(); i != mSpritesets.end(); ++i)
+ {
+ i->second->decRef();
+ }
+ mSpritesets.clear();
+}
+
+void
+AnimatedSprite::play(const std::string& action)
+{
+ Actions::iterator iAction;
+ iAction = mActions.find(action);
+
+ if (iAction == mActions.end())
+ {
+ logger->log("Warning: no action \"%s\" defined!", action.c_str());
+ mAction = NULL;
+ return;
+ }
+
+ if (mAction != iAction->second)
+ {
+ mAction = iAction->second;
+ mLastTime = 0;
+ }
+
+ mSpeed = 1.0f;
+}
+
+void
+AnimatedSprite::play(const std::string& action, int time)
+{
+ play(action);
+
+ if (mAction != NULL)
+ {
+ Animation *animation = mAction->getAnimation(mDirection);
+ int animationLength = animation->getLength();
+ mSpeed = (float) animationLength / time;
+ }
+}
+
+void
+AnimatedSprite::update(int time)
+{
+ // Avoid freaking out at first frame or when tick_time overflows
+ if (time < mLastTime || mLastTime == 0) mLastTime = time;
+
+ // If not enough time have passed yet, do nothing
+ if (time > mLastTime)
+ {
+ if (mAction != NULL)
+ {
+ Animation *animation = mAction->getAnimation(mDirection);
+ animation->update((unsigned int)((time - mLastTime) * mSpeed));
+ mLastTime = time;
+ }
+ }
+}
+
+bool
+AnimatedSprite::draw(Graphics* graphics, Sint32 posX, Sint32 posY) const
+{
+ if (mAction != NULL)
+ {
+ Animation *animation = mAction->getAnimation(mDirection);
+
+ if (animation->getCurrentPhase() >= 0)
+ {
+ Spriteset *spriteset = mAction->getSpriteset();
+ Image *image = spriteset->get(animation->getCurrentPhase());
+ Sint32 offsetX = animation->getOffsetX();
+ Sint32 offsetY = animation->getOffsetY();
+ return graphics->drawImage(image, posX + offsetX, posY + offsetY);
+ }
+ }
+
+ return false;
+}
+
+int
+AnimatedSprite::getWidth() const
+{
+ if (mAction != NULL)
+ {
+ Spriteset *spriteset = mAction->getSpriteset();
+ return spriteset->getWidth();
+ }
+
+ return 0;
+}
+
+int
+AnimatedSprite::getHeight() const
+{
+ if (mAction != NULL)
+ {
+ Spriteset *spriteset = mAction->getSpriteset();
+ return spriteset->getHeight();
+ }
+
+ return 0;
+}
diff --git a/src/animatedsprite.h b/src/animatedsprite.h
new file mode 100644
index 00000000..cea0d876
--- /dev/null
+++ b/src/animatedsprite.h
@@ -0,0 +1,135 @@
+/*
+ * 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: animation.h 2430 2006-07-24 00:13:24Z b_lindeijer $
+ */
+
+#ifndef _TMW_ANIMATEDSPRITE_H
+#define _TMW_ANIMATEDSPRITE_H
+
+#include <map>
+#include <string>
+#include <SDL_types.h>
+
+#include <libxml/tree.h>
+
+class Action;
+class Graphics;
+class Spriteset;
+
+/**
+ * Defines a class to load an animation.
+ */
+class AnimatedSprite
+{
+ public:
+ /**
+ * Constructor.
+ */
+ AnimatedSprite(const std::string& animationFile, int variant);
+
+ /**
+ * Destructor.
+ */
+ ~AnimatedSprite();
+
+ /**
+ * Sets a new action using the current direction.
+ */
+ void
+ play(const std::string& action);
+
+ /**
+ * Plays an action in a specified time.
+ */
+ void
+ play(const std::string& action, int time);
+
+ /**
+ * Inform the animation of the passed time so that it can output the
+ * correct animation phase.
+ */
+ void update(int time);
+
+ /**
+ * Draw the current animation phase at the coordinates given in screen
+ * pixels.
+ */
+ bool
+ draw(Graphics* graphics, Sint32 posX, Sint32 posY) const;
+
+ /**
+ * gets the width in pixels of the current animation phase.
+ */
+ int
+ getWidth() const;
+
+ /**
+ * gets the height in pixels of the current animation phase.
+ */
+ int
+ getHeight() const;
+
+ /**
+ * Sets the direction.
+ */
+ void
+ setDirection(const std::string& direction)
+ {
+ mDirection = direction;
+ }
+
+ protected:
+ /**
+ * When there are no animations defined for the action "complete", its
+ * animations become a copy of those of the action "with".
+ */
+ void
+ substituteAction(const std::string& complete,
+ const std::string& with);
+
+ typedef std::map<std::string, Spriteset*> Spritesets;
+ typedef Spritesets::iterator SpritesetIterator;
+ Spritesets mSpritesets;
+ typedef std::map<std::string, Action*> Actions;
+ Actions mActions;
+ Action *mAction;
+ std::string mDirection;
+ int mLastTime;
+ float mSpeed;
+
+ private:
+ /**
+ * 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);
+};
+
+#endif
diff --git a/src/animation.cpp b/src/animation.cpp
index 313fd25c..f9a5f6bb 100644
--- a/src/animation.cpp
+++ b/src/animation.cpp
@@ -143,314 +143,3 @@ Action::setAnimation(const std::string& direction, Animation *animation)
mAnimations[direction] = animation;
}
-
-
-AnimatedSprite::AnimatedSprite(const std::string& animationFile, int variant):
- mAction(NULL),
- mDirection("down"),
- mLastTime(0),
- mSpeed(1.0f)
-{
- int size;
- ResourceManager *resman = ResourceManager::getInstance();
- char *data = (char*)resman->loadFile(animationFile.c_str(), size);
-
- if (!data) {
- logger->error("Animation: Could not find " + animationFile + "!");
- }
-
- xmlDocPtr doc = xmlParseMemory(data, size);
- free(data);
-
- if (!doc)
- {
- logger->error("Animation: Error while parsing animation definition file!");
- return;
- }
-
- xmlNodePtr node = xmlDocGetRootElement(doc);
- if (!node || !xmlStrEqual(node->name, BAD_CAST "sprite"))
- {
- logger->error("Animation: this is not a valid animation definition file!");
- return;
- }
-
- // Get the variant
- int variant_num = getProperty(node, "variants", 0);
- int variant_offset = getProperty(node, "variant_offset", 0);
-
- if (variant_num > 0 && variant < variant_num )
- {
- variant_offset *= variant;
- }
- else
- {
- variant_offset = 0;
- }
-
- for (node = node->xmlChildrenNode; node != NULL; node = node->next)
- {
- 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", "");
-
- Spriteset *spriteset =
- resman->getSpriteset(imageSrc, width, height);
-
- if (!spriteset)
- {
- logger->error("Couldn't load spriteset!");
- }
- else
- {
- mSpritesets[name] = spriteset;
- }
- }
- // get action
- else if (xmlStrEqual(node->name, BAD_CAST "action"))
- {
- std::string name = getProperty(node, "name", "");
- std::string imageset = getProperty(node, "imageset", "");
-
- if (name.length() == 0)
- {
- logger->log("Warning: unnamed action in %s",
- animationFile.c_str());
- }
-
- Action *action = new Action();
-
- if (mSpritesets.find(imageset) != mSpritesets.end())
- {
- action->setSpriteset(mSpritesets[imageset]);
- mActions[name] = action;
- }
- else
- {
- logger->log("Warning: imageset \"%s\" not defined in %s",
- imageset.c_str(),
- animationFile.c_str());
-
- // Discard action and skip loading animations
- delete action;
- continue;
- }
-
- // get animations
- for (xmlNodePtr animationNode = node->xmlChildrenNode;
- animationNode != NULL;
- animationNode = animationNode->next)
- {
- if (xmlStrEqual(animationNode->name, BAD_CAST "animation"))
- {
- std::string direction =
- getProperty(animationNode, "direction", "");
-
- Animation *animation = new Animation();
-
- // Get animation phases
- for (xmlNodePtr phaseNode = animationNode->xmlChildrenNode;
- phaseNode != NULL;
- phaseNode = phaseNode->next)
- {
- int delay = 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);
-
- offsetY = offsetY - mSpritesets[imageset]->getHeight() + 32;
- offsetX = offsetX - mSpritesets[imageset]->getWidth() / 2 + 16;
- animation->addPhase(index + variant_offset, delay,
- offsetX, offsetY);
- }
- else if (xmlStrEqual(phaseNode->name, BAD_CAST "sequence"))
- {
- int start = getProperty(phaseNode, "start", 0);
- int end = getProperty(phaseNode, "end", 0);
- int offsetY = 0 - mSpritesets[imageset]->getHeight() + 32;
- int offsetX = 0 - mSpritesets[imageset]->getWidth() / 2 + 16;
- while (end >= start)
- {
- animation->addPhase(start + variant_offset,
- delay, offsetX, offsetY);
- start++;
- }
- }
- } // for phaseNode
- action->setAnimation(direction, animation);
- } // if "<animation>"
- } // for animationNode
- } // if "<imageset>" else if "<action>"
- } // for node
-
- // Complete missing actions
- substituteAction("walk", "stand");
- substituteAction("walk", "run");
- substituteAction("attack", "stand");
- substituteAction("attack_swing", "attack");
- substituteAction("attack_stab", "attack_swing");
- substituteAction("attack_bow", "attack_stab");
- substituteAction("attack_throw", "attack_swing");
- substituteAction("cast_magic", "attack_swing");
- substituteAction("use_item", "cast_magic");
- substituteAction("sit", "stand");
- substituteAction("sleeping", "sit");
- substituteAction("hurt", "stand");
- substituteAction("dead", "hurt");
-
- // Play the stand animation by default
- play("stand");
-
- xmlFreeDoc(doc);
-}
-
-int
-AnimatedSprite::getProperty(xmlNodePtr node, const char* name, int def)
-{
- xmlChar *prop = xmlGetProp(node, BAD_CAST name);
- if (prop) {
- int val = atoi((char*)prop);
- xmlFree(prop);
- return val;
- }
- else {
- return def;
- }
-}
-
-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;
- }
- else {
- return def;
- }
-}
-
-void
-AnimatedSprite::substituteAction(const std::string& complete,
- const std::string& with)
-{
- if (mActions.find(complete) == mActions.end())
- {
- mActions[complete] = mActions[with];
- }
-}
-
-AnimatedSprite::~AnimatedSprite()
-{
- for (SpritesetIterator i = mSpritesets.begin(); i != mSpritesets.end(); ++i)
- {
- i->second->decRef();
- }
- mSpritesets.clear();
-}
-
-void
-AnimatedSprite::play(const std::string& action)
-{
- Actions::iterator iAction;
- iAction = mActions.find(action);
-
- if (iAction == mActions.end())
- {
- logger->log("Warning: no action \"%s\" defined!", action.c_str());
- mAction = NULL;
- return;
- }
-
- if (mAction != iAction->second)
- {
- mAction = iAction->second;
- mLastTime = 0;
- }
-
- mSpeed = 1.0f;
-}
-
-void
-AnimatedSprite::play(const std::string& action, int time)
-{
- play(action);
-
- if (mAction != NULL)
- {
- Animation *animation = mAction->getAnimation(mDirection);
- int animationLength = animation->getLength();
- mSpeed = (float) animationLength / time;
- }
-}
-
-void
-AnimatedSprite::update(int time)
-{
- // Avoid freaking out at first frame or when tick_time overflows
- if (time < mLastTime || mLastTime == 0) mLastTime = time;
-
- // If not enough time have passed yet, do nothing
- if (time > mLastTime)
- {
- if (mAction != NULL)
- {
- Animation *animation = mAction->getAnimation(mDirection);
- animation->update((unsigned int)((time - mLastTime) * mSpeed));
- mLastTime = time;
- }
- }
-}
-
-bool
-AnimatedSprite::draw(Graphics* graphics, Sint32 posX, Sint32 posY) const
-{
- if (mAction != NULL)
- {
- Animation *animation = mAction->getAnimation(mDirection);
-
- if (animation->getCurrentPhase() >= 0)
- {
- Spriteset *spriteset = mAction->getSpriteset();
- Image *image = spriteset->get(animation->getCurrentPhase());
- Sint32 offsetX = animation->getOffsetX();
- Sint32 offsetY = animation->getOffsetY();
- return graphics->drawImage(image, posX + offsetX, posY + offsetY);
- }
- }
-
- return false;
-}
-
-int
-AnimatedSprite::getWidth() const
-{
- if (mAction != NULL)
- {
- Spriteset *spriteset = mAction->getSpriteset();
- return spriteset->getWidth();
- }
-
- return 0;
-}
-
-int
-AnimatedSprite::getHeight() const
-{
- if (mAction != NULL)
- {
- Spriteset *spriteset = mAction->getSpriteset();
- return spriteset->getHeight();
- }
-
- return 0;
-}
diff --git a/src/animation.h b/src/animation.h
index c5adb873..213d62c8 100644
--- a/src/animation.h
+++ b/src/animation.h
@@ -116,102 +116,4 @@ class Action
Animations mAnimations;
};
-/**
- * Defines a class to load an animation.
- */
-class AnimatedSprite
-{
- public:
- /**
- * Constructor.
- */
- AnimatedSprite(const std::string& animationFile, int variant);
-
- /**
- * Destructor.
- */
- ~AnimatedSprite();
-
- /**
- * Sets a new action using the current direction.
- */
- void
- play(const std::string& action);
-
- /**
- * Plays an action in a specified time.
- */
- void
- play(const std::string& action, int time);
-
- /**
- * Inform the animation of the passed time so that it can output the
- * correct animation phase.
- */
- void update(int time);
-
- /**
- * Draw the current animation phase at the coordinates given in screen
- * pixels.
- */
- bool
- draw(Graphics* graphics, Sint32 posX, Sint32 posY) const;
-
- /**
- * gets the width in pixels of the current animation phase.
- */
- int
- getWidth() const;
-
- /**
- * gets the height in pixels of the current animation phase.
- */
- int
- getHeight() const;
-
- /**
- * Sets the direction.
- */
- void
- setDirection(const std::string& direction)
- {
- mDirection = direction;
- }
-
- protected:
- /**
- * When there are no animations defined for the action "complete", its
- * animations become a copy of those of the action "with".
- */
- void
- substituteAction(const std::string& complete,
- const std::string& with);
-
- typedef std::map<std::string, Spriteset*> Spritesets;
- typedef Spritesets::iterator SpritesetIterator;
- Spritesets mSpritesets;
- typedef std::map<std::string, Action*> Actions;
- Actions mActions;
- Action *mAction;
- std::string mDirection;
- int mLastTime;
- float mSpeed;
-
- private:
- /**
- * 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);
-};
-
#endif
diff --git a/src/being.cpp b/src/being.cpp
index 4256bdc7..0295defb 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -22,6 +22,7 @@
*/
#include "being.h"
+#include "animatedsprite.h"
#include "equipment.h"
#include "game.h"
#include "graphics.h"
diff --git a/src/being.h b/src/being.h
index 01b4fded..58a3e82d 100644
--- a/src/being.h
+++ b/src/being.h
@@ -29,13 +29,13 @@
#include <SDL_types.h>
#include <vector>
-#include "animation.h"
#include "sprite.h"
#include "map.h"
#define NR_HAIR_STYLES 7
#define NR_HAIR_COLORS 10
+class AnimatedSprite;
class Equipment;
class Item;
class Map;
diff --git a/src/main.cpp b/src/main.cpp
index 86d29167..3476ffdd 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -43,7 +43,6 @@
#define NOGDI
#endif
-#include "animation.h"
#include "configuration.h"
#include "game.h"
#include "graphics.h"
diff --git a/src/monster.cpp b/src/monster.cpp
index 43823e50..8a7e2f32 100644
--- a/src/monster.cpp
+++ b/src/monster.cpp
@@ -23,10 +23,8 @@
#include "monster.h"
+#include "animatedsprite.h"
#include "game.h"
-#include "log.h"
-
-#include "resources/resourcemanager.h"
#include "utils/tostring.h"
diff --git a/src/npc.cpp b/src/npc.cpp
index 354322a3..6fa5ac37 100644
--- a/src/npc.cpp
+++ b/src/npc.cpp
@@ -23,6 +23,8 @@
#include "npc.h"
+#include "animatedsprite.h"
+
#include "net/messageout.h"
#include "net/protocol.h"
diff --git a/src/player.cpp b/src/player.cpp
index 4e42e3c0..096520cb 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -23,8 +23,7 @@
#include "player.h"
-#include "animation.h"
-#include "equipment.h"
+#include "animatedsprite.h"
#include "game.h"
#include "graphics.h"