diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-09-24 01:38:30 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-09-24 01:38:30 +0200 |
commit | ea8840291cdf66784c6a2cb465b63ccfb5483c38 (patch) | |
tree | 0ab1e059c3b798d27f8d9a15816c7beb0dd236e8 /src/model | |
parent | 24ae84861379f2f878804b53a457153ad1ad6c1e (diff) | |
download | rpgedit-ea8840291cdf66784c6a2cb465b63ccfb5483c38.tar rpgedit-ea8840291cdf66784c6a2cb465b63ccfb5483c38.zip |
New event-driven goodness
Diffstat (limited to 'src/model')
-rw-r--r-- | src/model/Entity.hpp | 54 | ||||
-rw-r--r-- | src/model/Map.cpp | 2 | ||||
-rw-r--r-- | src/model/Map.hpp | 4 |
3 files changed, 25 insertions, 35 deletions
diff --git a/src/model/Entity.hpp b/src/model/Entity.hpp index fa4477d..1ff444a 100644 --- a/src/model/Entity.hpp +++ b/src/model/Entity.hpp @@ -46,8 +46,8 @@ private: Position pos; Direction direction; - unsigned transition = 0; - unsigned step = 0; + uint64_t transitionStart = 0; + uint64_t transitionEnd = 0; Position translate(Direction dir, float amount) const { Position p = pos; @@ -81,9 +81,14 @@ public: return name; } - Position getPosition() const { - if (transition) - return translate(direction, (float)step / transition); + Position getPosition(uint64_t time) const { + if (hasTransition()) + if (time <= transitionStart) + return pos; + else if (time >= transitionEnd) + return translate(direction, 1); + else + return translate(direction, float(time-transitionStart)/float(transitionEnd-transitionStart)); else return pos; } @@ -92,43 +97,28 @@ public: return direction; } - void moveTo(float newX, float newY) { - pos.x = newX; - pos.y = newY; + void moveTo(Position newPos) { + pos = newPos; + transitionStart = transitionEnd = 0; } - void move(Direction dir, unsigned steps = 0) { - if (transition) + void move(Direction dir, uint64_t start, uint64_t end) { + if (hasTransition()) return; direction = dir; - if (steps) - transition = steps; - else - pos = translate(direction, 1); + transitionStart = start; + transitionEnd = end; } - bool hasTransition() const { - return transition; + void finishTransition() { + if (hasTransition()) + moveTo(translate(direction, 1)); } - unsigned advance(unsigned ticks) { - if (!transition) - return ticks; - - step += ticks; - - if (step >= transition) { - ticks = step - transition; - transition = step = 0; - pos = translate(direction, 1); - - return ticks; - } - else { - return 0; - } + bool hasTransition() const { + return transitionEnd; } }; diff --git a/src/model/Map.cpp b/src/model/Map.cpp index 8081255..db18baf 100644 --- a/src/model/Map.cpp +++ b/src/model/Map.cpp @@ -46,7 +46,7 @@ std::shared_ptr<Map> Map::load(__attribute__((unused)) const std::string &name) } map->playerEntity = std::make_shared<Entity>("square"); - map->playerEntity->moveTo(6, 6); + map->playerEntity->moveTo(Model::Position{6, 6}); map->entities.push_back(map->playerEntity); diff --git a/src/model/Map.hpp b/src/model/Map.hpp index 5d6ba01..9d4eded 100644 --- a/src/model/Map.hpp +++ b/src/model/Map.hpp @@ -67,8 +67,8 @@ public: return entities; } - Entity & getPlayerEntity() const { - return *playerEntity; + const std::shared_ptr<Entity> & getPlayerEntity() const { + return playerEntity; } size_t getWidth() const { |