← Back to file list Raw

src/CScenesManager.cpp

#include "CScenesManager.h"
#include "CWindowManager.h"
#include "CEngine.h"
bool CScenesManager::V_Init()
{
auto winman = CEngine::GetInstance()->Components.GetComponentTyped<CWindowManager>();
if(!winman) { return true; } //TODO true or false?
winman->OnDraw += [this]()
{
auto winman = CEngine::GetInstance()->Components.GetComponentTyped<CWindowManager>();
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<CScene> 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<CScene> _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)