From 1eed13fcd0f7cc6f623609a5df5961d8f1168bab Mon Sep 17 00:00:00 2001 From: EvilFactory Date: Wed, 5 Oct 2022 20:55:15 -0300 Subject: [PATCH] added support for None and Some and added some missing types from last update --- .../Lua/DefaultLib/LibShared.lua | 4 + .../Lua/DefaultRegister/RegisterShared.lua | 15 +++- .../LuaCs/Lua/LuaClasses/LuaTypes.cs | 9 +- .../SharedSource/LuaCs/Lua/LuaConverters.cs | 84 +++++++++++++++++-- 4 files changed, 102 insertions(+), 10 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua b/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua index 237256602..408b7a987 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultLib/LibShared.lua @@ -16,6 +16,7 @@ defaultLib["Int64"] = CreateStatic("Barotrauma.LuaInt64", true) defaultLib["UInt64"] = CreateStatic("Barotrauma.LuaUInt64", true) defaultLib["Single"] = CreateStatic("Barotrauma.LuaSingle", true) defaultLib["Double"] = CreateStatic("Barotrauma.LuaDouble", true) +defaultLib["none"] = CreateStatic("Barotrauma.LuaNone", true)() -- Backward compatibility defaultLib["Float"] = CreateStatic("Barotrauma.LuaSingle", true) @@ -112,6 +113,9 @@ defaultLib["XDocument"] = CreateStatic("System.Xml.Linq.XDocument", true) defaultLib["XNode"] = CreateStatic("System.Xml.Linq.XNode", true) defaultLib["SoundsFile"] = CreateStatic("Barotrauma.SoundsFile", true) +defaultLib["ContentPackageId"] = CreateStatic("Barotrauma.ContentPackageId") +defaultLib["IPAddress"] = CreateStatic("System.Net.IPAddress") +defaultLib["Address"] = CreateStatic("Barotrauma.Networking.Address") defaultLib["Explosion"] = CreateStatic("Barotrauma.Explosion", true) diff --git a/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua b/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua index 8b19176f7..73463e022 100644 --- a/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua +++ b/Barotrauma/BarotraumaShared/Lua/DefaultRegister/RegisterShared.lua @@ -14,6 +14,7 @@ RegisterBarotrauma("LuaInt64") RegisterBarotrauma("LuaUInt64") RegisterBarotrauma("LuaSingle") RegisterBarotrauma("LuaDouble") +RegisterBarotrauma("LuaNone") RegisterBarotrauma("GameMain") RegisterBarotrauma("Networking.BanList") @@ -77,10 +78,20 @@ RegisterBarotrauma("FabricationRecipe+RequiredItemByIdentifier") RegisterBarotrauma("FabricationRecipe+RequiredItemByTag") RegisterBarotrauma("Submarine") -RegisterBarotrauma("INetSerializableStruct") RegisterBarotrauma("Networking.AccountInfo") RegisterBarotrauma("Networking.AccountId") RegisterBarotrauma("Networking.SteamId") +RegisterBarotrauma("Networking.Address") +RegisterBarotrauma("Networking.UnknownAddress") +RegisterBarotrauma("Networking.SteamP2PAddress") +RegisterBarotrauma("Networking.PipeAddress") +RegisterBarotrauma("Networking.LidgrenAddress") +RegisterBarotrauma("Networking.Endpoint") +RegisterBarotrauma("Networking.SteamP2PEndpoint") +RegisterBarotrauma("Networking.PipeEndpoint") +RegisterBarotrauma("Networking.LidgrenEndpoint") + +RegisterBarotrauma("INetSerializableStruct") RegisterBarotrauma("Networking.Client") RegisterBarotrauma("Networking.TempClient") RegisterBarotrauma("Networking.NetworkConnection") @@ -131,6 +142,8 @@ RegisterBarotrauma("RegularPackage") RegisterBarotrauma("CorePackage") RegisterBarotrauma("ContentXElement") RegisterBarotrauma("ContentPath") +RegisterBarotrauma("ContentPackageId") +RegisterBarotrauma("SteamWorkshopId") RegisterBarotrauma("SoundsFile") diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaTypes.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaTypes.cs index 7ba5e796f..f0350773c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaTypes.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaTypes.cs @@ -1,7 +1,12 @@ -using System; +using System; namespace Barotrauma { + public struct LuaNone + { + + } + public struct LuaSByte { private readonly sbyte value; @@ -181,4 +186,4 @@ namespace Barotrauma public static implicit operator double(LuaDouble luaValue) => luaValue.value; } -} \ No newline at end of file +} diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs index 43bff1368..7a1f65847 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaConverters.cs @@ -3,6 +3,7 @@ using MoonSharp.Interpreter; using Microsoft.Xna.Framework; using FarseerPhysics.Dynamics; using LuaCsCompatPatchFunc = Barotrauma.LuaCsPatch; +using Barotrauma.Networking; namespace Barotrauma { @@ -187,12 +188,57 @@ namespace Barotrauma ? (double)v : throw new ScriptRuntimeException("use Double(value) to pass primitive type 'double' to C#")); - RegisterOption(); - RegisterOption(); - RegisterOption(); + RegisterOption(DataType.UserData); + RegisterOption(DataType.UserData); + RegisterOption(DataType.UserData); + RegisterOption(DataType.UserData); + RegisterOption(DataType.UserData); + RegisterOption(DataType.UserData); + + RegisterOption(DataType.Number); + + RegisterEither(); } - private void RegisterOption() + private void RegisterEither() + { + DynValue convertEitherIntoDynValue(Either either) + { + if (either.TryGet(out T1 value1)) + { + return UserData.Create(value1); + } + + if (either.TryGet(out T2 value2)) + { + return UserData.Create(value2); + } + + return null; + } + + Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion(typeof(EitherT), (Script v, object obj) => + { + if (obj is EitherT either) + { + return convertEitherIntoDynValue(either); + } + + return null; + }); + + Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion(typeof(EitherU), (Script v, object obj) => + { + if (obj is EitherU either) + { + return convertEitherIntoDynValue(either); + } + + return null; + }); + } + + private void RegisterOption(DataType dataType) { Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion(typeof(Option), (Script v, object obj) => { @@ -200,16 +246,40 @@ namespace Barotrauma { if (option.TryUnwrap(out T outValue)) { - return UserData.Create(outValue); + return outValue == null ? DynValue.Nil : UserData.Create(outValue); } } return null; }); - Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.UserData, typeof(Option), v => + Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion(typeof(None), (Script v, object obj) => { - return Option.Some(v.ToObject()); + return UserData.Create(default(LuaNone)); + }); + + Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion(typeof(Some), (Script v, object obj) => + { + if (obj is Some some) + { + return some.Value == null ? DynValue.Nil : UserData.Create(some.Value); + } + + return null; + }); + + Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(dataType, typeof(Option), v => + { + if (v.UserData.Object is LuaNone) + { + return Option.None(); + } + else + { + Option.Some(v.ToObject()); + } + + return null; }); }