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 <engine/gba_engine.h>
void Scene::setEngineForSceneSwitching(GBAEngine *engine) {
this->engine = engine;
}

View File

@ -11,11 +11,13 @@
#include "engine/sprites/sprite.h"
#include "palette_manager.h"
class GBAEngine;
class Scene {
protected:
std::unique_ptr<ForegroundPaletteManager> foregroundPalette;
std::unique_ptr<BackgroundPaletteManager> backgroundPalette;
std::function<void (Scene&)> 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<void(Scene &)> fn) { onNextSceneFn = fn; };
void setEngineForSceneSwitching(GBAEngine* engine);
Scene() { }
~Scene() {

View File

@ -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;
}

View File

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

View File

@ -5,6 +5,7 @@
#include <engine/sprites/affine_sprite.h>
#include <engine/sprites/sprite_builder.h>
#include <engine/gba/tonc_memmap.h>
#include <engine/background/text_stream.h>
#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<Background>(new Background(1, background_data, sizeof(background_data), map, sizeof(map)));
bg.get()->useMapScreenBlock(16);
}

View File

@ -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;

View File

@ -5,8 +5,10 @@
#include <engine/sprites/sprite_builder.h>
#include <engine/background/text_stream.h>
#include <engine/gba/tonc_memdef.h>
#include <engine/gba_engine.h>
#include "sample_start_scene.h"
#include "kul.h"
#include "flying_stuff_scene.h"
std::vector<Background *> 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);
}
}