From b34310c631989551054d456eb47aaab5ded266a4 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 17 Nov 2021 22:33:40 +0800 Subject: *misc --- .../BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua | 4 ++ Data/Libraries/GameLab/Editor/Window/GUIWindow.lua | 12 ++++- Documents/Unity.xlsx | Bin 0 -> 195084 bytes Editor/GUI/GUIWindow.cpp | 59 ++++++++++++++------- Editor/GUI/GUIWindow.h | 17 +++--- Editor/Scripting/Window/GUIWindow.bind.cpp | 17 +++--- Runtime/Lua/LuaBind/LuaBindInvoker.h | 4 +- Runtime/Lua/LuaBind/LuaBindLFunction.h | 2 +- 8 files changed, 76 insertions(+), 39 deletions(-) create mode 100644 Documents/Unity.xlsx diff --git a/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua b/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua index 7ed156b..3030b38 100644 --- a/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua +++ b/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua @@ -70,4 +70,8 @@ GUI.HorizontalScrollbar = function() end +GUI.DrawLine = function() + +end + return GUI \ No newline at end of file diff --git a/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua b/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua index 53f08a8..e434aed 100644 --- a/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua +++ b/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua @@ -61,6 +61,14 @@ GUIWindow.set_position = function(self, position) self.m_Native:SetPosition({position.x, position.y, position.width, position.height}) end +GUIWindow.Start = function(self) + +end + +GUIWindow.Destroy = function(self) + +end + GUIWindow.SetContainerWindow = function(self, containerWindow) self.m_ContainerWindow = containerWindow self.m_Native:SetContainerWindow(containerWindow:GetNative()) @@ -85,6 +93,7 @@ end -- 最主要的回调函数,同时处理窗口管理、事件、布局、渲染 GUIWindow.OnGUI = function(self) + Debug.Log("OnGUI") self:ClearBackground() local event = Event.current @@ -102,12 +111,11 @@ end GUIWindow.OnFocus = function(self) Debug.Log("GUIWindow.OnFocus") -end +end GUIWindow.ClearBackground = function(self) GL.ClearColor(self.m_ClearColor) GL.Clear(GL.EBufferType.ColorBuffer) - end return GUIWindow \ No newline at end of file diff --git a/Documents/Unity.xlsx b/Documents/Unity.xlsx new file mode 100644 index 0000000..70d0a73 Binary files /dev/null and b/Documents/Unity.xlsx differ diff --git a/Editor/GUI/GUIWindow.cpp b/Editor/GUI/GUIWindow.cpp index 028a654..fe19a95 100644 --- a/Editor/GUI/GUIWindow.cpp +++ b/Editor/GUI/GUIWindow.cpp @@ -12,7 +12,6 @@ using namespace std; GUIWindowProxy::GUIWindowProxy(GUIWindow *owner, LuaBind::MemberRef script) { - } void GUIWindowProxy::OnGUI(LuaBind::State& state) @@ -24,13 +23,41 @@ void GUIWindowProxy::OnGUI(LuaBind::State& state) invoker.Invoke(0); } -void GUIWindowProxy::DoGUI() +void GUIWindowProxy::OnFocus(LuaBind::State& state) { - LuaBind::State state = owner->GetVM()->GetCurThread(); + LuaBind::MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "OnFocus"; + invoker.AddMember(script); + invoker.Invoke(0); +} +void GUIWindowProxy::DoGUI(LuaBind::State& state) +{ + OnGUI(state); +} +void GUIWindowProxy::DoClean(LuaBind::State& state) +{ - OnGUI(state); +} + +void GUIWindowProxy::Start(LuaBind::State& state) +{ + LuaBind::MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "Start"; + invoker.AddMember(script); + invoker.Invoke(0); +} + +void GUIWindowProxy::Destroy(LuaBind::State& state) +{ + LuaBind::MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "Destroy"; + invoker.AddMember(script); + invoker.Invoke(0); } //------------------------------------------------------------------------------------ @@ -232,8 +259,6 @@ void GUIWindow::RepaintAll() { } -//////////////////////////////////////////////////////////// - GUIWindow::GUIWindow(LuaBind::VM* vm, std::string name) : LuaBind::NativeClass(vm) { @@ -292,19 +317,15 @@ void GUIWindow::ProcessEventMessages(UINT message, WPARAM wParam, LPARAM lParam) LuaBind::State state = GetVM()->GetCurThread(); SCRIPT_GLOBAL.setCurrentEvent.AddTable(state, ie); - SCRIPT_GLOBAL.setCurrentEvent.Invoke(state, 0); + SCRIPT_GLOBAL.setCurrentEvent.Invoke(state); - SCRIPT_GLOBAL.guiBeginOnGUI.Invoke(state, 0); + SCRIPT_GLOBAL.guiBeginOnGUI.Invoke(state); SetAsRenderContext(); - LuaBind::MemberInvoker invoker = LuaBind::MemberInvoker(state, this); - invoker.member = m_Script; - invoker.method = "OnGUI"; - invoker.AddMember(m_Script); - invoker.Invoke(0); + m_Script.DoGUI(state); - SCRIPT_GLOBAL.guiEndOnGUI.Invoke(state, 0); + SCRIPT_GLOBAL.guiEndOnGUI.Invoke(state); } bool GUIWindow::SetRenderContext() @@ -371,7 +392,8 @@ void GUIWindow::DoPaint() void GUIWindow::OnFocus() { - InvokeLuaCallback(m_Script, "OnFocus"); + LuaBind::State state = GetVM()->GetCurThread(); + m_Script.OnFocus(state); } void GUIWindow::OnLostFocus() @@ -380,11 +402,8 @@ void GUIWindow::OnLostFocus() void GUIWindow::OnPaint() { - LuaBind::MemberInvoker invoker = MemberInvoker(GetVM()->GetCurThread(), this); - invoker.member = m_Script; - invoker.method = "OnGUI"; - invoker.AddMember(m_Script); - invoker.Invoke(0); + LuaBind::State state = GetVM()->GetCurThread(); + m_Script.OnGUI(state); } void GUIWindow::SetPosition(Rect position) diff --git a/Editor/GUI/GUIWindow.h b/Editor/GUI/GUIWindow.h index bbf2687..ed79f26 100644 --- a/Editor/GUI/GUIWindow.h +++ b/Editor/GUI/GUIWindow.h @@ -25,11 +25,17 @@ public: GUIWindowProxy() {} GUIWindowProxy(GUIWindow *owner, LuaBind::MemberRef script); - void DoGUI(); - void DoClean(); + void DoGUI(LuaBind::State& state); + void DoClean(LuaBind::State& state); -private: - void OnGUI(LuaBind::State& state); + //------------------------------------------------------ + // callbacks + //------------------------------------------------------ + + void Start(LuaBind::State& state); + void Destroy(LuaBind::State& state); + void OnGUI(LuaBind::State& state); + void OnFocus(LuaBind::State& state); }; @@ -65,8 +71,7 @@ private: std::string m_Name; - LuaBind::MemberRef m_Script; - GUIWindowProxy m_Instance; + GUIWindowProxy m_Script; BOOL m_MouseTracking; DWORD m_MouseHoverTime; diff --git a/Editor/Scripting/Window/GUIWindow.bind.cpp b/Editor/Scripting/Window/GUIWindow.bind.cpp index 7fc0d4d..5a61592 100644 --- a/Editor/Scripting/Window/GUIWindow.bind.cpp +++ b/Editor/Scripting/Window/GUIWindow.bind.cpp @@ -4,11 +4,11 @@ LUA_BIND_REGISTRY(GUIWindow) { LUA_BIND_REGISTER_METHODS(state, - { "DoPaint", _DoPaint }, - { "Focus", _Focus }, + { "New", _New }, + { "DoPaint", _DoPaint }, + { "Focus", _Focus }, { "SetContainerWindow", _SetContainerWindow }, - { "SetPosition", _SetPosition }, - { "New", _New } + { "SetPosition", _SetPosition } ); } @@ -16,7 +16,7 @@ LUA_BIND_POSTPROCESS(GUIWindow) { } -// GUIWindow.New([script]) +// GUIWindow.New(script) LUA_BIND_IMPL_METHOD(GUIWindow, _New) { LUA_BIND_STATE(L, GUIWindow); @@ -30,9 +30,10 @@ LUA_BIND_IMPL_METHOD(GUIWindow, _New) GUIWindow* wnd = new GUIWindow(state.GetVM()); - wnd->SetMemberRef(state, wnd->m_Script, -1); - wnd->m_Instance.owner = wnd; - wnd->m_Instance.script = wnd->m_Script; + LuaBind::MemberRef script; + wnd->SetMemberRef(state, script, -1); + wnd->m_Script.owner = wnd; + wnd->m_Script.script = script; wnd->PushUserdata(state); diff --git a/Runtime/Lua/LuaBind/LuaBindInvoker.h b/Runtime/Lua/LuaBind/LuaBindInvoker.h index 45a4e63..5f24b15 100644 --- a/Runtime/Lua/LuaBind/LuaBindInvoker.h +++ b/Runtime/Lua/LuaBind/LuaBindInvoker.h @@ -26,7 +26,7 @@ namespace LuaBind ++argc; } - virtual void Invoke(int nReturns); + virtual void Invoke(int nReturns = 0); protected: State state; @@ -60,7 +60,7 @@ namespace LuaBind ++argc; } - void Invoke(int nReturns); + void Invoke(int nReturns = 0); private: LuaBind::Object* owner; diff --git a/Runtime/Lua/LuaBind/LuaBindLFunction.h b/Runtime/Lua/LuaBind/LuaBindLFunction.h index 5c4346b..0d4a8a8 100644 --- a/Runtime/Lua/LuaBind/LuaBindLFunction.h +++ b/Runtime/Lua/LuaBind/LuaBindLFunction.h @@ -22,7 +22,7 @@ namespace LuaBind ++argc; } - void Invoke(State& state, int nReturns); + void Invoke(State& state, int nReturns = 0); private: int argc; -- cgit v1.1-26-g67d0