From 9d68458eb20274b80d6b11b6010a7b4b57b4c6b5 Mon Sep 17 00:00:00 2001 From: zhurengong <2731412072@qq.com> Date: Thu, 10 Feb 2022 15:01:58 +0800 Subject: [PATCH] add some type method to LuaUserData 1. RegisterGenericType: solves some types that cannot be found directly by strings, such as MapEntity.SelectedList(HashSet) 2. IsTargetType: can be used to know whether MapEntity is Item, Character, or Structure. --- .../SharedSource/Lua/LuaClasses.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs index c3e1694b5..7c5eb3d89 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs @@ -48,6 +48,24 @@ namespace Barotrauma return (IUserDataDescriptor)generic.Invoke(null, new object[] { null, null }); } + public static IUserDataDescriptor RegisterGenericType(string typeName, params string[] typeNameArguements) + { + Type type = GetType(typeName); + Type[] typeArguements = typeNameArguements.Select(x => GetType(x)).ToArray(); + Type genericType = type.MakeGenericType(typeArguements); + return UserData.RegisterType(genericType); + } + + private static bool IsType(object obj) { return obj is T; } + + public static bool IsTargetType(object obj, string typeName) + { + var type = GetType(typeName); + MethodInfo method = typeof(LuaUserData).GetMethod(nameof(IsType), BindingFlags.NonPublic | BindingFlags.Static); + MethodInfo generic = method.MakeGenericMethod(type); + return (bool)generic.Invoke(null, new object[] { obj }); + } + public static object CreateStatic(string typeName) { Type type = GetType(typeName);