private int ProcessAllInGameScripts(PlayfieldScriptData playfieldData, IEntity entity) { Log($"ProcessAllInGameScripts: {entity.Name}:{entity.Type} Pause:{playfieldData.PauseScripts}", LogLevel.Debug); if (entity.Type == EntityType.Proxy || entity.Type == EntityType.Unknown || playfieldData.PauseScripts) { return(0); } try { if (!entity.Structure.IsPowered) { return(0); } var entityScriptData = new ScriptRootData(playfieldData, playfieldData.AllEntities, playfieldData.CurrentEntities, playfieldData.Playfield, entity, playfieldData.PersistendData, (EventStore)playfieldData.EventStore.GetOrAdd(entity.Id, id => new EventStore(entity))); var deviceNames = entityScriptData.E.S.AllCustomDeviceNames.Where(N => IsScriptLCD(N)).ToArray(); Log($"ProcessAllInGameScripts: #{deviceNames.Length}", LogLevel.Debug); int count = 0; Parallel.ForEach(deviceNames, N => { if (playfieldData.PauseScripts) { return; } var lcd = entity.Structure.GetDevice <ILcd>(N); if (lcd == null) { return; } var scriptPriority = int.TryParse(N.Substring(0, 1), out var prio) ? prio : 0; if (scriptPriority == 0) { var lcdBlockPos = entity.Structure.GetDevicePositions(N); var lcdBlock = lcdBlockPos.Count > 0 ? entity.Structure.GetBlock(lcdBlockPos.First()) : null; if (lcdBlock != null) { lcdBlock.Get(out _, out _, out _, out var active); if (!active) { return; } } }
private int ProcessAllInGameScripts(IEntity entity) { Log($"ProcessAllInGameScripts: {entity.Name}:{entity.Type} Pause:{PauseScripts}", LogLevel.Debug); if (entity.Type == EntityType.Proxy || PauseScripts) { return(0); } try { var entityScriptData = new ScriptRootData(CurrentEntities, ModApi.Playfield, entity, DeviceLockAllowed, PersistendData); var deviceNames = entityScriptData.E.S.AllCustomDeviceNames.Where(N => N.StartsWith(ScriptKeyword)).ToArray(); Log($"ProcessAllInGameScripts: #{deviceNames.Length}", LogLevel.Debug); int count = 0; Parallel.ForEach(deviceNames, N => { if (PauseScripts) { return; } var lcd = entity.Structure.GetDevice <ILcd>(N); if (lcd == null) { return; } try { Log($"ProcessAllInGameScripts: {N}", LogLevel.Debug); var data = new ScriptRootData(entityScriptData) { Script = lcd.GetText(), Error = L, }; AddTargetsAndDisplayType(data, N.Substring(ScriptKeyword.Length)); if (Configuration.Current.ScriptTracking) { var trackfile = GetTrackingFileName(entity, data.Script.GetHashCode().ToString()); if (!File.Exists(trackfile)) { File.WriteAllText(trackfile, data.Script); } } data.ScriptId = entity.Id + "/" + N; ScriptExecQueue.Add(data); Interlocked.Increment(ref count); } catch (Exception lcdError) { if (Configuration.Current.LogLevel >= EmpyrionNetAPIDefinitions.LogLevel.Debug) { ModApi.Log($"UpdateLCDs ({entity.Id}/{entity.Name}):LCD: {lcdError}"); } } }); return(count); } catch (Exception error) { File.WriteAllText(GetTrackingFileName(entity, string.Empty) + ".error", error.ToString()); return(0); } }