From ff799eb18e1c7e5f72671a0af037b2f1bfee6e91 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Sun, 27 Dec 2015 17:25:14 +0100 Subject: [PATCH] Extended RenderableComponent with onStart, onStop functions which are accessible from scripts --- ScriptingAPI-Documentation.md | 2 ++ .../DeferredRenderableComponent_BindLua.cpp | 2 ++ .../ForwardRenderableComponent_BindLua.cpp | 2 ++ WickedEngine/LoadingScreenComponent.cpp | 2 ++ .../LoadingScreenComponent_BindLua.cpp | 2 ++ WickedEngine/Renderable2DComponent.cpp | 2 +- .../Renderable2DComponent_BindLua.cpp | 2 ++ WickedEngine/Renderable3DComponent.cpp | 2 +- .../Renderable3DComponent_BindLua.cpp | 2 ++ WickedEngine/RenderableComponent.cpp | 16 +++++++++++ WickedEngine/RenderableComponent.h | 7 +++-- WickedEngine/RenderableComponent_BindLua.cpp | 28 +++++++++++++++++++ WickedEngine/RenderableComponent_BindLua.h | 3 ++ WickedEngine/WickedEngine.vcxproj | 1 + WickedEngine/WickedEngine.vcxproj.filters | 3 ++ 15 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 WickedEngine/RenderableComponent.cpp diff --git a/ScriptingAPI-Documentation.md b/ScriptingAPI-Documentation.md index 2acffb265..5e66021e3 100644 --- a/ScriptingAPI-Documentation.md +++ b/ScriptingAPI-Documentation.md @@ -379,6 +379,8 @@ A RenderableComponent describes a scene wich can render itself. - Update() - Render() - Compose() +- OnStart(string task) +- OnStop(string task) #### Renderable2DComponent diff --git a/WickedEngine/DeferredRenderableComponent_BindLua.cpp b/WickedEngine/DeferredRenderableComponent_BindLua.cpp index cda335589..7c1099cae 100644 --- a/WickedEngine/DeferredRenderableComponent_BindLua.cpp +++ b/WickedEngine/DeferredRenderableComponent_BindLua.cpp @@ -27,6 +27,8 @@ Luna::FunctionType DeferredRenderableCompon lunamethod(DeferredRenderableComponent_BindLua, Update), lunamethod(DeferredRenderableComponent_BindLua, Render), lunamethod(DeferredRenderableComponent_BindLua, Compose), + lunamethod(RenderableComponent_BindLua, OnStart), + lunamethod(RenderableComponent_BindLua, OnStop), lunamethod(Renderable3DComponent_BindLua, SetSSAOEnabled), lunamethod(Renderable3DComponent_BindLua, SetSSREnabled), diff --git a/WickedEngine/ForwardRenderableComponent_BindLua.cpp b/WickedEngine/ForwardRenderableComponent_BindLua.cpp index 047010322..4237c8595 100644 --- a/WickedEngine/ForwardRenderableComponent_BindLua.cpp +++ b/WickedEngine/ForwardRenderableComponent_BindLua.cpp @@ -27,6 +27,8 @@ Luna::FunctionType ForwardRenderableComponen lunamethod(ForwardRenderableComponent_BindLua, Update), lunamethod(ForwardRenderableComponent_BindLua, Render), lunamethod(ForwardRenderableComponent_BindLua, Compose), + lunamethod(RenderableComponent_BindLua, OnStart), + lunamethod(RenderableComponent_BindLua, OnStop), lunamethod(Renderable3DComponent_BindLua, SetSSAOEnabled), lunamethod(Renderable3DComponent_BindLua, SetSSREnabled), diff --git a/WickedEngine/LoadingScreenComponent.cpp b/WickedEngine/LoadingScreenComponent.cpp index 70c73ecfc..c606939a0 100644 --- a/WickedEngine/LoadingScreenComponent.cpp +++ b/WickedEngine/LoadingScreenComponent.cpp @@ -98,5 +98,7 @@ void LoadingScreenComponent::Start() { worker = thread(&LoadingScreenComponent::doLoadingTasks, this); thread(&LoadingScreenComponent::waitForFinish, this).detach(); + + Renderable2DComponent::Start(); } diff --git a/WickedEngine/LoadingScreenComponent_BindLua.cpp b/WickedEngine/LoadingScreenComponent_BindLua.cpp index a8492dbdc..4150a8088 100644 --- a/WickedEngine/LoadingScreenComponent_BindLua.cpp +++ b/WickedEngine/LoadingScreenComponent_BindLua.cpp @@ -25,6 +25,8 @@ Luna::FunctionType LoadingScreenComponent_BindLu lunamethod(LoadingScreenComponent_BindLua, Update), lunamethod(LoadingScreenComponent_BindLua, Render), lunamethod(LoadingScreenComponent_BindLua, Compose), + lunamethod(RenderableComponent_BindLua, OnStart), + lunamethod(RenderableComponent_BindLua, OnStop), lunamethod(LoadingScreenComponent_BindLua, AddLoadingTask), lunamethod(LoadingScreenComponent_BindLua, OnFinished), diff --git a/WickedEngine/Renderable2DComponent.cpp b/WickedEngine/Renderable2DComponent.cpp index fc9336b6f..7ad87e6a0 100644 --- a/WickedEngine/Renderable2DComponent.cpp +++ b/WickedEngine/Renderable2DComponent.cpp @@ -48,7 +48,7 @@ void Renderable2DComponent::Unload() } void Renderable2DComponent::Start() { - + RenderableComponent::Start(); } void Renderable2DComponent::Update() { diff --git a/WickedEngine/Renderable2DComponent_BindLua.cpp b/WickedEngine/Renderable2DComponent_BindLua.cpp index f17611f67..1fc8c6815 100644 --- a/WickedEngine/Renderable2DComponent_BindLua.cpp +++ b/WickedEngine/Renderable2DComponent_BindLua.cpp @@ -28,6 +28,8 @@ Luna::FunctionType Renderable2DComponent_BindLua: lunamethod(Renderable2DComponent_BindLua, Update), lunamethod(Renderable2DComponent_BindLua, Render), lunamethod(Renderable2DComponent_BindLua, Compose), + lunamethod(RenderableComponent_BindLua, OnStart), + lunamethod(RenderableComponent_BindLua, OnStop), { NULL, NULL } }; Luna::PropertyType Renderable2DComponent_BindLua::properties[] = { diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp index 2891788fc..9d7063b9b 100644 --- a/WickedEngine/Renderable3DComponent.cpp +++ b/WickedEngine/Renderable3DComponent.cpp @@ -169,7 +169,7 @@ void Renderable3DComponent::Load() void Renderable3DComponent::Start() { - RenderableComponent::Start(); + Renderable2DComponent::Start(); } void Renderable3DComponent::Update(){ diff --git a/WickedEngine/Renderable3DComponent_BindLua.cpp b/WickedEngine/Renderable3DComponent_BindLua.cpp index 9e63e3000..55b629734 100644 --- a/WickedEngine/Renderable3DComponent_BindLua.cpp +++ b/WickedEngine/Renderable3DComponent_BindLua.cpp @@ -28,6 +28,8 @@ Luna::FunctionType Renderable3DComponent_BindLua: lunamethod(Renderable3DComponent_BindLua, Update), lunamethod(Renderable3DComponent_BindLua, Render), lunamethod(Renderable3DComponent_BindLua, Compose), + lunamethod(RenderableComponent_BindLua, OnStart), + lunamethod(RenderableComponent_BindLua, OnStop), lunamethod(Renderable3DComponent_BindLua, SetSSAOEnabled), lunamethod(Renderable3DComponent_BindLua, SetSSREnabled), diff --git a/WickedEngine/RenderableComponent.cpp b/WickedEngine/RenderableComponent.cpp new file mode 100644 index 000000000..199dae658 --- /dev/null +++ b/WickedEngine/RenderableComponent.cpp @@ -0,0 +1,16 @@ +#include "Renderable2DComponent.h" + + +void RenderableComponent::Start() { + if (onStart != nullptr) + { + onStart(); + } +}; + +void RenderableComponent::Stop() { + if (onStop != nullptr) + { + onStop(); + } +}; \ No newline at end of file diff --git a/WickedEngine/RenderableComponent.h b/WickedEngine/RenderableComponent.h index 52e1a40b7..b7d3dd370 100644 --- a/WickedEngine/RenderableComponent.h +++ b/WickedEngine/RenderableComponent.h @@ -11,6 +11,9 @@ public: wiCVars Params; wiResourceManager Content; + function onStart; + function onStop; + RenderableComponent(){} ~RenderableComponent(){} @@ -21,9 +24,9 @@ public: //delete resources virtual void Unload(){}; //start component, load temporary resources - virtual void Start(){}; + virtual void Start(); //unload temporary resources - virtual void Stop(){}; + virtual void Stop(); //update logic virtual void Update(){}; //Render to layers, rendertargets, etc diff --git a/WickedEngine/RenderableComponent_BindLua.cpp b/WickedEngine/RenderableComponent_BindLua.cpp index b7f6969ea..a79ef1a01 100644 --- a/WickedEngine/RenderableComponent_BindLua.cpp +++ b/WickedEngine/RenderableComponent_BindLua.cpp @@ -13,6 +13,8 @@ Luna::FunctionType RenderableComponent_BindLua::met lunamethod(RenderableComponent_BindLua, Update), lunamethod(RenderableComponent_BindLua, Render), lunamethod(RenderableComponent_BindLua, Compose), + lunamethod(RenderableComponent_BindLua, OnStart), + lunamethod(RenderableComponent_BindLua, OnStop), { NULL, NULL } }; Luna::PropertyType RenderableComponent_BindLua::properties[] = { @@ -132,6 +134,32 @@ int RenderableComponent_BindLua::Compose(lua_State* L) return 0; } + +int RenderableComponent_BindLua::OnStart(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + string task = wiLua::SGetString(L, 1); + component->onStart = bind(&wiLua::RunText, wiLua::GetGlobal(), task); + } + else + wiLua::SError(L, "OnStart(string taskScript) not enough arguments!"); + return 0; +} +int RenderableComponent_BindLua::OnStop(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + string task = wiLua::SGetString(L, 1); + component->onStop = bind(&wiLua::RunText, wiLua::GetGlobal(), task); + } + else + wiLua::SError(L, "OnStop(string taskScript) not enough arguments!"); + return 0; +} + void RenderableComponent_BindLua::Bind() { diff --git a/WickedEngine/RenderableComponent_BindLua.h b/WickedEngine/RenderableComponent_BindLua.h index 57462b674..9fc99a1e3 100644 --- a/WickedEngine/RenderableComponent_BindLua.h +++ b/WickedEngine/RenderableComponent_BindLua.h @@ -26,6 +26,9 @@ public: virtual int Render(lua_State* L); virtual int Compose(lua_State* L); + virtual int OnStart(lua_State* L); + virtual int OnStop(lua_State* L); + static void Bind(); }; diff --git a/WickedEngine/WickedEngine.vcxproj b/WickedEngine/WickedEngine.vcxproj index 1cc9d4314..7da574675 100644 --- a/WickedEngine/WickedEngine.vcxproj +++ b/WickedEngine/WickedEngine.vcxproj @@ -289,6 +289,7 @@ + diff --git a/WickedEngine/WickedEngine.vcxproj.filters b/WickedEngine/WickedEngine.vcxproj.filters index db35faab3..176fe5f6f 100644 --- a/WickedEngine/WickedEngine.vcxproj.filters +++ b/WickedEngine/WickedEngine.vcxproj.filters @@ -803,6 +803,9 @@ Source Files + + ComponentTemplates +