summaryrefslogtreecommitdiff
path: root/src/game-server/actor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/actor.cpp')
-rw-r--r--src/game-server/actor.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/game-server/actor.cpp b/src/game-server/actor.cpp
index 60379124..9c839172 100644
--- a/src/game-server/actor.cpp
+++ b/src/game-server/actor.cpp
@@ -25,10 +25,24 @@
#include <cassert>
-Actor::~Actor()
+ActorComponent::ActorComponent(Entity &entity):
+ mMoveTime(0),
+ mUpdateFlags(0),
+ mPublicID(65535),
+ mSize(0),
+ mWalkMask(0),
+ mBlockType(BLOCKTYPE_NONE)
+{
+ entity.signal_removed.connect(
+ sigc::mem_fun(this, &ActorComponent::removed));
+ entity.signal_map_changed.connect(
+ sigc::mem_fun(this, &ActorComponent::mapChanged));
+}
+
+void ActorComponent::removed(Entity *entity)
{
// Free the map position
- if (MapComposite *mapComposite = getMap())
+ if (MapComposite *mapComposite = entity->getMap())
{
Map *map = mapComposite->getMap();
int tileWidth = map->getTileWidth();
@@ -38,10 +52,10 @@ Actor::~Actor()
}
}
-void Actor::setPosition(const Point &p)
+void ActorComponent::setPosition(Entity &entity, const Point &p)
{
// Update blockmap
- if (MapComposite *mapComposite = getMap())
+ if (MapComposite *mapComposite = entity.getMap())
{
Map *map = mapComposite->getMap();
int tileWidth = map->getTileWidth();
@@ -58,21 +72,11 @@ void Actor::setPosition(const Point &p)
mPos = p;
}
-void Actor::setMap(MapComposite *mapComposite)
+void ActorComponent::mapChanged(Entity *entity)
{
- assert(mapComposite);
const Point p = getPosition();
- if (MapComposite *oldMapComposite = getMap())
- {
- Map *oldMap = oldMapComposite->getMap();
- int oldTileWidth = oldMap->getTileWidth();
- int oldTileHeight = oldMap->getTileHeight();
- oldMap->freeTile(p.x / oldTileWidth, p.y / oldTileHeight,
- getBlockType());
- }
- Entity::setMap(mapComposite);
- Map *map = mapComposite->getMap();
+ Map *map = entity->getMap()->getMap();
int tileWidth = map->getTileWidth();
int tileHeight = map->getTileHeight();
map->blockTile(p.x / tileWidth, p.y / tileHeight, getBlockType());