Decompiled source of MrovWeathers v0.0.6

MrovWeathers.dll

Decompiled 28 minutes ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using MrovLib;
using MrovLib.Events;
using MrovWeathers.NetcodePatcher;
using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.SceneManagement;
using WeatherRegistry;
using WeatherRegistry.Definitions;
using WeatherRegistry.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("WeatherRegistry")]
[assembly: AssemblyCompany("MrovWeathers")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("A template for Lethal Company")]
[assembly: AssemblyFileVersion("0.0.6.0")]
[assembly: AssemblyInformationalVersion("0.0.6+2e97f54b8b596cd3426a37e362f564444c5c4984")]
[assembly: AssemblyProduct("MrovWeathers")]
[assembly: AssemblyTitle("MrovWeathers")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/AndreyMrovol/MrovWeathers")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace MrovWeathers
{
	public class LevelListConfigHandler : LevelListConfigHandler
	{
		public override SelectableLevel[] Value => ConfigHelper.ConvertStringToLevels(((ConfigHandler<SelectableLevel[], string>)(object)this).ConfigEntry.Value);

		public LevelListConfigHandler(string defaultValue, bool enabled = true)
			: base(defaultValue, enabled)
		{
		}

		public void CreateConfigEntry(string configTitle, ConfigDescription configDescription = null)
		{
			((ConfigHandler<SelectableLevel[], string>)(object)this).ConfigEntry = ConfigManager.configFile.Bind<string>("Foggy", configTitle, ((ConfigHandler<SelectableLevel[], string>)(object)this).DefaultValue, configDescription);
		}
	}
	public class ConfigManager
	{
		internal static ConfigFile configFile;

		public static LevelListConfigHandler FoggyIgnoreLevels;

		public static ConfigManager Instance { get; private set; }

		public static void Init(ConfigFile config)
		{
			Instance = new ConfigManager(config);
		}

		private ConfigManager(ConfigFile config)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			configFile = config;
			FoggyIgnoreLevels = new LevelListConfigHandler("", enabled: false);
			FoggyIgnoreLevels.CreateConfigEntry("Foggy weather override", new ConfigDescription("Levels to blacklist fog override from applying on (semicolon-separated)", (AcceptableValueBase)null, Array.Empty<object>()));
		}
	}
	internal class FoggyPatches
	{
		public static void CreateEffectOverrides()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Expected O, but got Unknown
			Plugin.logger.LogInfo((object)"CreateEffectOverrides called");
			Weather weather = WeatherManager.GetWeather((LevelWeatherType)3);
			ImprovedWeatherEffect val = new ImprovedWeatherEffect(weather.Effect.EffectObject, Object.Instantiate<GameObject>(weather.Effect.WorldObject));
			GameObject worldObject = val.WorldObject;
			LocalVolumetricFog component = worldObject.GetComponent<LocalVolumetricFog>();
			LocalVolumetricFog item = ChangeFogParams(component);
			List<LocalVolumetricFog> list = worldObject.GetComponents<LocalVolumetricFog>().ToList();
			list.Remove(component);
			list.Add(item);
			val.WorldObject = worldObject;
			foreach (SelectableLevel level in LevelHelper.Levels)
			{
				if (!((ConfigHandler<SelectableLevel[], string>)(object)ConfigManager.FoggyIgnoreLevels).Value.Contains(level))
				{
					WeatherEffectOverride val2 = new WeatherEffectOverride(weather, level, val);
				}
			}
		}

		public static LocalVolumetricFog ChangeFogParams(LocalVolumetricFog Fog)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			Plugin.logger.LogInfo((object)"ChangeFog called");
			Plugin.logger.LogInfo((object)$"is null? {(Object)(object)Fog == (Object)null}");
			try
			{
				LocalVolumetricFogArtistParameters parameters = Fog.parameters;
				Plugin.DebugLogger.LogWarning((object)$"FOG: {((Object)Fog).name} {parameters.size} {((Component)Fog).transform.position} {parameters.albedo} {parameters.meanFreePath}");
				((Component)Fog).transform.position = new Vector3(((Component)Fog).transform.position.x, ((Component)Fog).transform.position.y + 128f, ((Component)Fog).transform.position.z);
				parameters.albedo = new Color(0.25f, 0.35f, 0.55f, 1f);
				parameters.meanFreePath = 11f;
				parameters.falloffMode = (LocalVolumetricFogFalloffMode)0;
				parameters.distanceFadeEnd = 200f;
				parameters.distanceFadeStart = 0f;
				parameters.blendingMode = (LocalVolumetricFogBlendingMode)1;
				parameters.size.y += 256f;
				parameters.size.x *= 5f;
				parameters.size.z *= 5f;
				Plugin.DebugLogger.LogWarning((object)$"FOG: {((Object)Fog).name} {parameters.size} {((Component)Fog).transform.position} {parameters.albedo} {parameters.meanFreePath}");
				Fog.parameters = parameters;
			}
			catch (Exception)
			{
				Plugin.logger.LogWarning((object)"Failed to change fog");
			}
			return Fog;
		}

		public static void ToggleFogExclusionZones(SelectableLevel level, bool enable = true)
		{
			Plugin.logger.LogDebug((object)"DisableFogExclusionZones called");
			List<GameObject> list = (from obj in Object.FindObjectsOfType<GameObject>()
				where ((Object)obj).name == "FogExclusionZone"
				select obj).ToList();
			foreach (GameObject item in list)
			{
				if (!(((Object)item.transform.parent).name == "HangarShip"))
				{
					Plugin.DebugLogger.LogDebug((object)$"Setting fog exclusion zone {((Object)item).name} (parent {((Object)item.transform.parent).name}) to {enable}");
					item.SetActive(enable);
				}
			}
		}
	}
	public static class InitWeathers
	{
		public static Weather Blackout;

		public static Weather Cloudy;

		public static void Init()
		{
			InitCloudy();
			InitBlackout();
		}

		public static void InitCloudy()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Expected O, but got Unknown
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected O, but got Unknown
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Expected O, but got Unknown
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Expected O, but got Unknown
			Weather val = new Weather("Cloudy", new ImprovedWeatherEffect((GameObject)null, (GameObject)null)
			{
				SunAnimatorBool = "overcast"
			});
			val.Color = new Color(0f, 1f, 0.55f, 1f);
			val.Config.ScrapAmountMultiplier = new FloatConfigHandler(1.6f, true);
			val.Config.ScrapValueMultiplier = new FloatConfigHandler(0.8f, true);
			val.Config.WeatherToWeatherWeights = new WeatherWeightsConfigHandler(new string[2] { "Eclipsed@50", "Stormy@80" }, true);
			val.Config.DefaultWeight = new IntegerConfigHandler(25, true);
			Cloudy = val;
			WeatherManager.RegisterWeather(Cloudy);
		}

		public static void InitBlackout()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Expected O, but got Unknown
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Expected O, but got Unknown
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Expected O, but got Unknown
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Expected O, but got Unknown
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Expected O, but got Unknown
			//IL_00d0: Expected O, but got Unknown
			GameObject val = Object.Instantiate<GameObject>(new GameObject
			{
				name = "BlackoutWeather"
			});
			((Object)val).hideFlags = (HideFlags)61;
			val.AddComponent<Blackout>();
			Blackout = new Weather("Blackout", new ImprovedWeatherEffect((GameObject)null, val)
			{
				SunAnimatorBool = "eclipse"
			})
			{
				Color = new Color(0.5f, 0.4f, 0.5f, 1f),
				Config = 
				{
					ScrapAmountMultiplier = new FloatConfigHandler(0.65f, true)
				},
				Config = 
				{
					ScrapValueMultiplier = new FloatConfigHandler(1.7f, true)
				},
				Config = 
				{
					DefaultWeight = new IntegerConfigHandler(35, true)
				},
				Config = 
				{
					LevelWeights = new LevelWeightsConfigHandler("Rend@200; Dine@200; Titan@200", true)
				},
				Config = 
				{
					WeatherToWeatherWeights = new WeatherWeightsConfigHandler("None@200; Cloudy@250", true)
				}
			};
			WeatherManager.RegisterWeather(Blackout);
		}
	}
	[BepInPlugin("MrovWeathers", "MrovWeathers", "0.0.6")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static ParameterEvent<(SelectableLevel level, Weather weather)> <>9__4_0;

			public static Event <>9__4_1;

			public static Event <>9__4_2;

			internal void <Awake>b__4_0((SelectableLevel level, Weather weather) args)
			{
				FoggyPatches.ToggleFogExclusionZones(args.level, enable: false);
			}

			internal void <Awake>b__4_1()
			{
				FoggyPatches.ToggleFogExclusionZones(StartOfRound.Instance.currentLevel);
			}

			internal void <Awake>b__4_2()
			{
				FoggyPatches.CreateEffectOverrides();
			}
		}

		internal static ManualLogSource logger;

		internal static Logger DebugLogger = new Logger("MrovWeathers", (ConfigEntry<bool>)null);

		internal static Harmony harmony = new Harmony("MrovWeathers");

		internal static PluginInfo PluginInformation;

		private void Awake()
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Expected O, but got Unknown
			logger = ((BaseUnityPlugin)this).Logger;
			harmony.PatchAll();
			ConfigManager.Init(((BaseUnityPlugin)this).Config);
			PluginInformation = ((BaseUnityPlugin)this).Info;
			InitWeathers.Init();
			((CustomEvent<(SelectableLevel, Weather)>)(object)EventManager.ShipLanding).AddListener((ParameterEvent<(SelectableLevel, Weather)>)delegate((SelectableLevel level, Weather weather) args)
			{
				FoggyPatches.ToggleFogExclusionZones(args.level, enable: false);
			});
			WeatherRegistryEvent disableAllWeathers = EventManager.DisableAllWeathers;
			object obj = <>c.<>9__4_1;
			if (obj == null)
			{
				Event val = delegate
				{
					FoggyPatches.ToggleFogExclusionZones(StartOfRound.Instance.currentLevel);
				};
				<>c.<>9__4_1 = val;
				obj = (object)val;
			}
			((CustomEvent)disableAllWeathers).AddListener((Event)obj);
			WeatherRegistryEvent setupFinished = EventManager.SetupFinished;
			object obj2 = <>c.<>9__4_2;
			if (obj2 == null)
			{
				Event val2 = delegate
				{
					FoggyPatches.CreateEffectOverrides();
				};
				<>c.<>9__4_2 = val2;
				obj2 = (object)val2;
			}
			((CustomEvent)setupFinished).AddListener((Event)obj2);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin MrovWeathers is loaded!");
		}
	}
	public class Blackout : MonoBehaviour
	{
		public class LightUtils
		{
			public static List<Light> GetLightsInScene(string sceneName)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				List<Light> list = new List<Light>();
				Scene sceneByName = SceneManager.GetSceneByName(sceneName);
				if (!((Scene)(ref sceneByName)).isLoaded)
				{
					Plugin.DebugLogger.LogWarning((object)("Scene " + sceneName + " is not loaded!"));
					return list;
				}
				GameObject[] rootGameObjects = ((Scene)(ref sceneByName)).GetRootGameObjects();
				GameObject[] array = rootGameObjects;
				foreach (GameObject val in array)
				{
					Light[] componentsInChildren = val.GetComponentsInChildren<Light>(true);
					list.AddRange(componentsInChildren);
				}
				return list;
			}

			public static List<Light> GetLightsUnderParent(Transform parent, bool includeInactive = true)
			{
				List<Light> list = new List<Light>();
				if ((Object)(object)parent == (Object)null)
				{
					return list;
				}
				Light[] componentsInChildren = ((Component)parent).GetComponentsInChildren<Light>(includeInactive);
				list.AddRange(componentsInChildren);
				return list;
			}

			public static List<Light> GetLightsInSceneUnderParent(string sceneName, string parentName, bool includeInactive = true)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				List<Light> list = new List<Light>();
				Scene sceneByName = SceneManager.GetSceneByName(sceneName);
				if (!((Scene)(ref sceneByName)).isLoaded)
				{
					Plugin.DebugLogger.LogWarning((object)("Scene " + sceneName + " is not loaded!"));
					return list;
				}
				GameObject[] rootGameObjects = ((Scene)(ref sceneByName)).GetRootGameObjects();
				GameObject[] array = rootGameObjects;
				foreach (GameObject val in array)
				{
					if (((Object)val).name == parentName)
					{
						list.AddRange(GetLightsUnderParent(val.transform, includeInactive));
						break;
					}
					Transform val2 = val.transform.Find(parentName);
					if ((Object)(object)val2 != (Object)null)
					{
						list.AddRange(GetLightsUnderParent(val2, includeInactive));
						break;
					}
				}
				return list;
			}

			public static Dictionary<string, List<Light>> GetLightsInScenes(string[] sceneNames)
			{
				Dictionary<string, List<Light>> dictionary = new Dictionary<string, List<Light>>();
				foreach (string text in sceneNames)
				{
					dictionary[text] = GetLightsInScene(text);
				}
				return dictionary;
			}

			public static Light[] GetAllLightsInScene(bool includeInactive = true)
			{
				return Resources.FindObjectsOfTypeAll<Light>();
			}

			public static Light[] GetActiveLightsInScene()
			{
				return Object.FindObjectsOfType<Light>();
			}

			public static List<Light> GetLightsByType(LightType lightType)
			{
				//IL_001a: Unknown result type (might be due to invalid IL or missing references)
				//IL_001f: Unknown result type (might be due to invalid IL or missing references)
				Light[] allLightsInScene = GetAllLightsInScene();
				List<Light> list = new List<Light>();
				Light[] array = allLightsInScene;
				foreach (Light val in array)
				{
					if (val.type == lightType)
					{
						list.Add(val);
					}
				}
				return list;
			}
		}

		private Logger Logger = new Logger("Blackout", (ConfigEntry<bool>)null);

		private List<Light> AllPoweredLights = new List<Light>();

		private List<HDAdditionalLightData> Floodlights = new List<HDAdditionalLightData>();

		private float FloodlightRange = 44f;

		private float FloodlightAngle = 116.7f;

		private float FloodlightIntensity = 762f;

		private void OnEnable()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			if (!WeatherManager.IsSetupFinished)
			{
				return;
			}
			LungProp val = Object.FindObjectOfType<LungProp>();
			ItemDropship val2 = Object.FindObjectOfType<ItemDropship>();
			List<Light> lightsUnderParent = LightUtils.GetLightsUnderParent(((Component)val2).transform);
			Scene sceneByName = SceneManager.GetSceneByName(StartOfRound.Instance.currentLevel.sceneName);
			List<Light> list = (from rootObject in ((Scene)(ref sceneByName)).GetRootGameObjects()
				where ((Object)rootObject).name.Contains("Turret")
				select rootObject).SelectMany((GameObject turret) => LightUtils.GetLightsUnderParent(turret.transform)).ToList();
			List<Light> list2 = (from obj in Object.FindObjectsOfType<GameObject>()
				where ((Object)obj).name == "BlackoutIgnore"
				select obj).SelectMany((GameObject obj) => LightUtils.GetLightsUnderParent(obj.transform)).ToList();
			AllPoweredLights = LightUtils.GetLightsInScene(StartOfRound.Instance.currentLevel.sceneName);
			Logger.LogInfo((object)$"Found {AllPoweredLights.Count} lights in scene {StartOfRound.Instance.currentLevel.sceneName}");
			HDAdditionalLightData val3 = default(HDAdditionalLightData);
			foreach (Light allPoweredLight in AllPoweredLights)
			{
				if ((Object)(object)val != (Object)null && (Object)(object)((Component)allPoweredLight).transform.parent == (Object)(object)((Component)val).gameObject.transform)
				{
					Logger.LogDebug((object)("Skipping light " + ((Object)allPoweredLight).name + " (parent " + ((Object)((Component)allPoweredLight).transform.parent).name + ")"));
					((Component)allPoweredLight).gameObject.TryGetComponent<HDAdditionalLightData>(ref val3);
					if ((Object)(object)val3 != (Object)null)
					{
						val3.SetIntensity(900f);
						val3.SetRange(80f);
					}
				}
				else if (lightsUnderParent.Contains(allPoweredLight))
				{
					Logger.LogDebug((object)("Skipping light " + ((Object)allPoweredLight).name + " (parent " + ((Object)((Component)allPoweredLight).transform.parent).name + ")"));
				}
				else if (list.Contains(allPoweredLight))
				{
					Logger.LogDebug((object)("Skipping turret light " + ((Object)allPoweredLight).name + " (parent " + ((Object)((Component)allPoweredLight).transform.parent).name + ")"));
				}
				else if (list2.Contains(allPoweredLight))
				{
					Logger.LogDebug((object)("Skipping light added to ignore-list " + ((Object)allPoweredLight).name + " (parent " + ((Object)((Component)allPoweredLight).transform.parent).name + ")"));
				}
				else
				{
					Logger.LogDebug((object)("Disabling light " + ((Object)allPoweredLight).name + " (parent " + ((Object)((Component)allPoweredLight).transform.parent).name + ")"));
					((Component)allPoweredLight).gameObject.SetActive(false);
				}
			}
			RoundManager.Instance.SwitchPower(true);
			RoundManager.Instance.TurnOnAllLights(false);
			BreakerBox val4 = Object.FindObjectOfType<BreakerBox>();
			if ((Object)(object)val4 != (Object)null)
			{
				((Component)val4).gameObject.SetActive(false);
			}
			GameObject val5 = GameObject.Find("Sun");
			if ((Object)(object)val5 != (Object)null)
			{
				val5.SetActive(false);
			}
			try
			{
				Transform component = GameObject.Find("ShipLightsPost").GetComponent<Transform>();
				List<Light> lightsUnderParent2 = LightUtils.GetLightsUnderParent(component);
				Logger.LogInfo((object)$"Found {lightsUnderParent2.Count} floodlights in scene SampleSceneRelay");
				HDAdditionalLightData val6 = default(HDAdditionalLightData);
				foreach (Light item in lightsUnderParent2)
				{
					((Component)item).gameObject.TryGetComponent<HDAdditionalLightData>(ref val6);
					if ((Object)(object)val6 != (Object)null)
					{
						val6.SetIntensity(30000f);
						val6.SetSpotAngle(120f, 0f);
						val6.SetRange(600f);
						Floodlights.Add(val6);
					}
				}
			}
			catch (Exception arg)
			{
				Logger.LogWarning((object)$"Error while trying to modify floodlights: {arg}");
			}
		}

		private void OnDisable()
		{
			if (!WeatherManager.IsSetupFinished)
			{
				return;
			}
			foreach (HDAdditionalLightData floodlight in Floodlights)
			{
				floodlight.SetIntensity(FloodlightIntensity);
				floodlight.SetSpotAngle(FloodlightAngle, 0f);
				floodlight.SetRange(FloodlightRange);
			}
			AllPoweredLights.Clear();
			Floodlights.Clear();
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "MrovWeathers";

		public const string PLUGIN_NAME = "MrovWeathers";

		public const string PLUGIN_VERSION = "0.0.6";
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}
namespace MrovWeathers.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}