diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaCsTimer.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaCsTimer.cs index e276ed3d2..67e23cb5c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaCsTimer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Lua/LuaClasses/LuaCsTimer.cs @@ -1,4 +1,5 @@ -using Barotrauma.LuaCs.Services; +using Barotrauma.LuaCs.Events; +using Barotrauma.LuaCs.Services; using Barotrauma.LuaCs.Services.Compatibility; using System; using System.Collections.Generic; @@ -6,7 +7,7 @@ using System.Diagnostics; namespace Barotrauma { - public class LuaCsTimer : ILuaCsTimer + public class LuaCsTimer : ILuaCsTimer, IEventUpdate { public static double Time => Timing.TotalTime; public static double GetTime() => Time; @@ -55,6 +56,14 @@ namespace Barotrauma private List timedActions = new List(); + private readonly IEventService _eventService; + + public LuaCsTimer(IEventService eventService) + { + _eventService = eventService; + _eventService.Subscribe(this); + } + private void AddTimer(TimedAction timedAction) { if (timedAction == null) @@ -75,7 +84,29 @@ namespace Barotrauma } } - public void Update() + public void Clear() + { + timedActions = new List(); + } + + public void Wait(LuaCsAction action, int millisecondDelay) + { + TimedAction timedAction = new TimedAction(action, millisecondDelay); + AddTimer(timedAction); + } + + public void NextFrame(LuaCsAction action) + { + TimedAction timedAction = new TimedAction(action, 0); + AddTimer(timedAction); + } + + public void Dispose() + { + _eventService.Unsubscribe(this); + } + + public void OnUpdate(double fixedDeltaTime) { lock (timedActions) { @@ -104,28 +135,6 @@ namespace Barotrauma } } - public void Clear() - { - timedActions = new List(); - } - - public void Wait(LuaCsAction action, int millisecondDelay) - { - TimedAction timedAction = new TimedAction(action, millisecondDelay); - AddTimer(timedAction); - } - - public void NextFrame(LuaCsAction action) - { - TimedAction timedAction = new TimedAction(action, 0); - AddTimer(timedAction); - } - - public void Dispose() - { - // ignored - } - public bool IsDisposed => false; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 1d32ce229..740e8ab89 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -191,6 +191,7 @@ namespace Barotrauma servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType(ServiceLifetime.Transient); servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); + servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); // TODO: INetworkingService servicesProvider.RegisterServiceType(ServiceLifetime.Singleton); servicesProvider.RegisterServiceType(ServiceLifetime.Transient); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/LuaScriptManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/LuaScriptManagementService.cs index 958ab5365..370c5103d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/LuaScriptManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/LuaScriptManagementService.cs @@ -45,6 +45,7 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService private readonly ILoggerService _loggerService; private readonly LuaGame _luaGame; private readonly ILuaCsHook _luaCsHook; + private readonly ILuaCsTimer _luaCsTimer; //private readonly ILuaCsNetworking _luaCsNetworking; //private readonly ILuaCsUtility _luaCsUtility; //private readonly ILuaCsTimer _luaCsTimer; @@ -54,10 +55,10 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService ILuaScriptLoader loader, ILuaScriptServicesConfig luaScriptServicesConfig, LuaGame luaGame, - ILuaCsHook luaCsHook + ILuaCsHook luaCsHook, //ILuaCsNetworking luaCsNetworking, //ILuaCsUtility luaCsUtility, - //ILuaCsTimer luaCsTimer + ILuaCsTimer luaCsTimer ) { _luaScriptLoader = loader; @@ -68,7 +69,7 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService _luaCsHook = luaCsHook; //_luaCsNetworking = luaCsNetworking; //_luaCsUtility = luaCsUtility; - //_luaCsTimer = luaCsTimer; + _luaCsTimer = luaCsTimer; } public bool IsDisposed { get; private set; } @@ -195,7 +196,7 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService _script.Globals["Game"] = _luaGame; _script.Globals["Hook"] = _luaCsHook; - //_script.Globals["Timer"] = _luaCsTimer; + _script.Globals["Timer"] = _luaCsTimer; _script.Globals["File"] = UserData.CreateStatic(); //_script.Globals["Networking"] = _luaCsNetworking; //_script.Globals["Steam"] = Steam; @@ -215,18 +216,21 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService return FluentResults.Result.Fail("Tried to execute Lua scripts without unloading first."); } + _loggerService.LogMessage("Executing Lua scripts"); + SetupEnvironment(); - _isRunning = true; - var result = FluentResults.Result.Ok(); + _isRunning = true; + foreach (ILuaScriptResourceInfo resource in executionOrder.Where(l => l.IsAutorun)) { foreach (ContentPath filePath in resource.FilePaths) { try { + _loggerService.LogMessage($"Run {filePath.Value}"); _script?.Call(_script.LoadFile(filePath.FullPath), Path.GetDirectoryName(resource.OwnerPackage.Path)); } catch(Exception e) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/PluginManagementService.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/PluginManagementService.cs index 63b9e3a51..532173247 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/PluginManagementService.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Services/PluginManagementService.cs @@ -93,7 +93,7 @@ public class PluginManagementService : IAssemblyManagementService public bool IsDisposed { get; } public FluentResults.Result Reset() { - throw new NotImplementedException(); + return FluentResults.Result.Fail("Not implemented"); } #endregion