diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Compatibility/ILuaCsTimer.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Compatibility/ILuaCsTimer.cs index cc6c9081c..9fe824d0e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Compatibility/ILuaCsTimer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Compatibility/ILuaCsTimer.cs @@ -2,7 +2,7 @@ namespace Barotrauma.LuaCs.Compatibility; -internal partial interface ILuaCsTimer : ILuaCsShim +internal partial interface ILuaCsTimer : IReusableService, ILuaCsShim { public static double Time => Timing.TotalTime; public static double GetTime() => Time; diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/HarmonyEventPatchesService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/HarmonyEventPatchesService.cs index e3715af09..916858880 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/HarmonyEventPatchesService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/HarmonyEventPatchesService.cs @@ -25,10 +25,7 @@ internal class HarmonyEventPatchesService : IService Harmony.PatchAll(typeof(HarmonyEventPatchesService)); } - // TODO: This causes like hell in Debug. -#if !DEBUG [HarmonyPatch(typeof(CoroutineManager), nameof(CoroutineManager.Update)), HarmonyPostfix] -#endif public static void CoroutineManager_Update_Post() { _eventService.PublishEvent(x => x.OnUpdate(Timing.TotalTime)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs index 04b21c67a..3e92804fe 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/LuaScriptManagementService.cs @@ -174,9 +174,8 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService _eventService.RegisterLuaEventAlias("think", "OnUpdate"); _eventService.RegisterLuaEventAlias("keyUpdate", "OnKeyUpdate"); _eventService.RegisterLuaEventAlias("character.created", "OnCharacterCreated"); - _eventService.RegisterLuaEventAlias("character.giveJobItems", "OnGiveCharacterJobItems"); - _eventService.RegisterLuaEventAlias("afflictionUpdate", "OnAfflictionUpdate"); - + _eventService.RegisterLuaEventAlias("character.giveJobItems", "OnGiveCharacterJobItems"); + _eventService.RegisterLuaEventAlias("afflictionUpdate", "OnAfflictionUpdate"); } private void SetupEnvironment(bool enableSandbox) @@ -357,6 +356,7 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService { _luaScriptLoader.ClearCaches(); _userDataService.Reset(); + _luaCsTimer.Reset(); RegisterLuaEvents(); return DisposeAllPackageResources(); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaConverters.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaConverters.cs index e2783dd10..ab53a5538 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaConverters.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaConverters.cs @@ -34,7 +34,7 @@ namespace Barotrauma Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(LuaCsAction), v => (LuaCsAction)(args => { - if (v.Function.OwnerScript == _luaScriptManagementService) + if (v.Function.OwnerScript == _luaScriptManagementService.InternalScript) { Call(v.Function, args); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaCsTimer.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaCsTimer.cs index a34986f56..6d12bd068 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaCsTimer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/_Services/_Lua/LuaClasses/LuaCsTimer.cs @@ -61,7 +61,7 @@ namespace Barotrauma public LuaCsTimer(IEventService eventService) { _eventService = eventService; - _eventService.Subscribe(this); + SubscribeToEvents(); } private void AddTimer(TimedAction timedAction) @@ -101,11 +101,6 @@ namespace Barotrauma AddTimer(timedAction); } - public void Dispose() - { - _eventService.Unsubscribe(this); - } - public void OnUpdate(double fixedDeltaTime) { lock (timedActions) @@ -135,6 +130,22 @@ namespace Barotrauma } } + private void SubscribeToEvents() + { + _eventService.Subscribe(this); + } + + public FluentResults.Result Reset() + { + SubscribeToEvents(); + return FluentResults.Result.Ok(); + } + + public void Dispose() + { + _eventService.Unsubscribe(this); + } + public bool IsDisposed => false; } }