Skip to content

Commit

Permalink
automatically allow UniTAS types to be used in moonsharp scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
Eddio0141 committed Aug 15, 2024
1 parent 8f5f6ba commit 9a5406f
Showing 1 changed file with 20 additions and 28 deletions.
48 changes: 20 additions & 28 deletions UniTAS/Patcher/Implementations/LiveScripting.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
using System;
using System.Threading;
using HarmonyLib;
using MoonSharp.Interpreter;
using MoonSharp.Interpreter.Interop;
using MoonSharp.Interpreter.Interop.RegistrationPolicies;
using MoonSharp.Interpreter.Loaders;
using UniTAS.Patcher.Extensions;
using UniTAS.Patcher.Interfaces.DependencyInjection;
using UniTAS.Patcher.Services;
using UniTAS.Patcher.Services.Logging;
using UnityEngine;

namespace UniTAS.Patcher.Implementations;

Expand All @@ -16,39 +14,33 @@ namespace UniTAS.Patcher.Implementations;
[ExcludeRegisterIfTesting]
public class LiveScripting : ILiveScripting
{
private readonly Thread _setupThread;
private readonly ILogger _logger;

public LiveScripting(ILogger logger)
private class CustomInteropRegistrationPolicy : IRegistrationPolicy
{
_logger = logger;
_setupThread = new(() =>
private static readonly IRegistrationPolicy Default = new DefaultRegistrationPolicy();

public IUserDataDescriptor HandleRegistration(IUserDataDescriptor newDescriptor,
IUserDataDescriptor oldDescriptor)
{
var allTypes = AccessTools.GetTypesFromAssembly(typeof(LiveScripting).Assembly);
foreach (var type in allTypes)
{
try
{
UserData.RegisterType(type);
}
catch (Exception e)
{
logger.LogWarning($"failed to register type {type.SaneFullName()}, {e}");
}
}
return Default.HandleRegistration(newDescriptor, oldDescriptor);
}

public bool AllowTypeAutoRegistration(Type type)
{
var unitasAssembly = typeof(LiveScripting).Assembly;
return Equals(type.Assembly, unitasAssembly);
}
}

UserData.RegisterType<Vector4>();
UserData.RegisterType<Vector3>();
UserData.RegisterType<Vector2>();
});
_setupThread.Start();
public LiveScripting(ILogger logger)
{
UserData.RegistrationPolicy = new CustomInteropRegistrationPolicy();
_logger = logger;
}

public Script NewScript()
{
if (_setupThread.ThreadState == ThreadState.Running)
_setupThread.Join();

var script = new Script(CoreModules.Preset_Complete)
{
Options =
Expand Down

0 comments on commit 9a5406f

Please sign in to comment.