From d9f829f10a8310f53d945cd96ecce28193b792d8 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 26 Sep 2014 01:42:49 +0200 Subject: Add support for interactions with entities --- src/control/MapContext.cpp | 13 +++++++++++++ src/control/MapContext.hpp | 1 + src/model/Entity.hpp | 4 ++++ src/model/Map.hpp | 12 ++++++++++++ 4 files changed, 30 insertions(+) diff --git a/src/control/MapContext.cpp b/src/control/MapContext.cpp index f5d4c05..1b0e721 100644 --- a/src/control/MapContext.cpp +++ b/src/control/MapContext.cpp @@ -71,6 +71,15 @@ void MapContext::movePlayerContinue(uint64_t time) { movePlayer(Model::Direction::WEST, time); } +void MapContext::interact(uint64_t time) { + Model::Position p = map.getEntityPosition(playerEntity) + playerEntity->getDirection(); + Model::Entity *target = map.getEntityAt(p); + + if (!target) + return; + + target->interact(time); +} void MapContext::keyPressed(uint16_t key, uint64_t time) { switch (key) { @@ -88,6 +97,10 @@ void MapContext::keyPressed(uint16_t key, uint64_t time) { case SDL_SCANCODE_LEFT: movePlayer(Model::Direction::WEST, time); + break; + + case SDL_SCANCODE_SPACE: + interact(time); } } diff --git a/src/control/MapContext.hpp b/src/control/MapContext.hpp index 05ed991..18d4cfe 100644 --- a/src/control/MapContext.hpp +++ b/src/control/MapContext.hpp @@ -52,6 +52,7 @@ private: void movePlayer(Model::Direction dir, uint64_t time); void movePlayerContinue(uint64_t time); void keyPressed(uint16_t key, uint64_t time); + void interact(uint64_t time); Model::Position getViewPosition(uint64_t time) { return map.getEntityPosition(playerEntity, time); diff --git a/src/model/Entity.hpp b/src/model/Entity.hpp index 331cb4f..677eeb5 100644 --- a/src/model/Entity.hpp +++ b/src/model/Entity.hpp @@ -61,6 +61,10 @@ public: void setDirection(Direction dir) { direction = dir; } + + void interact(uint64_t time) { + std::fprintf(stderr, "Tried to interact with `%s' entity at %llu\n", name.c_str(), (unsigned long long)time); + } }; } diff --git a/src/model/Map.hpp b/src/model/Map.hpp index 0343709..acf93b1 100644 --- a/src/model/Map.hpp +++ b/src/model/Map.hpp @@ -223,6 +223,18 @@ public: return tiles[layer][p.y*width + p.x]; } + Entity * getEntityAt(const Position &p) { + auto it = positions.find(p); + if (it == positions.end()) + return nullptr; + + return *it->second.begin(); + } + + Position getEntityPosition(const Entity *entity) const { + return entityStates.at(entity).position; + } + Position getEntityPosition(const Entity *entity, uint64_t time) const; bool moveEntity(Entity *entity, Direction dir, uint64_t start, uint64_t end); void moveEntityTo(Entity *entity, Position pos); -- cgit v1.2.3