diff --git a/source/anim/Renderable.cpp b/source/anim/Renderable.cpp index d3a49219136eb34791aa71ed9094576f889f99d8..f58eaae30dc27e8d247ab591ed913ea0ee82702b 100644 --- a/source/anim/Renderable.cpp +++ b/source/anim/Renderable.cpp @@ -20,6 +20,11 @@ UINT XMETHODCALLTYPE CRenderable::getPriorityForStage(X_RENDER_STAGE stage) void XMETHODCALLTYPE CRenderable::renderStage(X_RENDER_STAGE stage, IXRenderableVisibility *pVisibility) { + if(!m_isEnabled) + { + return; + } + CRenderableVisibility *pVis = NULL; if(pVisibility) { diff --git a/source/anim/Renderable.h b/source/anim/Renderable.h index 07f43523d76b1face9182ae1c54183b5d82db62f..6510650ba42342524fcb48acb116fc023d7febfb 100644 --- a/source/anim/Renderable.h +++ b/source/anim/Renderable.h @@ -42,11 +42,18 @@ public: } IXMaterialSystem* getMaterialSystem(); + + void setEnabled(bool set) + { + m_isEnabled = set; + } protected: IGXDevice *m_pDevice = NULL; IXMaterialSystem *m_pMaterialSystem = NULL; ID m_idPlugin = -1; + bool m_isEnabled = true; + CAnimatedModelProvider *m_pAnimatedModelProvider = NULL; CDynamicModelProvider *m_pDynamicModelProvider = NULL; }; diff --git a/source/anim/plugin_main.cpp b/source/anim/plugin_main.cpp index 1766ff3eeeb315a215d49312a2f0d6e08f8ad211..ddfac260134d8351379e579fc3fe2cf000f8114b 100644 --- a/source/anim/plugin_main.cpp +++ b/source/anim/plugin_main.cpp @@ -24,6 +24,32 @@ protected: CDynamicModelProvider *m_pDynamicModelProvider; }; +class CLoadLevelEventListener final: public IEventListener<XEventLevel> +{ +public: + CLoadLevelEventListener(CRenderable *pRenderable): + m_pRenderable(pRenderable) + {} + void onEvent(const XEventLevel *pData) + { + switch(pData->type) + { + case XEventLevel::TYPE_LOAD_BEGIN: + m_pRenderable->setEnabled(false); + break; + case XEventLevel::TYPE_LOAD_END: + m_pRenderable->setEnabled(true); + break; + + default: + break; + } + } + +protected: + CRenderable *m_pRenderable; +}; + class CDSEPlugin: public IXUnknownImplementation<IXPlugin> { public: @@ -34,8 +60,10 @@ public: m_pRenderable = new CRenderable(getID(), m_pAnimatedModelProvider, m_pDynamicModelProvider); m_pUpdatable = new CUpdatable(m_pAnimatedModelProvider, m_pDynamicModelProvider); m_pLevelSizeEventListener = new CLevelSizeEventListener(m_pAnimatedModelProvider, m_pDynamicModelProvider); + m_pLevelLoadEventListener = new CLoadLevelEventListener(m_pRenderable); m_pCore->getEventChannel<XEventLevelSize>(EVENT_LEVEL_GET_SIZE_GUID)->addListener(m_pLevelSizeEventListener); + m_pCore->getEventChannel<XEventLevel>(EVENT_LEVEL_GUID)->addListener(m_pLevelLoadEventListener); } void XMETHODCALLTYPE startup(IXCore *pCore) override @@ -130,6 +158,7 @@ protected: CAnimatedModelProvider *m_pAnimatedModelProvider = NULL; CDynamicModelProvider *m_pDynamicModelProvider = NULL; CLevelSizeEventListener *m_pLevelSizeEventListener = NULL; + CLoadLevelEventListener *m_pLevelLoadEventListener = NULL; }; DECLARE_XPLUGIN(CDSEPlugin);