#include "CScenesManager.h" #include "CWindowManager.h" #include "CEngine.h" bool CScenesManager::V_Init() { auto winman = CEngine::GetInstance()->Components.GetComponentTyped(); if(!winman) { return true; } //TODO true or false? winman->OnDraw += [this]() { auto winman = CEngine::GetInstance()->Components.GetComponentTyped(); if(!ActiveScene.expired() && ActiveScene.lock()) { ActiveScene.lock()->Render(winman->Renderer.get()); } }; OnDrawCallback = winman->OnDraw.GetLastFunctionHandleShared(); return true; } void CScenesManager::V_Update() { for(auto& scene : Scenes) { scene->Update(); } } void CScenesManager::V_DeInit() { Scenes.clear(); } void CScenesManager::AddScene(std::shared_ptr scene) { Scenes.push_back(scene); } int CScenesManager::GetSceneID(CScene* _scene) const { auto it = std::find_if(Scenes.begin(), Scenes.end(), [_scene](auto& sc) -> bool { return sc.get() == _scene; }); if(it != Scenes.end()) { return std::distance(Scenes.begin(), it); } return -1; } void CScenesManager::SetActiveScene(std::shared_ptr _scene) { ActiveScene = _scene; } void CScenesManager::RenderActive(CRendererBase* renderer) { if (!ActiveScene.expired() && ActiveScene.lock()) { ActiveScene.lock()->Render(renderer); } } LINK_SOL_USERTYPE(CScenesManager); LINK_COMPONENT_TO_CLASS(CScenesManager, scenesmanager)