summaryrefslogtreecommitdiffstats
path: root/src/control/RPGEdit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/control/RPGEdit.cpp')
-rw-r--r--src/control/RPGEdit.cpp85
1 files changed, 34 insertions, 51 deletions
diff --git a/src/control/RPGEdit.cpp b/src/control/RPGEdit.cpp
index cb34812..679796c 100644
--- a/src/control/RPGEdit.cpp
+++ b/src/control/RPGEdit.cpp
@@ -25,8 +25,6 @@
#include "RPGEdit.hpp"
-#include "EventBus.hpp"
-#include "InputHandler.hpp"
#include "MapContext.hpp"
#include "../view/MapView.hpp"
@@ -40,67 +38,52 @@ namespace RPGEdit {
namespace Control {
-RPGEdit::RPGEdit() {
-}
-
-RPGEdit::~RPGEdit() {
-}
-
-void RPGEdit::run() {
- EventBus eventBus;
-
- InputHandler inputHandler;
+bool RPGEdit::systemIter(unsigned ticks) {
+ int timeout = 0;
- ImageLoader tileLoader;
- std::shared_ptr<Model::Map> map = Model::Map::load("test");
-
- std::shared_ptr<MapContext> ctx(new MapContext(&tileLoader, map));
-
- std::shared_ptr<View::Window> window(new View::Window);
- std::shared_ptr<View::MapView> mapView = ctx->initView(window);
+ SDL_Event event;
+ if (SDL_WaitEventTimeout(&event, timeout)) {
+ switch (event.type) {
+ case SDL_KEYDOWN:
+ inputHandler.keyPressed(event.key.keysym.scancode);
+ break;
- bool running = true;
- uint32_t ticks = SDL_GetTicks();
- uint32_t lastFrameTicks = ticks;
+ case SDL_KEYUP:
+ inputHandler.keyReleased(event.key.keysym.scancode);
+ break;
- while (true) {
- int timeout = lastFrameTicks + MIN_FRAME_DELAY - SDL_GetTicks();
- if (timeout < 0)
- timeout = 0;
+ case SDL_QUIT:
+ return false;
+ }
+ }
- SDL_Event event;
- if (SDL_WaitEventTimeout(&event, timeout)) {
- switch (event.type) {
- case SDL_KEYDOWN:
- inputHandler.keyPressed(event.key.keysym.scancode);
- break;
+ ctx->advance(&inputHandler, ticks);
- case SDL_KEYUP:
- inputHandler.keyReleased(event.key.keysym.scancode);
- break;
+ Model::Position pos = ctx->getViewPosition();
+ mapView->render(pos.x, pos.y);
- case SDL_QUIT:
- running = false;
- break;
- }
- }
+ return true;
+}
- if (!running)
- break;
+void RPGEdit::systemLoop() {
+ uint32_t ticks1 = SDL_GetTicks();
+ uint32_t ticks2 = ticks1;
- uint32_t newTicks = SDL_GetTicks();
- ctx->advance(&inputHandler, newTicks - ticks);
+ while (systemIter(ticks2 - ticks1)) {
+ ticks1 = ticks2;
+ ticks2 = SDL_GetTicks();
+ }
+}
- ticks = newTicks;
+void RPGEdit::run() {
+ std::shared_ptr<Model::Map> map = Model::Map::load("test");
- if (!SDL_TICKS_PASSED(SDL_GetTicks(), lastFrameTicks + MIN_FRAME_DELAY))
- continue;
+ ctx = std::make_shared<MapContext>(&tileLoader, map);
- Model::Position pos = map->getPlayerEntity().getPosition();
- mapView->render(pos.x, pos.y);
+ window = std::make_shared<View::Window>();
+ mapView = ctx->initView(window);
- lastFrameTicks = ticks;
- }
+ systemLoop();
}
}