using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Reflection; using System.Threading.Tasks; using Barotrauma.LuaCs.Data; using MoonSharp.Interpreter; using MoonSharp.Interpreter.Interop; namespace Barotrauma.LuaCs.Services; public interface ILuaScriptManagementService : IReusableService { #region Script_Ops Task LoadScriptResourcesAsync(ImmutableArray resourcesInfo); FluentResults.Result ExecuteLoadedScripts(ContentPackage package, bool pauseExecutionOnError = false, bool verboseLogging = false); FluentResults.Result ExecuteLoadedScripts(ImmutableArray scripts, bool pauseExecutionOnError = false, bool verboseLogging = false); FluentResults.Result ExecuteLoadedScripts(bool pauseExecutionOnError = false, bool verboseLogging = false); FluentResults.Result DisposePackageResources(ContentPackage package); FluentResults.Result UnloadActiveScripts(); FluentResults.Result DisposeAllPackageResources(); #endregion #region Type_Registration IUserDataDescriptor RegisterType(Type type); /// /// [Deprecated]
/// Use () instead. /// Gets the type information for an already registered type. ///
/// The fully qualified name of the type and namespace. /// The for the type, if registered. Null if none is found. [Obsolete($"Use {nameof(GetTypeInfo)} instead.")] IUserDataDescriptor RegisterType(string typeName) => GetTypeInfo(typeName); IUserDataDescriptor RegisterGenericType(Type type); /// /// [Deprecated]
/// Use () instead. /// Gets the generic type information for an already registered type. ///
/// The fully qualified name of the generic type and namespace. /// The fully qualified name of the template types. /// The for the type, if registered. Null if none is found. [Obsolete($"Use {nameof(GetGenericTypeInfo)} instead.")] IUserDataDescriptor RegisterGenericType(string typeName, params string[] typeNameArgs) => GetGenericTypeInfo(typeName, typeNameArgs); /// /// Gets the type information for an already registered type. /// /// The fully qualified name of the type and namespace. /// The for the type, if registered. Null if none is found. IUserDataDescriptor GetTypeInfo(string typeName); /// /// Gets the generic type information for an already registered type. /// /// The fully qualified name of the generic type and namespace. /// The fully qualified name of the template types. /// The for the type, if registered. Null if none is found. IUserDataDescriptor GetGenericTypeInfo(string typeName, params string[] typeNameArgs); void UnregisterType(Type type); #endregion #region Type_Checks_&Utilities bool IsRegistered(Type type); bool IsTargetType(object obj, string typeName); string TypeOf(object obj); object CreateStatic(string typeName); object CreateEnumTable(string typeName); FieldInfo FindFieldRecursively(Type type, string fieldName); void MakeFieldAccessible(IUserDataDescriptor descriptor, string fieldName); MethodInfo FindMethodRecursively(Type type, string methodName, Type[] types = null); void MakeMethodAccessible(IUserDataDescriptor descriptor, string methodName, string[] parameters = null); PropertyInfo FindPropertyRecursively(Type type, string propertyName); void MakePropertyAccessible(IUserDataDescriptor descriptor, string propertyName); void AddMethod(IUserDataDescriptor descriptor, string methodName, object function); void AddField(IUserDataDescriptor descriptor, string fieldName, DynValue value); void RemoveMember(IUserDataDescriptor descriptor, string memberName); bool HasMember(object obj, string memberName); DynValue CreateUserDataFromDescriptor(DynValue scriptObject, IUserDataDescriptor descriptor); DynValue CreateUserDataFromType(DynValue scriptObject, Type desiredType); #endregion }