summaryrefslogtreecommitdiffstats
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
parent502f12e1898107de5b3676f23bab6424a041f7cf (diff)
downloadrpgedit-8f964bb27dcac5d0620e0dfab211a4bc51cbd707.tar
rpgedit-8f964bb27dcac5d0620e0dfab211a4bc51cbd707.zip
Move main loop to a new class
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/control/RPGEdit.cpp108
-rw-r--r--src/control/RPGEdit.hpp48
-rw-r--r--src/rpgedit.cpp69
4 files changed, 159 insertions, 67 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 91e5b5f..71fc6e2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,6 +5,7 @@ add_executable(rpgedit
rpgedit.cpp
control/ImageLoader.cpp
control/MapContext.cpp
+ control/RPGEdit.cpp
model/Map.cpp
view/MapView.cpp
)
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();
+};
+
+}
+
+}
diff --git a/src/rpgedit.cpp b/src/rpgedit.cpp
index 4efaf10..6ef5dd3 100644
--- a/src/rpgedit.cpp
+++ b/src/rpgedit.cpp
@@ -24,82 +24,17 @@
*/
-#include "control/EventBus.hpp"
-#include "control/InputHandler.hpp"
-#include "control/MapContext.hpp"
-#include "view/MapView.hpp"
-
-#include <unistd.h>
+#include "control/RPGEdit.hpp"
#include <SDL.h>
#include <SDL_main.h>
-#define MIN_FRAME_DELAY 10
-
-
extern "C"
int main(__attribute__((unused)) int argc, __attribute__((unused)) char *argv[]) {
- using namespace RPGEdit;
-
SDL_Init(SDL_INIT_VIDEO);
- {
- Control::EventBus eventBus;
-
- Control::InputHandler inputHandler;
-
- Control::ImageLoader tileLoader;
- std::shared_ptr<Model::Map> map = Model::Map::load("test");
-
- std::shared_ptr<Control::MapContext> ctx(new Control::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;
- }
- }
+ RPGEdit::Control::RPGEdit().run();
SDL_Quit();