From bf70d9f65fb6112ac871c7f12bc8055931608d59 Mon Sep 17 00:00:00 2001 From: D-AIRY <admin@ds-servers.com> Date: Tue, 30 Jun 2020 08:01:23 +0300 Subject: [PATCH] Disable rendering while loading --- source/anim/Renderable.cpp | 5 +++++ source/anim/Renderable.h | 7 +++++++ source/anim/plugin_main.cpp | 29 +++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/source/anim/Renderable.cpp b/source/anim/Renderable.cpp index d3a492191..f58eaae30 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 07f43523d..6510650ba 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 1766ff3ee..ddfac2601 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); -- GitLab