Remove LuaResult
This commit is contained in:
@@ -367,13 +367,11 @@ namespace Barotrauma
|
||||
|
||||
public void AddCommand(string name, string help, LuaCsAction onExecute, LuaCsFunc getValidArgs = null, bool isCheat = false)
|
||||
{
|
||||
var cmd = new DebugConsole.Command(name, help, (string[] arg1) => { onExecute(new object[] { arg1 }); },
|
||||
var cmd = new DebugConsole.Command(name, help, (string[] arg1) => onExecute(new object[] { arg1 }),
|
||||
() =>
|
||||
{
|
||||
if (getValidArgs == null) { return null; }
|
||||
var obj = getValidArgs();
|
||||
if (obj is LuaResult lr) { return lr.DynValue().ToObject<string[][]>(); }
|
||||
return (string[][])obj;
|
||||
if (getValidArgs == null) return null;
|
||||
return getValidArgs().ToObject<string[][]>();
|
||||
}, isCheat);
|
||||
|
||||
luaAddedCommand.Add(cmd);
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using MoonSharp.Interpreter;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Barotrauma.Networking;
|
||||
using Barotrauma.Items.Components;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using FarseerPhysics.Dynamics;
|
||||
using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using MoonSharp.Interpreter.Interop;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
public class LuaResult
|
||||
{
|
||||
object result;
|
||||
public LuaResult(object arg)
|
||||
{
|
||||
result = arg;
|
||||
}
|
||||
|
||||
public bool IsNull()
|
||||
{
|
||||
if (result == null)
|
||||
return true;
|
||||
|
||||
if (result is DynValue dynValue)
|
||||
return dynValue.IsNil();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Bool()
|
||||
{
|
||||
if (result is DynValue dynValue)
|
||||
{
|
||||
return dynValue.CastToBool();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public float Float()
|
||||
{
|
||||
if (result is DynValue dynValue)
|
||||
{
|
||||
var num = dynValue.CastToNumber();
|
||||
if (num == null) { return 0f; }
|
||||
return (float)num.Value;
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public double Double()
|
||||
{
|
||||
if (result is DynValue dynValue)
|
||||
{
|
||||
var num = dynValue.CastToNumber();
|
||||
if (num == null) { return 0f; }
|
||||
return num.Value;
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public string String()
|
||||
{
|
||||
if (result is DynValue dynValue)
|
||||
{
|
||||
var str = dynValue.CastToString();
|
||||
if (str == null) { return ""; }
|
||||
return str;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public object Object()
|
||||
{
|
||||
if (result is DynValue dynValue)
|
||||
{
|
||||
return dynValue.ToObject();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public DynValue DynValue()
|
||||
{
|
||||
if (result is DynValue dynValue)
|
||||
{
|
||||
return dynValue;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,42 +21,50 @@ namespace Barotrauma
|
||||
RegisterFunc<Fixture, Vector2, Vector2, float, float>();
|
||||
RegisterFunc<AIObjective, bool>();
|
||||
|
||||
Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(LuaCsAction), v => (LuaCsAction)( args => GameMain.LuaCs.CallLuaFunction(v.Function, args) ));
|
||||
Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(LuaCsFunc), v => (LuaCsFunc)( args => new LuaResult(GameMain.LuaCs.CallLuaFunction(v.Function, args)) ));
|
||||
Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(LuaCsPatch), v => (LuaCsPatch)( (self, args) => new LuaResult(GameMain.LuaCs.CallLuaFunction(v.Function, self, args)) ));
|
||||
Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion(typeof(LuaResult), (Script s, object v) => (v as LuaResult).DynValue());
|
||||
Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(
|
||||
DataType.Function,
|
||||
typeof(LuaCsAction),
|
||||
v => (LuaCsAction)(args => GameMain.LuaCs.CallLuaFunction(v.Function, args)));
|
||||
Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(
|
||||
DataType.Function,
|
||||
typeof(LuaCsFunc),
|
||||
v => (LuaCsFunc)(args => GameMain.LuaCs.CallLuaFunction(v.Function, args)));
|
||||
Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(
|
||||
DataType.Function,
|
||||
typeof(LuaCsPatch),
|
||||
v => (LuaCsPatch)((self, args) => GameMain.LuaCs.CallLuaFunction(v.Function, self, args)));
|
||||
|
||||
#if CLIENT
|
||||
RegisterAction<float>();
|
||||
RegisterAction<Microsoft.Xna.Framework.Graphics.SpriteBatch, float>();
|
||||
|
||||
{
|
||||
object Call(object function, params object[] arguments) => GameMain.LuaCs.CallLuaFunction(function, arguments);
|
||||
DynValue Call(object function, params object[] arguments) => GameMain.LuaCs.CallLuaFunction(function, arguments);
|
||||
void RegisterHandler<T>(Func<Closure, T> converter)
|
||||
=> Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(T), v => converter(v.Function));
|
||||
|
||||
RegisterHandler(f => (GUIComponent.SecondaryButtonDownHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
|
||||
RegisterHandler(f => (GUIButton.OnClickedHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
RegisterHandler(f => (GUIButton.OnButtonDownHandler)(
|
||||
() => new LuaResult(Call(f)).Bool()));
|
||||
() => Call(f).CastToBool()));
|
||||
RegisterHandler(f => (GUIButton.OnPressedHandler)(
|
||||
() => new LuaResult(Call(f)).Bool()));
|
||||
() => Call(f).CastToBool()));
|
||||
|
||||
RegisterHandler(f => (GUIColorPicker.OnColorSelectedHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
|
||||
RegisterHandler(f => (GUIDropDown.OnSelectedHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
|
||||
RegisterHandler(f => (GUIListBox.OnSelectedHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
RegisterHandler(f => (GUIListBox.OnRearrangedHandler)(
|
||||
(a1, a2) => Call(f, a1, a2)));
|
||||
RegisterHandler(f => (GUIListBox.CheckSelectedHandler)(
|
||||
() => new LuaResult(Call(f)).Object()));
|
||||
() => Call(f).ToObject()));
|
||||
|
||||
RegisterHandler(f => (GUINumberInput.OnValueEnteredHandler)(
|
||||
(a1) => Call(f, a1)));
|
||||
@@ -64,28 +72,28 @@ namespace Barotrauma
|
||||
(a1) => Call(f, a1)));
|
||||
|
||||
RegisterHandler(f => (GUIProgressBar.ProgressGetterHandler)(
|
||||
() => new LuaResult(Call(f)).Float()));
|
||||
() => (float)(Call(f).CastToNumber() ?? 0)));
|
||||
|
||||
RegisterHandler(f => (GUIRadioButtonGroup.RadioButtonGroupDelegate)(
|
||||
(a1, a2) => Call(f, a1, a2)));
|
||||
|
||||
RegisterHandler(f => (GUIScrollBar.OnMovedHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
RegisterHandler(f => (GUIScrollBar.ScrollConversion)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Float()));
|
||||
(a1, a2) => (float)(Call(f, a1, a2).CastToNumber() ?? 0)));
|
||||
|
||||
RegisterHandler(f => (GUITextBlock.TextGetterHandler)(
|
||||
() => new LuaResult(Call(f, new object[] { })).String()));
|
||||
() => Call(f, new object[0]).CastToString()));
|
||||
|
||||
RegisterHandler(f => (GUITextBox.OnEnterHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
RegisterHandler(f => (GUITextBox.OnTextChangedHandler)(
|
||||
(a1, a2) => new LuaResult(Call(f, a1, a2)).Bool()));
|
||||
(a1, a2) => Call(f, a1, a2).CastToBool()));
|
||||
RegisterHandler(f => (TextBoxEvent)(
|
||||
(a1, a2) => Call(f, a1, a2)));
|
||||
|
||||
RegisterHandler(f => (GUITickBox.OnSelectedHandler)(
|
||||
(a1) => new LuaResult(Call(f, a1)).Bool()));
|
||||
(a1) => Call(f, a1).CastToBool()));
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -13,7 +13,7 @@ using System.Diagnostics;
|
||||
namespace Barotrauma
|
||||
{
|
||||
public delegate void LuaCsAction(params object[] args);
|
||||
public delegate object LuaCsFunc(params object[] args);
|
||||
public delegate DynValue LuaCsFunc(params object[] args);
|
||||
public delegate object LuaCsPatch(object self, Dictionary<string, object> args);
|
||||
|
||||
public partial class LuaCsHook
|
||||
@@ -157,18 +157,18 @@ namespace Barotrauma
|
||||
[MoonSharpHidden]
|
||||
public T Call<T>(string name, params object[] args)
|
||||
{
|
||||
if (GameMain.LuaCs == null) { return default(T); }
|
||||
if (name == null) { throw new ScriptRuntimeException("Hook.Call: name must not be null."); }
|
||||
if (args == null) { args = new object[] { }; }
|
||||
if (GameMain.LuaCs == null) return default; // FIXME: should this throw an exception?
|
||||
if (name == null) throw new ArgumentNullException(name);
|
||||
if (args == null) args = new object[0];
|
||||
|
||||
name = name.ToLower();
|
||||
|
||||
if (!hookFunctions.ContainsKey(name))
|
||||
{
|
||||
return default(T);
|
||||
return default;
|
||||
}
|
||||
|
||||
T lastResult = default(T);
|
||||
T lastResult = default;
|
||||
|
||||
if (!hookFunctions.ContainsKey(name))
|
||||
{
|
||||
@@ -192,30 +192,9 @@ namespace Barotrauma
|
||||
}
|
||||
|
||||
var result = tuple.Item1.func(args);
|
||||
if (result != null)
|
||||
if (result != null && !result.IsNil())
|
||||
{
|
||||
if (typeof(object) != typeof(T))
|
||||
{
|
||||
if (result is LuaResult lRes)
|
||||
{
|
||||
if (!lRes.IsNull()) { lastResult = lRes.DynValue().ToObject<T>(); }
|
||||
}
|
||||
else if (result is T cRes && cRes != null)
|
||||
{
|
||||
lastResult = cRes;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (result is LuaResult lRes)
|
||||
{
|
||||
if (!lRes.IsNull()) { lastResult = (T)(object)lRes.DynValue(); }
|
||||
}
|
||||
else
|
||||
{
|
||||
lastResult = (T)result;
|
||||
}
|
||||
}
|
||||
lastResult = result.ToObject<T>();
|
||||
}
|
||||
|
||||
if (GameMain.LuaCs.PerformanceCounter.EnablePerformanceCounter)
|
||||
@@ -239,10 +218,14 @@ namespace Barotrauma
|
||||
|
||||
return lastResult;
|
||||
}
|
||||
public object Call(string name, params object[] args) => Call<object>(name, args);
|
||||
|
||||
public object Call(string name, params object[] args)
|
||||
{
|
||||
if (name == null) throw new ScriptRuntimeException("Hook.Call: name must not be null.");
|
||||
return Call<object>(name, args);
|
||||
}
|
||||
|
||||
private static bool PatchPrefix(MethodBase __originalMethod, object[] __args, object __instance)
|
||||
private static bool PatchPrefix(MethodBase __originalMethod, object[] __args, object __instance)
|
||||
{
|
||||
ExecutePatch(__originalMethod, __args, __instance, out object result, HookMethodType.Before);
|
||||
return result == null;
|
||||
@@ -415,31 +398,22 @@ namespace Barotrauma
|
||||
continue;
|
||||
}
|
||||
|
||||
object[] args = new object[] { __instance }.Concat(__args).ToArray();
|
||||
object _result = tuple.Item2(args);
|
||||
var args = Enumerable.Empty<object>()
|
||||
.Concat(__args)
|
||||
.Prepend(__instance)
|
||||
.ToArray();
|
||||
var _result = tuple.Item2(args);
|
||||
|
||||
if (_result == null)
|
||||
if (_result != null && !_result.IsNil())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (_result is LuaResult res)
|
||||
{
|
||||
if (!res.IsNull())
|
||||
if (__originalMethod is MethodInfo mi && mi.ReturnType != typeof(void))
|
||||
{
|
||||
if (__originalMethod is MethodInfo mi && mi.ReturnType != typeof(void))
|
||||
{
|
||||
result = res.DynValue().ToObject(mi.ReturnType);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = res.DynValue().ToObject();
|
||||
}
|
||||
result = _result.ToObject(mi.ReturnType);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = _result.ToObject();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = _result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,17 +58,17 @@ namespace Barotrauma
|
||||
var _result = tuple.Item2(__instance, args);
|
||||
if (_result != null)
|
||||
{
|
||||
if (_result is LuaResult res)
|
||||
if (_result is DynValue res)
|
||||
{
|
||||
if (!res.IsNull())
|
||||
if (!res.IsNil())
|
||||
{
|
||||
if (__originalMethod is MethodInfo mi && mi.ReturnType != typeof(void))
|
||||
{
|
||||
result = res.DynValue().ToObject(mi.ReturnType);
|
||||
result = res.ToObject(mi.ReturnType);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = res.DynValue().ToObject();
|
||||
result = res.ToObject();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ namespace Barotrauma
|
||||
return lua.LoadFile(file, globalContext, codeStringFriendly);
|
||||
}
|
||||
|
||||
public object CallLuaFunction(object function, params object[] arguments)
|
||||
public DynValue CallLuaFunction(object function, params object[] arguments)
|
||||
{
|
||||
lock (lua)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user