summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2014-09-26 01:42:49 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2014-09-26 01:42:49 +0200
commitd9f829f10a8310f53d945cd96ecce28193b792d8 (patch)
treeb7b925e644c460632f1262df84cc84d36c096c9c /src
parent3177ba222467e74d761d6a545ef05e8f1a0993c0 (diff)
downloadrpgedit-d9f829f10a8310f53d945cd96ecce28193b792d8.tar
rpgedit-d9f829f10a8310f53d945cd96ecce28193b792d8.zip
Add support for interactions with entities
Diffstat (limited to 'src')
-rw-r--r--src/control/MapContext.cpp13
-rw-r--r--src/control/MapContext.hpp1
-rw-r--r--src/model/Entity.hpp4
-rw-r--r--src/model/Map.hpp12
4 files changed, 30 insertions, 0 deletions
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<int> 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<float> 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<int> &p) {
+ auto it = positions.find(p);
+ if (it == positions.end())
+ return nullptr;
+
+ return *it->second.begin();
+ }
+
+ Position<int> getEntityPosition(const Entity *entity) const {
+ return entityStates.at(entity).position;
+ }
+
Position<float> 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<int> pos);