From e96c7409b72f3a6fc38ff22563332fd368efb5a2 Mon Sep 17 00:00:00 2001 From: Paul Merrill Date: Sun, 10 Jul 2011 16:26:32 -0700 Subject: [PATCH] add player.cpp --- src/player.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/player.cpp diff --git a/src/player.cpp b/src/player.cpp new file mode 100644 index 0000000..83610c4 --- /dev/null +++ b/src/player.cpp @@ -0,0 +1,46 @@ +#include "area.h" +#include "player.h" +#include "sprite.h" +#include "world.h" + +Player::Player(Resourcer* rc, Area* area, const std::string& descriptor) + : Entity(rc, area, descriptor) +{ +} + +void Player::moveByTile(coord_t delta) +{ + coord_t newCoord = sprite.getCoordsByTile(); + newCoord.x += delta.x; + newCoord.y += delta.y; + newCoord.z += delta.z; + Area::Tile* dest = area->getTile(newCoord); + if ((dest->flags & Area::player_nowalk) != 0 || + (dest->type->flags & Area::player_nowalk) != 0) { + // The tile we're trying to move onto is set as player_nowalk. + // Stop here. + return; + } + + // TODO: make double array of directions + if (delta.x > 0) + sprite.setPhase("right"); + else if (delta.x < 0) + sprite.setPhase("left"); + else if (delta.y > 0) + sprite.setPhase("down"); + else if (delta.y < 0) + sprite.setPhase("up"); + + return Entity::moveByTile(delta); +} + +void Player::postMove() +{ + coord_t coord = sprite.getCoordsByTile(); + Area::Tile* dest = area->getTile(coord); + Area::Door* door = dest->door; + if (door) + World::getWorld()->loadArea(door->area, door->coord); +} + -- 2.11.4.GIT