From 36f42b74630d4bca2d1d276d57c4c967d0290380 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 11 Nov 2021 15:05:40 +0800 Subject: *misc --- .../Libraries/GameLab/Events/Event.lua | 8 +++++--- .../Libraries/GameLab/GlobalTable.lua | 15 +++++++++++++++ Data/DefaultContent/Libraries/GameLab/init.lua | 2 ++ Data/Libraries/GameLab/Editor/GUI/GUIWindow.lua | 4 +--- Data/boot.lua | 1 + Editor/GUI/GUIWindow.cpp | 10 +++++----- Editor/Scripting/EditorScriptingManager.cpp | 6 ++++++ Editor/Scripting/EditorScriptingManager.h | 16 ++++++++++++++++ Projects/VisualStudio/Editor/Editor.vcxproj | 8 +++++--- .../VisualStudio/Editor/Editor.vcxproj.filters | 12 +++++++++--- Runtime/Lua/LuaBind/LuaBindLFunction.cpp | 10 +++++++--- Runtime/Scripting/RuntimeScriptGlobals.cpp | 10 ++++++++++ Runtime/Scripting/RuntimeScriptGlobals.h | 21 +++++++++++++++++++++ Runtime/Scripting/RuntimeScripting.h | 3 +++ Runtime/Scripting/RuntimeScriptingManager.h | 22 ---------------------- Runtime/Scripting/ScriptGlobals.h | 10 ---------- Runtime/Scripting/ScriptingManager.cpp | 14 -------------- Runtime/Utilities/UtilMacros.h | 2 +- 18 files changed, 107 insertions(+), 67 deletions(-) create mode 100644 Data/DefaultContent/Libraries/GameLab/GlobalTable.lua create mode 100644 Editor/Scripting/EditorScriptingManager.cpp create mode 100644 Editor/Scripting/EditorScriptingManager.h create mode 100644 Runtime/Scripting/RuntimeScriptGlobals.cpp create mode 100644 Runtime/Scripting/RuntimeScriptGlobals.h create mode 100644 Runtime/Scripting/RuntimeScripting.h delete mode 100644 Runtime/Scripting/RuntimeScriptingManager.h delete mode 100644 Runtime/Scripting/ScriptGlobals.h delete mode 100644 Runtime/Scripting/ScriptingManager.cpp diff --git a/Data/DefaultContent/Libraries/GameLab/Events/Event.lua b/Data/DefaultContent/Libraries/GameLab/Events/Event.lua index 214d61e..f2940bc 100644 --- a/Data/DefaultContent/Libraries/GameLab/Events/Event.lua +++ b/Data/DefaultContent/Libraries/GameLab/Events/Event.lua @@ -1,7 +1,9 @@ -local Event = {} -GameLab.Events.Event = Event +local Debug = GameLab.Debug +local inspect = require("inspect") -Event.current = {} +local Event = GameLab.GlobalTable("GameLab.Events.Event") + +Event.current = nil Event.SetCurrentEvent = function(evt) Event.current = evt diff --git a/Data/DefaultContent/Libraries/GameLab/GlobalTable.lua b/Data/DefaultContent/Libraries/GameLab/GlobalTable.lua new file mode 100644 index 0000000..10e3811 --- /dev/null +++ b/Data/DefaultContent/Libraries/GameLab/GlobalTable.lua @@ -0,0 +1,15 @@ +local GlobalTable = function(tbName) + local tb = {} + + local shortName = string.match(tbName, "%.*(%w+)$") + local t = _G + for pkg in string.gmatch(tbName, "%.*(%w+)%.") do + t[pkg] = t[pkg] or {} + t = t[pkg] + end + t[shortName] = tb + + return tb +end + +return GlobalTable \ No newline at end of file diff --git a/Data/DefaultContent/Libraries/GameLab/init.lua b/Data/DefaultContent/Libraries/GameLab/init.lua index 8f61b05..df0e19a 100644 --- a/Data/DefaultContent/Libraries/GameLab/init.lua +++ b/Data/DefaultContent/Libraries/GameLab/init.lua @@ -29,4 +29,6 @@ GameLab.GlobalClass = require("GameLab.GlobalClass") GameLab.Enum = require("GameLab.Enum") GameLab.GlobalEnum = require("GameLab.GlobalEnum") +GameLab.GlobalTable = require("GameLab.GlobalTable") + return GameLab \ No newline at end of file diff --git a/Data/Libraries/GameLab/Editor/GUI/GUIWindow.lua b/Data/Libraries/GameLab/Editor/GUI/GUIWindow.lua index 6fc2628..8165faa 100644 --- a/Data/Libraries/GameLab/Editor/GUI/GUIWindow.lua +++ b/Data/Libraries/GameLab/Editor/GUI/GUIWindow.lua @@ -44,10 +44,8 @@ end GUIWindow.OnGUI = function(self) self:ClearBackground() -end -GUIWindow.OnEvent = function(self, evt) - Debug.Log("mousePos=" .. evt.mousePosition.x .. "," .. evt.mousePosition.y) + end GUIWindow.GetContainerWindow = function(self) diff --git a/Data/boot.lua b/Data/boot.lua index 7b9dda0..6f583bc 100644 --- a/Data/boot.lua +++ b/Data/boot.lua @@ -24,6 +24,7 @@ end -- load gamelab modules require "GameLab" +require "GameLab.Events" require "GameLab.Engine" require "GameLab.Engine.Math" require "GameLab.Engine.Rendering" diff --git a/Editor/GUI/GUIWindow.cpp b/Editor/GUI/GUIWindow.cpp index 94dfe33..a4049c8 100644 --- a/Editor/GUI/GUIWindow.cpp +++ b/Editor/GUI/GUIWindow.cpp @@ -5,7 +5,7 @@ #include "Editor/Win/Win.h" #include "Runtime/Math/Math.h" #include "Runtime/Events/InputEvent.h" -#include "Runtime/Scripting/ScriptingManager.h" +#include "Editor/Scripting/EditorScriptingManager.h" using namespace LuaBind; @@ -262,15 +262,15 @@ void GUIWindow::ProcessEventMessages(UINT message, WPARAM wParam, LPARAM lParam) { InputEvent ie(message, wParam, lParam, m_Handle); - SCRIPT_GLOBAL.setCurrentEvent.Invoke(0); - LuaBind::State state = GetVM()->GetCurThread(); + SCRIPT_GLOBAL.setCurrentEvent.AddTable(state, ie); + SCRIPT_GLOBAL.setCurrentEvent.Invoke(state, 0); + LuaBind::MemberInvoker invoker = LuaBind::MemberInvoker(state, this); invoker.member = m_Script; - invoker.method = "OnEvent"; + invoker.method = "OnGUI"; invoker.AddMember(m_Script); - invoker.AddTable(ie); invoker.Invoke(0); } diff --git a/Editor/Scripting/EditorScriptingManager.cpp b/Editor/Scripting/EditorScriptingManager.cpp new file mode 100644 index 0000000..57855d9 --- /dev/null +++ b/Editor/Scripting/EditorScriptingManager.cpp @@ -0,0 +1,6 @@ +#include "EditorScriptingManager.h" + +EditorScriptingManager::EditorScriptingManager() +{ + Scripting::FillRuntimeScriptGlobals(m_Globals); +} diff --git a/Editor/Scripting/EditorScriptingManager.h b/Editor/Scripting/EditorScriptingManager.h new file mode 100644 index 0000000..6d7a12b --- /dev/null +++ b/Editor/Scripting/EditorScriptingManager.h @@ -0,0 +1,16 @@ +#pragma once +#include "Runtime/Utilities/Singleton.h" +#include "Runtime/Scripting/RuntimeScripting.h" +#include "Runtime/Utilities/UtilMacros.h" + +class EditorScriptingManager : public Singleton +{ +public: + EditorScriptingManager(); + + GET(RuntimeScriptGlobals&, Globals, m_Globals); + +private: + RuntimeScriptGlobals m_Globals; + +}; diff --git a/Projects/VisualStudio/Editor/Editor.vcxproj b/Projects/VisualStudio/Editor/Editor.vcxproj index 6994ee6..aaaf748 100644 --- a/Projects/VisualStudio/Editor/Editor.vcxproj +++ b/Projects/VisualStudio/Editor/Editor.vcxproj @@ -170,6 +170,7 @@ + @@ -239,7 +240,7 @@ - + @@ -263,6 +264,7 @@ + @@ -339,9 +341,9 @@ - + + - diff --git a/Projects/VisualStudio/Editor/Editor.vcxproj.filters b/Projects/VisualStudio/Editor/Editor.vcxproj.filters index 7b7e549..fafbf97 100644 --- a/Projects/VisualStudio/Editor/Editor.vcxproj.filters +++ b/Projects/VisualStudio/Editor/Editor.vcxproj.filters @@ -418,9 +418,12 @@ Runtime\Events - + Runtime\Scripting + + Editor\Scripting + @@ -750,12 +753,15 @@ Runtime\Events - + Runtime\Scripting - + Runtime\Scripting + + Editor\Scripting + diff --git a/Runtime/Lua/LuaBind/LuaBindLFunction.cpp b/Runtime/Lua/LuaBind/LuaBindLFunction.cpp index b468897..1e7b75f 100644 --- a/Runtime/Lua/LuaBind/LuaBindLFunction.cpp +++ b/Runtime/Lua/LuaBind/LuaBindLFunction.cpp @@ -6,6 +6,7 @@ namespace LuaBind LuaFunction::LuaFunction(const char* func) { + argc = 0; method = func; } @@ -54,10 +55,13 @@ namespace LuaBind { if (state.GetGlobalField(method)) { - int funcIdx = -1 - argc; - lua_replace(state, funcIdx); - state.Call(argc, nReturns); + if (state.IsType(-1, LUA_TFUNCTION)) { + int funcIdx = -1 - argc; + lua_insert(state, funcIdx); + state.Call(argc, nReturns); + } } + argc = 0; } } \ No newline at end of file diff --git a/Runtime/Scripting/RuntimeScriptGlobals.cpp b/Runtime/Scripting/RuntimeScriptGlobals.cpp new file mode 100644 index 0000000..5f140a1 --- /dev/null +++ b/Runtime/Scripting/RuntimeScriptGlobals.cpp @@ -0,0 +1,10 @@ +#include "RuntimeScriptGlobals.h" + +namespace Scripting +{ + + void FillRuntimeScriptGlobals(RuntimeScriptGlobals& globals) + { + globals.setCurrentEvent = "GameLab.Events.Event.SetCurrentEvent"; + } +} \ No newline at end of file diff --git a/Runtime/Scripting/RuntimeScriptGlobals.h b/Runtime/Scripting/RuntimeScriptGlobals.h new file mode 100644 index 0000000..76448a9 --- /dev/null +++ b/Runtime/Scripting/RuntimeScriptGlobals.h @@ -0,0 +1,21 @@ +#pragma once +#include "Runtime/Lua/LuaHelper.h" + +#define DECL_LUA_FUNC(name) LuaBind::LuaFunction name + +#ifdef GAMELAB_EDITOR +#define SCRIPT_GLOBAL EditorScriptingManager::Instance()->GetGlobals() +#elif defined(GAMELAB_RUNNER) +#define SCRIPT_GLOBAL +#endif + +// 全局方法和变量 +struct RuntimeScriptGlobals +{ + DECL_LUA_FUNC(setCurrentEvent); +}; + +namespace Scripting +{ + void FillRuntimeScriptGlobals(RuntimeScriptGlobals& globals); +} \ No newline at end of file diff --git a/Runtime/Scripting/RuntimeScripting.h b/Runtime/Scripting/RuntimeScripting.h new file mode 100644 index 0000000..4134dcc --- /dev/null +++ b/Runtime/Scripting/RuntimeScripting.h @@ -0,0 +1,3 @@ +#pragma once + +#include "RuntimeScriptGlobals.h" diff --git a/Runtime/Scripting/RuntimeScriptingManager.h b/Runtime/Scripting/RuntimeScriptingManager.h deleted file mode 100644 index b8db959..0000000 --- a/Runtime/Scripting/RuntimeScriptingManager.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include "Runtime/Utilities/Singleton.h" -#include "ScriptGlobals.h" -#include "Runtime/Utilities/UtilMacros.h" - -class RuntimeScriptingManager : public Singleton -{ -public: - RuntimeScriptingManager(); - - GET(const ScriptGlobals&, Globals, m_Globals); - -private: - void FillGloabls(); - - ScriptGlobals m_Globals; // lua侧的全局方法 - -}; - -#define SCRIPT_GLOBAL RuntimeScriptingManager::Instance()->GetGlobals() - - diff --git a/Runtime/Scripting/ScriptGlobals.h b/Runtime/Scripting/ScriptGlobals.h deleted file mode 100644 index af396bd..0000000 --- a/Runtime/Scripting/ScriptGlobals.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once -#include "Runtime/Lua/LuaHelper.h" - -#define DECL_LUA_FUNC(name) LuaBind::LuaFunction name - -// 全局方法和变量 -struct ScriptGlobals -{ - DECL_LUA_FUNC(setCurrentEvent); -}; \ No newline at end of file diff --git a/Runtime/Scripting/ScriptingManager.cpp b/Runtime/Scripting/ScriptingManager.cpp deleted file mode 100644 index 5b26262..0000000 --- a/Runtime/Scripting/ScriptingManager.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "RuntimeScriptingManager.h" - -RuntimeScriptingManager::RuntimeScriptingManager() -{ - - - -} - -void RuntimeScriptingManager::FillGloabls() -{ - m_Globals.setCurrentEvent = "GameLab.Events.Event.SetCurrentEvent"; - -} \ No newline at end of file diff --git a/Runtime/Utilities/UtilMacros.h b/Runtime/Utilities/UtilMacros.h index f48be5c..29bb7b0 100644 --- a/Runtime/Utilities/UtilMacros.h +++ b/Runtime/Utilities/UtilMacros.h @@ -6,7 +6,7 @@ inline TYPE Get##PROP () {return VAR; } #define GET(TYPE, PROP, VAR) \ - inline TYPE Get##PROP () const {return VAR; } + inline TYPE Get##PROP () {return VAR; } #define SET(TYPE, PROP, VAR) \ inline void Set##PROP (TYPE val) { VAR = val; } \ -- cgit v1.1-26-g67d0