diff --git a/source/xEngine/Engine.cpp b/source/xEngine/Engine.cpp index 152cfd60c8b0ff5f7d056726d49912b047629fec..427f0d8200037fc68d4690208343e20f8ce61983 100644 --- a/source/xEngine/Engine.cpp +++ b/source/xEngine/Engine.cpp @@ -123,6 +123,7 @@ CEngine::CEngine(int argc, char **argv, const char *szName) INIT_OUTPUT_STREAM(m_pCore); LibReport(REPORT_MSG_LEVEL_NOTICE, "LIB core initialized\n"); + m_pObserverChangedEventChannel = m_pCore->getEventChannel<XEventObserverChanged>(EVENT_OBSERVER_CHANGED_GUID); Core_0RegisterCVarString("engine_version", SKYXENGINE_VERSION, "Текущая версия движка", FCVAR_READONLY); @@ -395,9 +396,14 @@ bool CEngine::runFrame() if(pRenderContext) { - SRender_SetCamera(m_pCallback->getCameraForFrame()); + ICamera *pCamera = m_pCallback->getCameraForFrame(); + SRender_SetCamera(pCamera); SRender_UpdateView(); + XEventObserverChanged ev; + ev.pCamera = pCamera; + m_pObserverChangedEventChannel->broadcastEvent(&ev); + IXRenderPipeline *pRenderPipeline; m_pCore->getRenderPipeline(&pRenderPipeline); diff --git a/source/xEngine/Engine.h b/source/xEngine/Engine.h index 1333bed8601f2f4aa846bdbd500203d156a1ef9f..e865577703204300b148985c086e9344be4818fc 100644 --- a/source/xEngine/Engine.h +++ b/source/xEngine/Engine.h @@ -55,6 +55,8 @@ protected: IXUI *m_pXUI = NULL; + IEventChannel<XEventObserverChanged> *m_pObserverChangedEventChannel = NULL; + #ifdef USE_BREAKPAD google_breakpad::ExceptionHandler *m_pBreakpadHandler = NULL; #endif diff --git a/source/xcommon/XEvents.h b/source/xcommon/XEvents.h index a3fbfc39dc08aa727498e90f3d0b99e5ce01a94e..0d33ec29ad8f0a288dbc3071444ff7d8ff0c1226 100644 --- a/source/xcommon/XEvents.h +++ b/source/xcommon/XEvents.h @@ -222,4 +222,14 @@ struct XEventCvarChanged const void *pCvar; }; + +// {5CEC2355-1F1E-4A1D-8E69-5B92850B62D2} +#define EVENT_OBSERVER_CHANGED_GUID DEFINE_XGUID(0x5cec2355, 0x1f1e, 0x4a1d, 0x8e, 0x69, 0x5b, 0x92, 0x85, 0xb, 0x62, 0xd2) + +class ICamera; +struct XEventObserverChanged +{ + ICamera *pCamera; +}; + #endif