diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-01-03 17:10:43 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-01-03 17:10:43 +0000 |
commit | 1673de8b5553f6dcd4898c84b8d44ba8b30740f1 (patch) | |
tree | 3dcc47461a6b4914c4e81492e7be885c3a1502ea /src/game-server/object.hpp | |
parent | 6b7441516002d6e7cca424416bb67c6bc7d7c9d2 (diff) | |
download | manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.gz manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.bz2 manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.xz manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.zip |
Split persistent player data from game server data. Enabled inventory code back.
Diffstat (limited to 'src/game-server/object.hpp')
-rw-r--r-- | src/game-server/object.hpp | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/src/game-server/object.hpp b/src/game-server/object.hpp new file mode 100644 index 00000000..498680e4 --- /dev/null +++ b/src/game-server/object.hpp @@ -0,0 +1,258 @@ +/* + * 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_OBJECT_H_ +#define _TMWSERV_OBJECT_H_ + +#include <vector> + +#include "point.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_PLAYER, // A normal being + OBJECT_OTHER // Server-only object +}; + +class MapComposite; + +enum +{ + NEW_ON_MAP = 1, + NEW_DESTINATION = 2, + ATTACK = 4 +}; + +/** + * 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_PLAYER || mType == OBJECT_MONSTER || + mType == OBJECT_NPC; } + + /** + * Returns whether this thing can fight or not. (Being) + */ + bool canFight() const + { return mType == OBJECT_PLAYER || 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. + */ +class Object: public Thing +{ + public: + /** + * Constructor. + */ + Object(int type) + : Thing(type), + mUpdateFlags(0) + {} + + /** + * Sets the coordinates. + * + * @param p the coordinates. + */ + void setPosition(const Point &p) + { mPos = p; } + + /** + * Gets the coordinates. + * + * @return the coordinates. + */ + Point const &getPosition() const + { return mPos; } + + /** + * Gets what changed in the object. + */ + int getUpdateFlags() const + { return mUpdateFlags; } + + /** + * Sets some changes in the object. + */ + void raiseUpdateFlags(int n) + { mUpdateFlags |= n; } + + /** + * Clears changes in the object. + */ + void clearUpdateFlags() + { 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(NEW_DESTINATION); } + + /** + * Gets the old coordinates of the object. + */ + Point getOldPosition() const + { return mOld; } + + /** + * Sete 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; } + + /** + * Moves the object toward its destination. + */ + 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 */ + + protected: + unsigned char mDirection; /**< Facing direction */ + unsigned short mActionTime; /**< delay until next action */ +}; + +#endif // _TMWSERV_OBJECT_H_ |