diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2007-03-30 21:48:39 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2007-03-30 21:48:39 +0000 |
commit | 4684bfb34ca0ed06c998bfe3c1369f94e8532b0d (patch) | |
tree | 090c05956c76f1d80273a5f68c80e53a249a922b /src/game-server | |
parent | f2f50428fa1381cb39060b38186c09fc363c5f02 (diff) | |
download | manaserv-4684bfb34ca0ed06c998bfe3c1369f94e8532b0d.tar.gz manaserv-4684bfb34ca0ed06c998bfe3c1369f94e8532b0d.tar.bz2 manaserv-4684bfb34ca0ed06c998bfe3c1369f94e8532b0d.tar.xz manaserv-4684bfb34ca0ed06c998bfe3c1369f94e8532b0d.zip |
Separated the Thing and MovingObject classes from the Object module.
Diffstat (limited to 'src/game-server')
-rw-r--r-- | src/game-server/being.hpp | 2 | ||||
-rw-r--r-- | src/game-server/movingobject.cpp (renamed from src/game-server/object.cpp) | 2 | ||||
-rw-r--r-- | src/game-server/movingobject.hpp | 134 | ||||
-rw-r--r-- | src/game-server/object.hpp | 198 | ||||
-rw-r--r-- | src/game-server/thing.hpp | 113 | ||||
-rw-r--r-- | src/game-server/trigger.cpp | 4 | ||||
-rw-r--r-- | src/game-server/trigger.hpp | 12 |
7 files changed, 269 insertions, 196 deletions
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: /** |