scene linking works, yes! std::function didnt
This commit is contained in:
parent
2765b48f85
commit
3a5463d251
|
@ -3,3 +3,9 @@
|
|||
//
|
||||
|
||||
#include "Scene.h"
|
||||
|
||||
#include <engine/gba_engine.h>
|
||||
|
||||
void Scene::setEngineForSceneSwitching(GBAEngine *engine) {
|
||||
this->engine = engine;
|
||||
}
|
|
@ -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() {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ private:
|
|||
public:
|
||||
GBAEngine();
|
||||
|
||||
void setScene(Scene& scene);
|
||||
void setScene(Scene* scene);
|
||||
u16 readKeys();
|
||||
void update();
|
||||
void delay(int times) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
11
src/main.cpp
11
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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue