scene linking works, yes! std::function didnt
This commit is contained in:
parent
2765b48f85
commit
3a5463d251
|
@ -3,3 +3,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "Scene.h"
|
#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 "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() {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
11
src/main.cpp
11
src/main.cpp
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue