diff --git a/WickedEngine/Renderable2DComponent.cpp b/WickedEngine/Renderable2DComponent.cpp index 522eff540..be440910f 100644 --- a/WickedEngine/Renderable2DComponent.cpp +++ b/WickedEngine/Renderable2DComponent.cpp @@ -32,9 +32,19 @@ void Renderable2DComponent::Unload() { for (wiSprite* x : m_sprites) { - x->CleanUp(); + if (x != nullptr) + x->CleanUp(); + SAFE_DELETE(x); } m_sprites.clear(); + + for (wiFont* x : m_fonts) + { + if (x != nullptr) + x->CleanUp(); + SAFE_DELETE(x); + } + m_fonts.clear(); } void Renderable2DComponent::Start() { @@ -42,9 +52,29 @@ void Renderable2DComponent::Start() } void Renderable2DComponent::Update() { + vector spritesToDelete(0); + vector fontsToDelete(0); + for (wiSprite* x : m_sprites) { - x->Update(getSpriteSpeed()); + if (x != nullptr) + x->Update(getSpriteSpeed()); + else + spritesToDelete.push_back(x); + } + for (wiFont* x : m_fonts) + { + if (x == nullptr) + fontsToDelete.push_back(x); + } + + for (wiSprite* x : spritesToDelete) + { + m_sprites.remove(x); + } + for (wiFont* x : fontsToDelete) + { + m_fonts.remove(x); } } void Renderable2DComponent::Render() @@ -55,12 +85,14 @@ void Renderable2DComponent::Render() for (wiSprite* x : m_sprites) { - x->Draw(); + if(x != nullptr) + x->Draw(); } for (wiFont* x : m_fonts) { - x->Draw(); + if (x != nullptr) + x->Draw(); } } void Renderable2DComponent::Compose() diff --git a/WickedEngine/Renderable2DComponent.h b/WickedEngine/Renderable2DComponent.h index f21d36b72..29b237a13 100644 --- a/WickedEngine/Renderable2DComponent.h +++ b/WickedEngine/Renderable2DComponent.h @@ -11,8 +11,8 @@ private: float m_spriteSpeed; wiRenderTarget rtFinal; protected: - vector m_sprites; - vector m_fonts; + list m_sprites; + list m_fonts; public: Renderable2DComponent(); ~Renderable2DComponent(); diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp index e4169234d..74a85adec 100644 --- a/WickedEngine/wiFont.cpp +++ b/WickedEngine/wiFont.cpp @@ -447,3 +447,8 @@ int wiFont::getFontStyleByName( const string& get ){ return i; return 0; } + +void wiFont::CleanUp() +{ + +}