scene linking works, yes! std::function didnt

This commit is contained in:
wgroeneveld 2018-08-02 16:45:44 +02:00
parent 2765b48f85
commit 3a5463d251
7 changed files with 33 additions and 17 deletions

View File

@ -3,3 +3,9 @@
// //
#include "Scene.h" #include "Scene.h"
#include <engine/gba_engine.h>
void Scene::setEngineForSceneSwitching(GBAEngine *engine) {
this->engine = engine;
}

View File

@ -11,11 +11,13 @@
#include "engine/sprites/sprite.h" #include "engine/sprites/sprite.h"
#include "palette_manager.h" #include "palette_manager.h"
class GBAEngine;
class Scene { class Scene {
protected: protected:
std::unique_ptr<ForegroundPaletteManager> foregroundPalette; std::unique_ptr<ForegroundPaletteManager> foregroundPalette;
std::unique_ptr<BackgroundPaletteManager> backgroundPalette; std::unique_ptr<BackgroundPaletteManager> backgroundPalette;
std::function<void (Scene&)> onNextSceneFn; GBAEngine* engine;
public: public:
ForegroundPaletteManager* getForegroundPalette() { return foregroundPalette.get(); } ForegroundPaletteManager* getForegroundPalette() { return foregroundPalette.get(); }
@ -26,8 +28,7 @@ public:
virtual void load() = 0; virtual void load() = 0;
virtual void tick(u16 i) = 0; virtual void tick(u16 i) = 0;
void onNextScene(std::function<void(Scene &)> fn) { onNextSceneFn = fn; }; void setEngineForSceneSwitching(GBAEngine* engine);
Scene() { } Scene() { }
~Scene() { ~Scene() {

View File

@ -24,17 +24,18 @@ GBAEngine::GBAEngine() {
Allocator::free(); Allocator::free();
} }
void GBAEngine::setScene(Scene& scene) { void GBAEngine::setScene(Scene* scene) {
if(this->currentScene) { if(this->currentScene) {
cleanupPreviousScene(); cleanupPreviousScene();
TextStream::instance().clear();
} }
scene.load(); scene->load();
auto fgPalette = scene.getForegroundPalette(); auto fgPalette = scene->getForegroundPalette();
if(fgPalette) { if(fgPalette) {
fgPalette->persist(); fgPalette->persist();
} }
auto bgPalette = scene.getBackgroundPalette(); auto bgPalette = scene->getBackgroundPalette();
if(bgPalette) { if(bgPalette) {
bgPalette->persist(); bgPalette->persist();
} }
@ -42,12 +43,12 @@ void GBAEngine::setScene(Scene& scene) {
Allocator::free(); Allocator::free();
TextStream::instance().persist(); TextStream::instance().persist();
spriteManager.set(scene.sprites()); spriteManager.set(scene->sprites());
spriteManager.persist(); spriteManager.persist();
for(const auto bg : scene.backgrounds()) { for(const auto bg : scene->backgrounds()) {
bg->persist(); bg->persist();
} }
this->currentScene = &scene; this->currentScene = scene;
} }

View File

@ -26,7 +26,7 @@ private:
public: public:
GBAEngine(); GBAEngine();
void setScene(Scene& scene); void setScene(Scene* scene);
u16 readKeys(); u16 readKeys();
void update(); void update();
void delay(int times) { void delay(int times) {

View File

@ -5,6 +5,7 @@
#include <engine/sprites/affine_sprite.h> #include <engine/sprites/affine_sprite.h>
#include <engine/sprites/sprite_builder.h> #include <engine/sprites/sprite_builder.h>
#include <engine/gba/tonc_memmap.h> #include <engine/gba/tonc_memmap.h>
#include <engine/background/text_stream.h>
#include "flying_stuff_scene.h" #include "flying_stuff_scene.h"
#include "kul.h" #include "kul.h"
@ -52,6 +53,8 @@ void FlyingStuffScene::load() {
.withLocation(150, 60) .withLocation(150, 60)
.buildPtr(); .buildPtr();
TextStream::instance() << "level 1 ofwa" << "ziet da af";
bg = std::unique_ptr<Background>(new Background(1, background_data, sizeof(background_data), map, sizeof(map))); bg = std::unique_ptr<Background>(new Background(1, background_data, sizeof(background_data), map, sizeof(map)));
bg.get()->useMapScreenBlock(16); bg.get()->useMapScreenBlock(16);
} }

View File

@ -15,14 +15,15 @@
* assumes 8bpp sprites * assumes 8bpp sprites
*/ */
int main() { int main() {
GBAEngine engine; GBAEngine* engine = new GBAEngine();
SampleStartScene startScene; SampleStartScene* startScene = new SampleStartScene();
engine.setScene(startScene); startScene->setEngineForSceneSwitching(engine);
engine->setScene(startScene);
while (true) { while (true) {
engine.update(); engine->update();
engine.delay(1000); engine->delay(1000);
} }
return 0; return 0;

View File

@ -5,8 +5,10 @@
#include <engine/sprites/sprite_builder.h> #include <engine/sprites/sprite_builder.h>
#include <engine/background/text_stream.h> #include <engine/background/text_stream.h>
#include <engine/gba/tonc_memdef.h> #include <engine/gba/tonc_memdef.h>
#include <engine/gba_engine.h>
#include "sample_start_scene.h" #include "sample_start_scene.h"
#include "kul.h" #include "kul.h"
#include "flying_stuff_scene.h"
std::vector<Background *> SampleStartScene::backgrounds() { std::vector<Background *> SampleStartScene::backgrounds() {
return {}; return {};
@ -33,12 +35,14 @@ void SampleStartScene::load() {
.withLocation(50, 50) .withLocation(50, 50)
.buildPtr(); .buildPtr();
TextStream::instance().clear();
TextStream::instance().setText("PRESS START", 3, 8); TextStream::instance().setText("PRESS START", 3, 8);
} }
void SampleStartScene::tick(u16 keys) { void SampleStartScene::tick(u16 keys) {
if(keys & KEY_START) { if(keys & KEY_START) {
TextStream::instance() << "entered: starting next scene"; TextStream::instance() << "entered: starting next scene";
FlyingStuffScene* nextScene = new FlyingStuffScene();
engine->setScene(nextScene);
} }
} }