diff --git a/WickedEngine/DeferredRenderableComponent_BindLua.cpp b/WickedEngine/DeferredRenderableComponent_BindLua.cpp index edacd8902..abb345dcb 100644 --- a/WickedEngine/DeferredRenderableComponent_BindLua.cpp +++ b/WickedEngine/DeferredRenderableComponent_BindLua.cpp @@ -9,6 +9,8 @@ Luna::FunctionType DeferredRenderableCompon lunamethod(Renderable2DComponent_BindLua, RemoveFont), lunamethod(Renderable2DComponent_BindLua, ClearSprites), lunamethod(Renderable2DComponent_BindLua, ClearFonts), + lunamethod(Renderable2DComponent_BindLua, GetSpriteOrder), + lunamethod(Renderable2DComponent_BindLua, GetFontOrder), lunamethod(Renderable2DComponent_BindLua, AddLayer), lunamethod(Renderable2DComponent_BindLua, GetLayers), diff --git a/WickedEngine/ForwardRenderableComponent_BindLua.cpp b/WickedEngine/ForwardRenderableComponent_BindLua.cpp index 911e61ae4..1a5be1400 100644 --- a/WickedEngine/ForwardRenderableComponent_BindLua.cpp +++ b/WickedEngine/ForwardRenderableComponent_BindLua.cpp @@ -9,6 +9,8 @@ Luna::FunctionType ForwardRenderableComponen lunamethod(Renderable2DComponent_BindLua, RemoveFont), lunamethod(Renderable2DComponent_BindLua, ClearSprites), lunamethod(Renderable2DComponent_BindLua, ClearFonts), + lunamethod(Renderable2DComponent_BindLua, GetSpriteOrder), + lunamethod(Renderable2DComponent_BindLua, GetFontOrder), lunamethod(Renderable2DComponent_BindLua, AddLayer), lunamethod(Renderable2DComponent_BindLua, GetLayers), diff --git a/WickedEngine/LoadingScreenComponent_BindLua.cpp b/WickedEngine/LoadingScreenComponent_BindLua.cpp index 28a95d9e4..90e02c770 100644 --- a/WickedEngine/LoadingScreenComponent_BindLua.cpp +++ b/WickedEngine/LoadingScreenComponent_BindLua.cpp @@ -3,13 +3,20 @@ const char LoadingScreenComponent_BindLua::className[] = "LoadingScreenComponent"; Luna::FunctionType LoadingScreenComponent_BindLua::methods[] = { - lunamethod(Renderable2DComponent_BindLua, GetContent), lunamethod(Renderable2DComponent_BindLua, AddSprite), lunamethod(Renderable2DComponent_BindLua, AddFont), lunamethod(Renderable2DComponent_BindLua, RemoveSprite), lunamethod(Renderable2DComponent_BindLua, RemoveFont), lunamethod(Renderable2DComponent_BindLua, ClearSprites), lunamethod(Renderable2DComponent_BindLua, ClearFonts), + lunamethod(Renderable2DComponent_BindLua, GetSpriteOrder), + lunamethod(Renderable2DComponent_BindLua, GetFontOrder), + lunamethod(Renderable2DComponent_BindLua, AddLayer), + lunamethod(Renderable2DComponent_BindLua, GetLayers), + lunamethod(Renderable2DComponent_BindLua, SetLayerOrder), + lunamethod(Renderable2DComponent_BindLua, SetSpriteOrder), + lunamethod(Renderable2DComponent_BindLua, SetFontOrder), + lunamethod(LoadingScreenComponent_BindLua, Initialize), lunamethod(LoadingScreenComponent_BindLua, Load), lunamethod(LoadingScreenComponent_BindLua, Unload), diff --git a/WickedEngine/Renderable2DComponent.cpp b/WickedEngine/Renderable2DComponent.cpp index 529c28190..5bca889e4 100644 --- a/WickedEngine/Renderable2DComponent.cpp +++ b/WickedEngine/Renderable2DComponent.cpp @@ -155,10 +155,11 @@ void Renderable2DComponent::removeSprite(wiSprite* sprite) { if (y.sprite == sprite) { - + y.sprite = nullptr; } } } + CleanLayers(); } void Renderable2DComponent::clearSprites() { @@ -166,7 +167,21 @@ void Renderable2DComponent::clearSprites() { for (auto& y : x.entities) { - + y.sprite = nullptr; + } + } + CleanLayers(); +} +int Renderable2DComponent::getSpriteOrder(wiSprite* sprite) +{ + for (auto& x : layers) + { + for (auto& y : x.entities) + { + if (y.sprite == sprite) + { + return y.order; + } } } } @@ -191,9 +206,13 @@ void Renderable2DComponent::removeFont(wiFont* font) { for (auto& y : x.entities) { - + if (y.font == font) + { + y.font = nullptr; + } } } + CleanLayers(); } void Renderable2DComponent::clearFonts() { @@ -201,7 +220,21 @@ void Renderable2DComponent::clearFonts() { for (auto& y : x.entities) { - + y.font = nullptr; + } + } + CleanLayers(); +} +int Renderable2DComponent::getFontOrder(wiFont* font) +{ + for (auto& x : layers) + { + for (auto& y : x.entities) + { + if (y.font == font) + { + return y.order; + } } } } @@ -298,3 +331,25 @@ void Renderable2DComponent::SortLayers() } } } + +void Renderable2DComponent::CleanLayers() +{ + for (auto& x : layers) + { + if (x.entities.empty()) + { + continue; + } + vector cleanEntities(0); + for (auto& y : x.entities) + { + if (y.sprite != nullptr || y.font!=nullptr) + { + cleanEntities.push_back(y); + } + } + x.entities.clear(); + x.entities = cleanEntities; + } +} + diff --git a/WickedEngine/Renderable2DComponent.h b/WickedEngine/Renderable2DComponent.h index 33868745d..8e066b95a 100644 --- a/WickedEngine/Renderable2DComponent.h +++ b/WickedEngine/Renderable2DComponent.h @@ -61,10 +61,12 @@ public: void clearSprites(); void setSpriteSpeed(float value){ m_spriteSpeed = value; } float getSpriteSpeed(){ return m_spriteSpeed; } + int getSpriteOrder(wiSprite* sprite); void addFont(wiFont* font, const string& layer = DEFAULT_RENDERLAYER); void removeFont(wiFont* font); void clearFonts(); + int getFontOrder(wiFont* font); vector layers; void addLayer(const string& name); @@ -72,5 +74,6 @@ public: void SetSpriteOrder(wiSprite* sprite, int order); void SetFontOrder(wiFont* font, int order); void SortLayers(); + void CleanLayers(); }; diff --git a/WickedEngine/Renderable2DComponent_BindLua.cpp b/WickedEngine/Renderable2DComponent_BindLua.cpp index b302f49a0..f17611f67 100644 --- a/WickedEngine/Renderable2DComponent_BindLua.cpp +++ b/WickedEngine/Renderable2DComponent_BindLua.cpp @@ -13,6 +13,8 @@ Luna::FunctionType Renderable2DComponent_BindLua: lunamethod(Renderable2DComponent_BindLua, RemoveFont), lunamethod(Renderable2DComponent_BindLua, ClearSprites), lunamethod(Renderable2DComponent_BindLua, ClearFonts), + lunamethod(Renderable2DComponent_BindLua, GetSpriteOrder), + lunamethod(Renderable2DComponent_BindLua, GetFontOrder), lunamethod(Renderable2DComponent_BindLua, AddLayer), lunamethod(Renderable2DComponent_BindLua, GetLayers), lunamethod(Renderable2DComponent_BindLua, SetLayerOrder), @@ -217,6 +219,72 @@ int Renderable2DComponent_BindLua::ClearFonts(lua_State* L) } return 0; } +int Renderable2DComponent_BindLua::GetSpriteOrder(lua_State* L) +{ + if (component == nullptr) + { + wiLua::SError(L, "GetSpriteOrder() component is empty!"); + return 0; + } + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + wiSprite_BindLua* sprite = Luna::lightcheck(L, 1); + if (sprite != nullptr) + { + Renderable2DComponent* ccomp = dynamic_cast(component); + if (ccomp != nullptr) + { + wiLua::SSetInt(L, ccomp->getSpriteOrder(sprite->sprite)); + return 1; + } + else + { + wiLua::SError(L, "GetSpriteOrder(Sprite sprite) not a Renderable2DComponent!"); + } + } + else + wiLua::SError(L, "GetSpriteOrder(Sprite sprite) argument is not a Sprite!"); + } + else + { + wiLua::SError(L, "GetSpriteOrder(Sprite sprite) not enough arguments!"); + } + return 0; +} +int Renderable2DComponent_BindLua::GetFontOrder(lua_State* L) +{ + if (component == nullptr) + { + wiLua::SError(L, "GetFontOrder() component is empty!"); + return 0; + } + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + wiFont_BindLua* font = Luna::lightcheck(L, 1); + if (font != nullptr) + { + Renderable2DComponent* ccomp = dynamic_cast(component); + if (ccomp != nullptr) + { + wiLua::SSetInt(L, ccomp->getFontOrder(font->font)); + return 1; + } + else + { + wiLua::SError(L, "GetFontOrder(Font font) not a Renderable2DComponent!"); + } + } + else + wiLua::SError(L, "GetFontOrder(Font font) argument is not a Sprite!"); + } + else + { + wiLua::SError(L, "GetFontOrder(Font font) not enough arguments!"); + } + return 0; +} int Renderable2DComponent_BindLua::AddLayer(lua_State* L) { diff --git a/WickedEngine/Renderable2DComponent_BindLua.h b/WickedEngine/Renderable2DComponent_BindLua.h index d5254968a..1bf5de88d 100644 --- a/WickedEngine/Renderable2DComponent_BindLua.h +++ b/WickedEngine/Renderable2DComponent_BindLua.h @@ -21,6 +21,8 @@ public: int RemoveFont(lua_State* L); int ClearSprites(lua_State *L); int ClearFonts(lua_State* L); + int GetSpriteOrder(lua_State* L); + int GetFontOrder(lua_State* L); int AddLayer(lua_State* L); int GetLayers(lua_State* L); diff --git a/WickedEngine/Renderable3DComponent_BindLua.cpp b/WickedEngine/Renderable3DComponent_BindLua.cpp index 481e9dd3d..5bb7250dd 100644 --- a/WickedEngine/Renderable3DComponent_BindLua.cpp +++ b/WickedEngine/Renderable3DComponent_BindLua.cpp @@ -10,6 +10,8 @@ Luna::FunctionType Renderable3DComponent_BindLua: lunamethod(Renderable2DComponent_BindLua, RemoveFont), lunamethod(Renderable2DComponent_BindLua, ClearSprites), lunamethod(Renderable2DComponent_BindLua, ClearFonts), + lunamethod(Renderable2DComponent_BindLua, GetSpriteOrder), + lunamethod(Renderable2DComponent_BindLua, GetFontOrder), lunamethod(Renderable2DComponent_BindLua, AddLayer), lunamethod(Renderable2DComponent_BindLua, GetLayers),