c# 10 and assembly unloading for in-game scripts

This commit is contained in:
zznty
2022-10-15 00:16:00 +07:00
parent a9c9a0de68
commit a0d0976a6a
3 changed files with 265 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
using System;
using System.Reflection;
using Sandbox.Game.Entities.Blocks;
using Sandbox.Game.World;
using Torch.API.Managers;
using Torch.Managers;
using Torch.Managers.PatchManager;
using Torch.Utils;
namespace Torch.Patches;
[PatchShim]
public static class ProgramableBlockPatch
{
[ReflectedMethodInfo(typeof(MyProgrammableBlock), "Compile")]
private static MethodInfo CompileMethod = null!;
public static void Patch(PatchContext context)
{
context.GetPattern(CompileMethod).AddPrefix();
}
private static bool Prefix(MyProgrammableBlock __instance, string program, string storage, bool instantiate)
{
if (!MySession.Static.EnableIngameScripts || __instance.CubeGrid is {IsPreview: true} or {CreatePhysics: false})
return false;
#pragma warning disable CS0618
TorchBase.Instance.CurrentSession.Managers.GetManager<ScriptCompilationManager>().CompileAsync(__instance, program, storage, instantiate);
#pragma warning restore CS0618
return false;
}
}