diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs index 276487f54..3799ca5af 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs @@ -9,6 +9,8 @@ using System.Threading.Tasks; using Barotrauma.Items.Components; using System.Diagnostics; using System.Linq; +using MoonSharp.Interpreter.Interop; +using System.Reflection; namespace Barotrauma { @@ -174,6 +176,37 @@ namespace Barotrauma return value * 2; } + // messy solution + private object HandleCall(object arg1, ScriptExecutionContext arg2, CallbackArguments arg3) + { + var what = arg3.RawGet(0, true); + + var code = "return " + what.UserData.Descriptor.Type.Name + ".__new("; + + var tbl = new Table(lua); + tbl[what.UserData.Descriptor.Type.Name] = what; + + for(var i=1; i < arg3.Count; i++) + { + if (i == arg3.Count - 1) + code = code + "arg" + i; + else + code = code + "arg" + i + ","; + + tbl["arg" + i] = arg3.RawGet(i, true); + } + + code = code + ")"; + + return lua.DoString(code, tbl); + } + + private void AddCallMetaMember(IUserDataDescriptor IUDD) + { + var descriptor = (StandardUserDataDescriptor)IUDD; + descriptor.AddMetaMember("__call", new ObjectCallbackMemberDescriptor("__call", HandleCall)); + } + public void Stop() { @@ -198,7 +231,6 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); - UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); @@ -220,9 +252,6 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); - UserData.RegisterType(); - UserData.RegisterType(); - UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); @@ -239,7 +268,6 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); - UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); @@ -288,6 +316,13 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); + AddCallMetaMember(UserData.RegisterType()); + AddCallMetaMember(UserData.RegisterType()); + AddCallMetaMember(UserData.RegisterType()); + AddCallMetaMember(UserData.RegisterType()); + AddCallMetaMember(UserData.RegisterType()); + + lua = new Script(CoreModules.Preset_SoftSandbox); lua.Options.DebugPrint = PrintMessage; @@ -337,10 +372,7 @@ namespace Barotrauma lua.Globals["CharacterTeamType"] = UserData.CreateStatic(); lua.Globals["Vector2"] = UserData.CreateStatic(); lua.Globals["Vector3"] = UserData.CreateStatic(); - lua.Globals["Vector4"] = UserData.CreateStatic(); - lua.Globals["CreateVector2"] = (Func)CreateVector2; - lua.Globals["CreateVector3"] = (Func)CreateVector3; - lua.Globals["CreateVector4"] = (Func)CreateVector4; + lua.Globals["Vector4"] = UserData.CreateStatic(); lua.Globals["ChatMessage"] = UserData.CreateStatic(); lua.Globals["Hull"] = UserData.CreateStatic(); lua.Globals["InvSlotType"] = UserData.CreateStatic(); @@ -352,6 +384,11 @@ namespace Barotrauma lua.Globals["ClientPacketHeader"] = UserData.CreateStatic(); lua.Globals["ServerPacketHeader"] = UserData.CreateStatic(); + // obsolete + lua.Globals["CreateVector2"] = (Func)CreateVector2; + lua.Globals["CreateVector3"] = (Func)CreateVector3; + lua.Globals["CreateVector4"] = (Func)CreateVector4; + bool isServer = true; #if SERVER @@ -385,7 +422,6 @@ namespace Barotrauma } } - public LuaSetup() { diff --git a/docs/lua/CharacterInfo.lua b/docs/lua/CharacterInfo.lua index e69638695..070ecef76 100644 --- a/docs/lua/CharacterInfo.lua +++ b/docs/lua/CharacterInfo.lua @@ -17,4 +17,4 @@ local CharacterInfo = {} -- local vsauce = CharacterInfo.__new("human", "VSAUCE HERE") -- local character = Character.Create(vsauce, Vector2.__new(0, 0), "some random characters") -- print(character) -function CharacterInfo.__new(speciesName, name, jobPrefab, ragdollFileName, variant, randSync, npcIdentifier) end \ No newline at end of file +function CharacterInfo(speciesName, name, jobPrefab, ragdollFileName, variant, randSync, npcIdentifier) end \ No newline at end of file diff --git a/docs/lua/Signal.lua b/docs/lua/Signal.lua index 3d02fa9bd..5d47be959 100644 --- a/docs/lua/Signal.lua +++ b/docs/lua/Signal.lua @@ -13,7 +13,7 @@ Signal = {} --- Instantiates a new Signal. -- @treturn Signal -- @realm shared -function Signal.__new(stringValue, stepsTaken, characterSender, itemSource, power, strength) end +function Signal(stringValue, stepsTaken, characterSender, itemSource, power, strength) end --- -- value, String value of the signal. diff --git a/docs/lua/Vectors.lua b/docs/lua/Vectors.lua index 2d1245ae1..75978b64d 100644 --- a/docs/lua/Vectors.lua +++ b/docs/lua/Vectors.lua @@ -8,7 +8,6 @@ These are the XNA Vectors, you can find all the functions and fields here:
XNA Vector4
Access them via Vector2.\*, Vector3.\*, Vector4.\*
-CreateVector2, CreateVector3, CreateVector4 are globals. ]] -- @code Vectors @@ -19,14 +18,14 @@ local Vector4 = {} --- Create Vector2 -- @treturn Vector2 -- @realm shared -function Vector2.__new(x, y) end +function Vector2(X, Y) end --- Create Vector3 -- @treturn Vector3 -- @realm shared -function Vector3.__new(x, y, z) end +function Vector3(X, Y, Z) end --- Create Vector4 -- @treturn Vector4 -- @realm shared -function Vector4.__new(x, y, z, w) end \ No newline at end of file +function Vector4(X, Y, Z, W) end \ No newline at end of file