ColorRace/engine/src/layer/SceneManager.cpp
2026-08-02 13:51:24 +02:00

65 lines
1.6 KiB
C++

//
// Created by sebastian on 30.07.26.
//
#include "SceneManager.h"
#include <iostream>
#include "spdlog/spdlog.h"
void engine::SceneManager::switchTo(std::unique_ptr<Scene> scene, std::function<void()> onSceneLoaded) {
onSceneLoaded = std::move(onSceneLoaded);
nextScene = std::move(scene);
std::vector<AssetRequest> requestedAssets = nextScene->getRequiredAssets();
spdlog::debug("Requested Assets: {}", requestedAssets.size());
for (AssetRequest & request : requestedAssets) {
assetLoader.scheduleAsset(request);
}
assetLoader.start();
}
void engine::SceneManager::update(float deltaTime) {
if (nextScene) {
auto uploadedAssets = assetLoader.processUploadQueue(2);
std::cout << "Uploaded Assets: " << uploadedAssets.size() << std::endl;
for (const auto& asset : uploadedAssets) {
nextScene->onRegisterLoadedAsset(asset);
}
if (assetLoader.getProgress().isDone()) {
if (currentScene) {
currentScene->onExit();
}
currentScene = std::move(nextScene);
nextScene = nullptr;
currentScene->onEnter();
assetLoader.stop();
if (onSceneLoaded) {
onSceneLoaded();
onSceneLoaded = nullptr;
}
}
}
if (currentScene) {
currentScene->onUpdate(deltaTime);
}
}
void engine::SceneManager::render() const {
if (currentScene) {
currentScene->onRender();
}
}
float engine::SceneManager::getTransitionProgress() const {
return assetLoader.getProgress().fraction();
}