From 3a5463d2516ba73e4d78b32f362c75da0c405b6d Mon Sep 17 00:00:00 2001 From: wgroeneveld Date: Thu, 2 Aug 2018 16:45:44 +0200 Subject: [PATCH] scene linking works, yes! std::function didnt --- src/engine/Scene.cpp | 6 ++++++ src/engine/Scene.h | 7 ++++--- src/engine/gba_engine.cpp | 15 ++++++++------- src/engine/gba_engine.h | 2 +- src/flying_stuff_scene.cpp | 3 +++ src/main.cpp | 11 ++++++----- src/sample_start_scene.cpp | 6 +++++- 7 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/engine/Scene.cpp b/src/engine/Scene.cpp index 6622f44..9b4fc48 100644 --- a/src/engine/Scene.cpp +++ b/src/engine/Scene.cpp @@ -3,3 +3,9 @@ // #include "Scene.h" + +#include + +void Scene::setEngineForSceneSwitching(GBAEngine *engine) { + this->engine = engine; +} \ No newline at end of file diff --git a/src/engine/Scene.h b/src/engine/Scene.h index 9feeebb..db009b5 100644 --- a/src/engine/Scene.h +++ b/src/engine/Scene.h @@ -11,11 +11,13 @@ #include "engine/sprites/sprite.h" #include "palette_manager.h" +class GBAEngine; + class Scene { protected: std::unique_ptr foregroundPalette; std::unique_ptr backgroundPalette; - std::function onNextSceneFn; + GBAEngine* engine; public: ForegroundPaletteManager* getForegroundPalette() { return foregroundPalette.get(); } @@ -26,8 +28,7 @@ public: virtual void load() = 0; virtual void tick(u16 i) = 0; - void onNextScene(std::function fn) { onNextSceneFn = fn; }; - + void setEngineForSceneSwitching(GBAEngine* engine); Scene() { } ~Scene() { diff --git a/src/engine/gba_engine.cpp b/src/engine/gba_engine.cpp index 3c2c507..f677075 100644 --- a/src/engine/gba_engine.cpp +++ b/src/engine/gba_engine.cpp @@ -24,17 +24,18 @@ GBAEngine::GBAEngine() { Allocator::free(); } -void GBAEngine::setScene(Scene& scene) { +void GBAEngine::setScene(Scene* scene) { if(this->currentScene) { cleanupPreviousScene(); + TextStream::instance().clear(); } - scene.load(); + scene->load(); - auto fgPalette = scene.getForegroundPalette(); + auto fgPalette = scene->getForegroundPalette(); if(fgPalette) { fgPalette->persist(); } - auto bgPalette = scene.getBackgroundPalette(); + auto bgPalette = scene->getBackgroundPalette(); if(bgPalette) { bgPalette->persist(); } @@ -42,12 +43,12 @@ void GBAEngine::setScene(Scene& scene) { Allocator::free(); TextStream::instance().persist(); - spriteManager.set(scene.sprites()); + spriteManager.set(scene->sprites()); spriteManager.persist(); - for(const auto bg : scene.backgrounds()) { + for(const auto bg : scene->backgrounds()) { bg->persist(); } - this->currentScene = &scene; + this->currentScene = scene; } diff --git a/src/engine/gba_engine.h b/src/engine/gba_engine.h index a5841ee..84f4ad6 100644 --- a/src/engine/gba_engine.h +++ b/src/engine/gba_engine.h @@ -26,7 +26,7 @@ private: public: GBAEngine(); - void setScene(Scene& scene); + void setScene(Scene* scene); u16 readKeys(); void update(); void delay(int times) { diff --git a/src/flying_stuff_scene.cpp b/src/flying_stuff_scene.cpp index 04a1004..dbe13fa 100644 --- a/src/flying_stuff_scene.cpp +++ b/src/flying_stuff_scene.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "flying_stuff_scene.h" #include "kul.h" @@ -52,6 +53,8 @@ void FlyingStuffScene::load() { .withLocation(150, 60) .buildPtr(); + TextStream::instance() << "level 1 ofwa" << "ziet da af"; + bg = std::unique_ptr(new Background(1, background_data, sizeof(background_data), map, sizeof(map))); bg.get()->useMapScreenBlock(16); } diff --git a/src/main.cpp b/src/main.cpp index 91fefda..5e729fd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,14 +15,15 @@ * assumes 8bpp sprites */ int main() { - GBAEngine engine; + GBAEngine* engine = new GBAEngine(); - SampleStartScene startScene; - engine.setScene(startScene); + SampleStartScene* startScene = new SampleStartScene(); + startScene->setEngineForSceneSwitching(engine); + engine->setScene(startScene); while (true) { - engine.update(); - engine.delay(1000); + engine->update(); + engine->delay(1000); } return 0; diff --git a/src/sample_start_scene.cpp b/src/sample_start_scene.cpp index 8f48af7..37dfdab 100644 --- a/src/sample_start_scene.cpp +++ b/src/sample_start_scene.cpp @@ -5,8 +5,10 @@ #include #include #include +#include #include "sample_start_scene.h" #include "kul.h" +#include "flying_stuff_scene.h" std::vector SampleStartScene::backgrounds() { return {}; @@ -33,12 +35,14 @@ void SampleStartScene::load() { .withLocation(50, 50) .buildPtr(); - TextStream::instance().clear(); TextStream::instance().setText("PRESS START", 3, 8); } void SampleStartScene::tick(u16 keys) { if(keys & KEY_START) { TextStream::instance() << "entered: starting next scene"; + + FlyingStuffScene* nextScene = new FlyingStuffScene(); + engine->setScene(nextScene); } }