summaryrefslogtreecommitdiffstats
path: root/src/control
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2014-09-23 20:27:08 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2014-09-23 20:27:08 +0200
commit8f964bb27dcac5d0620e0dfab211a4bc51cbd707 (patch)
tree61352b7c4edce7362507b2769a67843b22ffff62 /src/control
parent502f12e1898107de5b3676f23bab6424a041f7cf (diff)
downloadrpgedit-8f964bb27dcac5d0620e0dfab211a4bc51cbd707.tar
rpgedit-8f964bb27dcac5d0620e0dfab211a4bc51cbd707.zip
Move main loop to a new class
Diffstat (limited to 'src/control')
-rw-r--r--src/control/RPGEdit.cpp108
-rw-r--r--src/control/RPGEdit.hpp48
2 files changed, 156 insertions, 0 deletions
diff --git a/src/control/RPGEdit.cpp b/src/control/RPGEdit.cpp
new file mode 100644
index 0000000..cb34812
--- /dev/null
+++ b/src/control/RPGEdit.cpp
@@ -0,0 +1,108 @@
+/*
+ Copyright (c) 2014, Matthias Schiffer <mschiffer@universe-factory.net>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "RPGEdit.hpp"
+#include "EventBus.hpp"
+#include "InputHandler.hpp"
+#include "MapContext.hpp"
+#include "../view/MapView.hpp"
+
+#include <SDL.h>
+
+
+#define MIN_FRAME_DELAY 10
+
+
+namespace RPGEdit {
+
+namespace Control {
+
+RPGEdit::RPGEdit() {
+}
+
+RPGEdit::~RPGEdit() {
+}
+
+void RPGEdit::run() {
+ EventBus eventBus;
+
+ InputHandler inputHandler;
+
+ 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);
+
+ bool running = true;
+ uint32_t ticks = SDL_GetTicks();
+ uint32_t lastFrameTicks = ticks;
+
+ while (true) {
+ int timeout = lastFrameTicks + MIN_FRAME_DELAY - SDL_GetTicks();
+ if (timeout < 0)
+ timeout = 0;
+
+ SDL_Event event;
+ if (SDL_WaitEventTimeout(&event, timeout)) {
+ switch (event.type) {
+ case SDL_KEYDOWN:
+ inputHandler.keyPressed(event.key.keysym.scancode);
+ break;
+
+ case SDL_KEYUP:
+ inputHandler.keyReleased(event.key.keysym.scancode);
+ break;
+
+ case SDL_QUIT:
+ running = false;
+ break;
+ }
+ }
+
+ if (!running)
+ break;
+
+ uint32_t newTicks = SDL_GetTicks();
+ ctx->advance(&inputHandler, newTicks - ticks);
+
+ ticks = newTicks;
+
+ if (!SDL_TICKS_PASSED(SDL_GetTicks(), lastFrameTicks + MIN_FRAME_DELAY))
+ continue;
+
+ Model::Position pos = map->getPlayerEntity().getPosition();
+ mapView->render(pos.x, pos.y);
+
+ lastFrameTicks = ticks;
+ }
+}
+
+}
+
+}
diff --git a/src/control/RPGEdit.hpp b/src/control/RPGEdit.hpp
new file mode 100644
index 0000000..edab13c
--- /dev/null
+++ b/src/control/RPGEdit.hpp
@@ -0,0 +1,48 @@
+/*
+ Copyright (c) 2014, Matthias Schiffer <mschiffer@universe-factory.net>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#pragma once
+
+#include <SDL.h>
+
+
+namespace RPGEdit {
+
+namespace Control {
+
+class RPGEdit {
+private:
+
+public:
+ RPGEdit();
+ ~RPGEdit();
+
+ void run();
+};
+
+}
+
+}