summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am6
-rw-r--r--src/game-server/being.hpp2
-rw-r--r--src/game-server/movingobject.cpp (renamed from src/game-server/object.cpp)2
-rw-r--r--src/game-server/movingobject.hpp134
-rw-r--r--src/game-server/object.hpp198
-rw-r--r--src/game-server/thing.hpp113
-rw-r--r--src/game-server/trigger.cpp4
-rw-r--r--src/game-server/trigger.hpp12
8 files changed, 273 insertions, 198 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index c8a9037f..3df85d79 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -102,11 +102,13 @@ tmwserv_game_SOURCES = \
game-server/mapreader.cpp \
game-server/monster.hpp \
game-server/monster.cpp \
+ game-server/movingobject.hpp \
+ game-server/movingobject.cpp \
game-server/object.hpp \
- game-server/object.cpp \
game-server/state.hpp \
game-server/state.cpp \
game-server/testing.cpp \
+ game-server/thing.hpp \
game-server/trigger.hpp \
game-server/trigger.cpp \
net/connection.hpp \
@@ -170,4 +172,4 @@ bindings_wrap.cpp: bindings.i
$(SWIG) $(SWIGFLAGS) -o bindings_wrap.cpp bindings.i
tmwserv_game_SOURCES += \
bindings_wrap.cpp
-endif \ No newline at end of file
+endif
diff --git a/src/game-server/being.hpp b/src/game-server/being.hpp
index cd613376..4423c68e 100644
--- a/src/game-server/being.hpp
+++ b/src/game-server/being.hpp
@@ -28,7 +28,7 @@
#include <vector>
#include "defines.h"
-#include "game-server/object.hpp"
+#include "game-server/movingobject.hpp"
class Being;
class MapComposite;
diff --git a/src/game-server/object.cpp b/src/game-server/movingobject.cpp
index 5dcafb15..7eb040e3 100644
--- a/src/game-server/object.cpp
+++ b/src/game-server/movingobject.cpp
@@ -22,7 +22,7 @@
#include "game-server/map.hpp"
#include "game-server/mapmanager.hpp"
-#include "game-server/object.hpp"
+#include "game-server/movingobject.hpp"
void MovingObject::move()
{
diff --git a/src/game-server/movingobject.hpp b/src/game-server/movingobject.hpp
new file mode 100644
index 00000000..99f1caa3
--- /dev/null
+++ b/src/game-server/movingobject.hpp
@@ -0,0 +1,134 @@
+/*
+ * The Mana World Server
+ * 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$
+ */
+
+#ifndef _TMWSERV_MOVINGOBJECT_H_
+#define _TMWSERV_MOVINGOBJECT_H_
+
+#include "point.h"
+#include "game-server/map.hpp"
+#include "game-server/object.hpp"
+
+
+/**
+ * Base class for in-game moving objects. This class adds a sense of direction,
+ * destination and size.
+ */
+class MovingObject : public Object
+{
+ public:
+ /**
+ * Proxy constructor.
+ */
+ MovingObject(int type, int id)
+ : Object(type),
+ mPublicID(id),
+ mDirection(0),
+ mActionTime(0)
+ {}
+
+ /**
+ * Gets the destination coordinates of the object.
+ */
+ Point const &getDestination() const
+ { return mDst; }
+
+ /**
+ * Sets the destination coordinates of the object.
+ */
+ void setDestination(const Point &dst)
+ {
+ mDst = dst;
+ raiseUpdateFlags(UPDATEFLAG_NEW_DESTINATION);
+ mPath.clear();
+ }
+
+ /**
+ * Gets the old coordinates of the object.
+ */
+ Point getOldPosition() const
+ { return mOld; }
+
+ /**
+ * Sets object direction.
+ */
+ void setDirection(int direction)
+ { mDirection = direction; }
+
+ /**
+ * Gets object direction.
+ */
+ unsigned char getDirection() const
+ { return mDirection; }
+
+ /**
+ * Sets object speed.
+ */
+ void setSpeed(unsigned s)
+ { mSpeed = s; }
+
+ /**
+ * Sets object bounding circle radius.
+ */
+ void setSize(unsigned s)
+ { mSize = s; }
+
+ /**
+ * Gets object bounding circle radius.
+ */
+ unsigned getSize()
+ { return mSize; }
+
+ /**
+ * Moves the object toward its destination.
+ */
+ virtual void move();
+
+ /**
+ * Get public ID.
+ *
+ * @return the public ID, 65535 if none yet.
+ */
+ int getPublicID() const
+ { return mPublicID; }
+
+ /**
+ * Set public ID. The object shall not have any public ID yet.
+ */
+ void setPublicID(int id)
+ { mPublicID = id; }
+
+ private:
+ /** Object ID sent to clients (unique with respect to the map). */
+ unsigned short mPublicID;
+
+ Point mDst; /**< Target coordinates. */
+ Point mOld; /**< Old coordinates. */
+ unsigned short mSpeed; /**< Speed. */
+ std::list<PATH_NODE> mPath;
+
+ protected:
+ unsigned char mDirection; /**< Facing direction. */
+ unsigned short mActionTime; /**< Delay until next action. */
+ unsigned mSize; /**< Radius of bounding circle. */
+};
+
+#endif // _TMWSERV_OBJECT_H_
diff --git a/src/game-server/object.hpp b/src/game-server/object.hpp
index 3071f710..6c30bb0d 100644
--- a/src/game-server/object.hpp
+++ b/src/game-server/object.hpp
@@ -20,28 +20,16 @@
* $Id$
*/
-
#ifndef _TMWSERV_OBJECT_H_
#define _TMWSERV_OBJECT_H_
-#include <vector>
-
#include "point.h"
-#include "game-server/map.hpp"
-
-// Object type enumeration
-enum
-{
- OBJECT_ITEM = 0, // A simple item
- OBJECT_ACTOR, // An item that toggle map/quest actions (doors, switchs, ...) and can speak (map panels).
- OBJECT_NPC, // Non-Playable-Character is an actor capable of movement and maybe actions
- OBJECT_MONSTER, // A monster (moving actor with AI. Should be able to toggle map/quest actions, too)
- OBJECT_CHARACTER,// A normal being
- OBJECT_OTHER // Server-only object
-};
-
-class MapComposite;
+#include "game-server/thing.hpp"
+/**
+ * Flags that are raised as necessary. They trigger messages that are sent to
+ * the clients.
+ */
enum
{
UPDATEFLAG_NEW_ON_MAP = 1,
@@ -52,79 +40,10 @@ enum
};
/**
- * Base class for in-game objects.
- */
-class Thing
-{
- public:
- /**
- * Constructor.
- */
- Thing(int type)
- : mType(type)
- {}
-
- /**
- * Empty virtual destructor.
- */
- virtual ~Thing() {}
-
- /**
- * Gets type.
- *
- * @return the type.
- */
- int getType() const
- { return mType; }
-
- /**
- * Returns whether this thing is visible on the map or not. (Object)
- */
- bool isVisible() const
- { return mType != OBJECT_OTHER; }
-
- /**
- * Returns whether this thing can move on the map or not. (MovingObject)
- */
- bool canMove() const
- { return mType == OBJECT_CHARACTER || mType == OBJECT_MONSTER ||
- mType == OBJECT_NPC; }
-
- /**
- * Returns whether this thing can fight or not. (Being)
- */
- bool canFight() const
- { return mType == OBJECT_CHARACTER || mType == OBJECT_MONSTER; }
-
- /**
- * Updates the internal status.
- */
- virtual void
- update() = 0;
-
- /**
- * Gets the map this thing is located on.
- *
- * @return ID of map.
- */
- int getMapId() const
- { return mMapId; }
-
- /**
- * Sets the map this thing is located on.
- */
- void setMapId(int mapId)
- { mMapId = mapId; }
-
- private:
- unsigned short mMapId; /**< id of the map being is on */
- char mType; /**< Object type */
-};
-
-/**
- * Generic client-visible object definition.
+ * Generic client-visible object definition. Keeps track of position and what
+ * to update clients about.
*/
-class Object: public Thing
+class Object : public Thing
{
public:
/**
@@ -170,105 +89,8 @@ class Object: public Thing
{ mUpdateFlags = 0; }
private:
- char mUpdateFlags; /**< changes in object status */
- Point mPos; /**< coordinates */
-};
-
-/**
- * Base class for in-game moving objects.
- */
-class MovingObject: public Object
-{
- public:
- /**
- * Proxy constructor.
- */
- MovingObject(int type, int id)
- : Object(type),
- mPublicID(id),
- mDirection(0),
- mActionTime(0)
- {}
-
- /**
- * Gets the destination coordinates of the object.
- */
- Point const &getDestination() const
- { return mDst; }
-
- /**
- * Sets the destination coordinates of the object.
- */
- void setDestination(Point dst)
- { mDst = dst; raiseUpdateFlags(UPDATEFLAG_NEW_DESTINATION); mPath.clear(); }
-
- /**
- * Gets the old coordinates of the object.
- */
- Point getOldPosition() const
- { return mOld; }
-
- /**
- * Sets object direction
- */
- void setDirection(int direction)
- { mDirection = direction; }
-
- /**
- * Gets object direction
- */
- unsigned char getDirection() const
- { return mDirection; }
-
- /**
- * Sets object speed.
- */
- void setSpeed(unsigned s)
- { mSpeed = s; }
-
- /**
- * Sets object bounding circle radius
- */
- void setSize(unsigned s)
- { mSize = s; }
-
- /**
- * Gets object bounding circle radius
- */
- unsigned getSize()
- { return mSize; }
-
- /**
- * Moves the object toward its destination.
- */
- virtual void move();
-
- /**
- * Get public ID.
- *
- * @return the public ID, 65535 if none yet.
- */
- int getPublicID() const
- { return mPublicID; }
-
- /**
- * Set public ID.
- * The object shall not have any public ID yet.
- */
- void setPublicID(int id)
- { mPublicID = id; }
-
- private:
- unsigned short mPublicID; /**< Object ID sent to clients (unique with respect to the map) */
- Point mDst; /**< target coordinates */
- Point mOld; /**< old coordinates */
- unsigned short mSpeed; /**< speed */
- std::list<PATH_NODE> mPath;
-
- protected:
- unsigned char mDirection; /**< Facing direction */
- unsigned short mActionTime; /**< delay until next action */
- unsigned mSize; /**< radius of bounding circle */
+ char mUpdateFlags; /**< Changes in object status. */
+ Point mPos; /**< Coordinates. */
};
#endif // _TMWSERV_OBJECT_H_
diff --git a/src/game-server/thing.hpp b/src/game-server/thing.hpp
new file mode 100644
index 00000000..547885c4
--- /dev/null
+++ b/src/game-server/thing.hpp
@@ -0,0 +1,113 @@
+/*
+ * The Mana World Server
+ * 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$
+ */
+
+#ifndef _TMWSERV_THING_H_
+#define _TMWSERV_THING_H_
+
+/**
+ * Object type enumeration.
+ */
+enum
+{
+ OBJECT_ITEM = 0, /**< A simple item. */
+ OBJECT_ACTOR, /**< An item that toggle map/quest actions (doors,
+ switchs, ...) and can speak (map panels). */
+ OBJECT_NPC, /**< Non-Playable-Character is an actor capable of
+ movement and maybe actions. */
+ OBJECT_MONSTER, /**< A monster (moving actor with AI. Should be able to
+ toggle map/quest actions, too). */
+ OBJECT_CHARACTER, /**< A normal being. */
+ OBJECT_OTHER /**< Server-only object. */
+};
+
+/**
+ * Base class for in-game objects. Knows only its type and the map is resides
+ * on.
+ */
+class Thing
+{
+ public:
+ /**
+ * Constructor.
+ */
+ Thing(int type)
+ : mType(type)
+ {}
+
+ /**
+ * Empty virtual destructor.
+ */
+ virtual ~Thing() {}
+
+ /**
+ * Gets type of this thing.
+ *
+ * @return the type of this thing.
+ */
+ int getType() const
+ { return mType; }
+
+ /**
+ * Returns whether this thing is visible on the map or not. (Object)
+ */
+ bool isVisible() const
+ { return mType != OBJECT_OTHER; }
+
+ /**
+ * Returns whether this thing can move on the map or not. (MovingObject)
+ */
+ bool canMove() const
+ { return mType == OBJECT_CHARACTER || mType == OBJECT_MONSTER ||
+ mType == OBJECT_NPC; }
+
+ /**
+ * Returns whether this thing can fight or not. (Being)
+ */
+ bool canFight() const
+ { return mType == OBJECT_CHARACTER || mType == OBJECT_MONSTER; }
+
+ /**
+ * Updates the internal status.
+ */
+ virtual void
+ update() = 0;
+
+ /**
+ * Gets the map this thing is located on.
+ *
+ * @return ID of map.
+ */
+ int getMapId() const
+ { return mMapId; }
+
+ /**
+ * Sets the map this thing is located on.
+ */
+ void setMapId(int mapId)
+ { mMapId = mapId; }
+
+ private:
+ unsigned short mMapId; /**< ID of the map this thing is on. */
+ char mType; /**< Type of this thing. */
+};
+
+#endif // _TMWSERV_THING_H_
diff --git a/src/game-server/trigger.cpp b/src/game-server/trigger.cpp
index 4e593f4f..d658c7ae 100644
--- a/src/game-server/trigger.cpp
+++ b/src/game-server/trigger.cpp
@@ -21,10 +21,12 @@
* $Id$
*/
+#include "game-server/trigger.hpp"
+
#include "game-server/mapcomposite.hpp"
+#include "game-server/movingobject.hpp"
#include "game-server/object.hpp"
#include "game-server/state.hpp"
-#include "game-server/trigger.hpp"
void WarpAction::process(Object *obj)
{
diff --git a/src/game-server/trigger.hpp b/src/game-server/trigger.hpp
index a3455ae4..c24e73be 100644
--- a/src/game-server/trigger.hpp
+++ b/src/game-server/trigger.hpp
@@ -25,28 +25,30 @@
#define _TMWSERV_TRIGGER
#include "point.h"
-#include "game-server/object.hpp"
+#include "game-server/thing.hpp"
+
+class Object;
class TriggerAction
{
public:
virtual ~TriggerAction() {}
- virtual void process(Object *) = 0;
+ virtual void process(Object *obj) = 0;
};
-class WarpAction: public TriggerAction
+class WarpAction : public TriggerAction
{
public:
WarpAction(int m, int x, int y)
: mMap(m), mX(x), mY(y) {}
- virtual void process(Object *);
+ virtual void process(Object *obj);
private:
unsigned short mMap, mX, mY;
};
-class TriggerArea: public Thing
+class TriggerArea : public Thing
{
public:
/**