summaryrefslogtreecommitdiff
path: root/src/game-server/actorcomponent.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/actorcomponent.h')
-rw-r--r--src/game-server/actorcomponent.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/game-server/actorcomponent.h b/src/game-server/actorcomponent.h
new file mode 100644
index 00000000..8f256923
--- /dev/null
+++ b/src/game-server/actorcomponent.h
@@ -0,0 +1,160 @@
+/*
+ * The Mana Server
+ * Copyright (C) 2004-2010 The Mana World Development Team
+ *
+ * This file is part of The Mana Server.
+ *
+ * The Mana Server 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 Server 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 Server. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ACTORCOMPONENT_H
+#define ACTORCOMPONENT_H
+
+#include "game-server/map.h"
+#include "game-server/entity.h"
+#include "utils/point.h"
+
+/**
+ * Flags that are raised as necessary. They trigger messages that are sent to
+ * the clients.
+ */
+enum
+{
+ UPDATEFLAG_NEW_ON_MAP = 1,
+ UPDATEFLAG_NEW_DESTINATION = 2,
+ UPDATEFLAG_ACTIONCHANGE = 4,
+ UPDATEFLAG_LOOKSCHANGE = 8,
+ UPDATEFLAG_DIRCHANGE = 16,
+ UPDATEFLAG_HEALTHCHANGE = 32,
+ UPDATEFLAG_EMOTE = 64,
+ UPDATEFLAG_ABILITY_ON_POINT = 128,
+ UPDATEFLAG_ABILITY_ON_BEING = 256,
+ UPDATEFLAG_ABILITY_ON_DIRECTION = 512,
+};
+
+/**
+ * Generic client-visible object. Keeps track of position, size and what to
+ * update clients about.
+ */
+class ActorComponent : public Component
+{
+ public:
+ static const ComponentType type = CT_Actor;
+
+ ActorComponent(Entity &entity);
+
+ void update(Entity &entity)
+ {}
+
+ void removed(Entity *entity);
+
+ /**
+ * Sets the coordinates. Also updates the walkmap of the map the actor
+ * is on.
+ *
+ * @param p the coordinates.
+ */
+ void setPosition(Entity &entity, const Point &p);
+
+ /**
+ * Gets the coordinates.
+ *
+ * @return the coordinates.
+ */
+ const Point &getPosition() const
+ { return mPos; }
+
+ /**
+ * Gets what changed in the actor.
+ */
+ int getUpdateFlags() const
+ { return mUpdateFlags; }
+
+ /**
+ * Sets some changes in the actor.
+ */
+ void raiseUpdateFlags(int n)
+ { mUpdateFlags |= n; }
+
+ /**
+ * Clears changes in the actor.
+ */
+ void clearUpdateFlags()
+ { mUpdateFlags = 0; }
+
+ /**
+ * Sets actor bounding circle radius.
+ */
+ void setSize(int s) { mSize = s; }
+ int getSize() const { return mSize; }
+
+ /**
+ * Get public ID.
+ *
+ * @return the public ID, 65535 if none yet.
+ */
+ int getPublicID() const
+ { return mPublicID; }
+
+ /**
+ * Set public ID. The actor shall not have any public ID yet.
+ */
+ void setPublicID(int id)
+ { mPublicID = id; }
+
+ bool isPublicIdValid() const
+ { return (mPublicID > 0 && mPublicID != 65535); }
+
+ void setWalkMask(unsigned char mask)
+ { mWalkMask = mask; }
+
+ /**
+ * Gets the way the actor blocks pathfinding for other actors.
+ */
+ unsigned char getWalkMask() const
+ { return mWalkMask; }
+
+ /**
+ * Gets the way the actor blocks pathfinding for other actors.
+ */
+ BlockType getBlockType() const
+ { return mBlockType; }
+
+ void setBlockType(BlockType blockType)
+ { mBlockType = blockType; }
+
+ /**
+ * Overridden in order to update the walkmap.
+ */
+ virtual void mapChanged(Entity *entity);
+
+ protected:
+
+ /** Delay until move to next tile in miliseconds. */
+ unsigned short mMoveTime;
+
+ private:
+ int mUpdateFlags; /**< Changes in actor status. */
+
+ /** Actor ID sent to clients (unique with respect to the map). */
+ unsigned short mPublicID;
+
+ Point mPos; /**< Coordinates. */
+ unsigned char mSize; /**< Radius of bounding circle. */
+
+ unsigned char mWalkMask;
+ BlockType mBlockType;
+};
+
+#endif // ACTORCOMPONENT_H