Decompiled source of SandboxCustomizer v1.0.2

plugins/SandboxCustomizer.dll

Decompiled 5 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using SandboxCustomizer.Info;
using SandboxCustomizer.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.AddressableAssets.ResourceLocators;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("SandboxCustomizer")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SandboxCustomizer")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("f4c914f1-16e3-4ece-a0b1-651235f769d5")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace SandboxCustomizer
{
	public class BetterUnblocker : MonoBehaviour
	{
		private TimeOfDayChanger main_changer = null;

		private UltrakillEvent events = null;

		public UnityEvent sanbox_switch_event = new UnityEvent();

		public void Start()
		{
			((MonoBehaviour)this).Invoke("OnEnable", 0.1f);
		}

		public void OnEnable()
		{
			ObjectActivator val = null;
			if (((Component)this).gameObject.TryGetComponent<ObjectActivator>(ref val))
			{
				((MonoBehaviour)val).CancelInvoke();
			}
			if (events == null)
			{
				events = val.events;
			}
		}

		public void Update()
		{
			if ((Object)(object)main_changer != (Object)null)
			{
				if (main_changer.allDone)
				{
					main_changer = null;
					if (events != null)
					{
						events.Invoke();
					}
				}
				return;
			}
			bool flag = false;
			Transform transform = GameObject.Find("Activators").transform;
			for (int i = 0; i < transform.childCount; i++)
			{
				if (!((Component)transform.GetChild(i)).gameObject.activeSelf)
				{
					continue;
				}
				GameObject gameObject = ((Component)transform.GetChild(i)).gameObject;
				TimeOfDayChanger val = null;
				for (int j = 0; j < gameObject.transform.childCount; j++)
				{
					if (!((Component)gameObject.transform.GetChild(j)).TryGetComponent<TimeOfDayChanger>(ref val))
					{
						continue;
					}
					if (val.allDone)
					{
						val = null;
						continue;
					}
					main_changer = val;
					bool flag2 = false;
					flag = true;
					foreach (CustomSandbox sandbox in SandboxManager.sandboxs)
					{
						if ((Object)(object)sandbox.tod_changer == (Object)(object)val)
						{
							SandboxManager.sandbox_current = sandbox;
							if (sandbox.info.path != null)
							{
								((ConfigEntryBase)Plugin.load_on_start).SetSerializedValue(sandbox.info.path.Replace(Plugin.sandbox_folder_path + "\\", ""));
							}
							else
							{
								((ConfigEntryBase)Plugin.load_on_start).SetSerializedValue("Day");
							}
							flag2 = true;
							break;
						}
					}
					if (!flag2)
					{
						SandboxManager.sandbox_current = null;
						SandboxManager.activators_vanilla.TryGetValue(gameObject, out var value);
						if (value == null)
						{
							Debug.Log((object)"GUYS WE'RE LITERALLY GONNA #SAVETF2 THIS TIME GUYS!! #FIXTF2 GUYS!!!");
							SandboxManager.main_sandbox = null;
						}
						else
						{
							SandboxManager.main_sandbox = value;
							if (value != null)
							{
								((ConfigEntryBase)Plugin.load_on_start).SetSerializedValue(value);
							}
							else
							{
								((ConfigEntryBase)Plugin.load_on_start).SetSerializedValue("Day");
							}
						}
					}
					sanbox_switch_event.Invoke();
				}
			}
			if (!flag)
			{
				events.Invoke();
			}
		}
	}
	public static class CSBUtils
	{
		public static string version = "1.0.0";

		public static void CreateContainer(string name, string path)
		{
			if (!string.Equals(".csb", Path.GetExtension(path), StringComparison.OrdinalIgnoreCase))
			{
				Debug.Log((object)("Can't create field because \"" + path + "\" is not a csb"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			if (text.Contains("[" + name + "]"))
			{
				Debug.Log((object)("Field \"" + name + "\" with same name already exists"));
				return;
			}
			string text2 = "\n[" + name + "]\n{\n}";
			text += text2;
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static string CreateCSB(string name, string directory)
		{
			string text = Path.Combine(directory, name + ".csb");
			if (File.Exists(text))
			{
				Debug.Log((object)("File \"" + text + "\" already made"));
				return text;
			}
			StreamWriter streamWriter = new StreamWriter(text);
			streamWriter.Write("|" + version + "|");
			streamWriter.Close();
			return text;
		}

		public static List<string> GetFieldsInContainer(string file, int container_start)
		{
			List<string> list = new List<string>();
			string text = "";
			string text2 = "";
			bool flag = false;
			int num = container_start;
			int num2 = 0;
			int num3 = 1;
			int num4 = 0;
			while (num < file.Count())
			{
				if (file[num] == '{')
				{
					num3++;
				}
				if (file[num] == '}')
				{
					num3--;
				}
				if (num3 == 0)
				{
					break;
				}
				if (file[num] == '(')
				{
					num2++;
				}
				if (file[num] == ')')
				{
					num2--;
				}
				if (file[num] == '[')
				{
					num4++;
					if (num2 == 1)
					{
						flag = true;
						num++;
						continue;
					}
				}
				if (file[num] == ']')
				{
					num4--;
					if (num2 == 1)
					{
						flag = false;
						int result = 0;
						if (int.TryParse(text2, out result))
						{
							num2--;
							num3++;
							num += 3 + result;
							text2 = "";
							continue;
						}
					}
				}
				if (flag)
				{
					text2 += file[num];
				}
				num++;
			}
			text = file.Substring(container_start, num - container_start);
			list = text.Split(new char[1] { '\n' }).ToList();
			list.RemoveAt(0);
			list.RemoveAt(list.Count - 1);
			return list;
		}

		public static string RemoveFieldsInContainter(string file, int container_start)
		{
			List<string> list = new List<string>();
			string text = "";
			string text2 = "";
			bool flag = false;
			int num = container_start;
			int num2 = 0;
			int num3 = 1;
			int num4 = 0;
			while (num < file.Count())
			{
				if (file[num] == '{')
				{
					num3++;
				}
				if (file[num] == '}')
				{
					num3--;
				}
				if (num3 == 0)
				{
					break;
				}
				if (file[num] == '(')
				{
					num2++;
				}
				if (file[num] == ')')
				{
					num2--;
				}
				if (file[num] == '[')
				{
					num4++;
					if (num2 == 1)
					{
						flag = true;
						num++;
						continue;
					}
				}
				if (file[num] == ']')
				{
					num4--;
					if (num2 == 1)
					{
						flag = false;
						int result = 0;
						if (int.TryParse(text2, out result))
						{
							num2--;
							num3++;
							num += 3 + result;
							text2 = "";
							continue;
						}
					}
				}
				if (flag)
				{
					text2 += file[num];
				}
				num++;
			}
			return file.Remove(container_start, num - container_start);
		}

		public static void CreateColorField(string container_name, Color color, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			string item = "(color){" + color.r + "," + color.g + "," + color.b + "," + color.a + "}";
			fieldsInContainer.Add(item);
			string text3 = "";
			text3 += "\n";
			foreach (string item2 in fieldsInContainer)
			{
				text3 = text3 + item2 + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static Color GetColorField(string container_name, int index, string path)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
			Color clear = Color.clear;
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return Color.clear;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return Color.clear;
			}
			int container_start = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, container_start);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return Color.clear;
			}
			if (!fieldsInContainer[index].Contains("(color"))
			{
				Debug.Log((object)("Color could not be found at field index: " + index));
				return Color.clear;
			}
			int num = fieldsInContainer[index].IndexOf("){") + "){".Length;
			string text3 = fieldsInContainer[index].Substring(num, fieldsInContainer[index].Length - 1 - num);
			List<string> list = new List<string>();
			list = text3.Split(new char[1] { ',' }).ToList();
			if (list.Count() > 2)
			{
				float[] array = new float[list.Count];
				for (int i = 0; i < list.Count; i++)
				{
					if (!float.TryParse(list[i], out array[i]))
					{
						Debug.Log((object)(container_name + ": " + index + " | Could not determine color value " + i));
						array[i] = 0f;
					}
				}
				clear.r = array[0];
				clear.g = array[1];
				clear.b = array[2];
				if (list.Count() > 3)
				{
					clear.a = array[3];
				}
				else
				{
					clear.a = 1f;
				}
				return clear;
			}
			Debug.Log((object)("Not enough values in color field " + container_name + ": " + index + " to determine color"));
			return Color.clear;
		}

		public static void SetColorField(string container_name, Color color, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return;
			}
			string value = "(color){" + color.r + "," + color.g + "," + color.b + "," + color.a + "}";
			fieldsInContainer[index] = value;
			string text3 = "";
			text3 += "\n";
			foreach (string item in fieldsInContainer)
			{
				text3 = text3 + item + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static void CreateFloatField(string container_name, float num, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num2 = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num2);
			text = RemoveFieldsInContainter(text, num2);
			string item = "(float){" + num + "}";
			fieldsInContainer.Add(item);
			string text3 = "";
			text3 += "\n";
			foreach (string item2 in fieldsInContainer)
			{
				text3 = text3 + item2 + "\n";
			}
			text = text.Insert(num2, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static float GetFloatField(string container_name, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return 0f;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return 0f;
			}
			int container_start = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, container_start);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return 0f;
			}
			if (!fieldsInContainer[index].Contains("(float)"))
			{
				Debug.Log((object)("Float could not be found at field index: " + index));
				return 0f;
			}
			int num = fieldsInContainer[index].IndexOf("){") + "){".Length;
			string s = fieldsInContainer[index].Substring(num, fieldsInContainer[index].Length - 1 - num);
			if (!float.TryParse(s, out var result))
			{
				Debug.Log((object)(container_name + ": " + index + " | Could not determine float value"));
				return 0f;
			}
			return result;
		}

		public static void SetFloatField(string container_name, float num, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num2 = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num2);
			text = RemoveFieldsInContainter(text, num2);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return;
			}
			string value = "(float){" + num + "}";
			fieldsInContainer[index] = value;
			string text3 = "";
			text3 += "\n";
			foreach (string item in fieldsInContainer)
			{
				text3 = text3 + item + "\n";
			}
			text = text.Insert(num2, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static void CreateBoolField(string container_name, bool value, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			string item = "(bool){" + value + "}";
			fieldsInContainer.Add(item);
			string text3 = "";
			text3 += "\n";
			foreach (string item2 in fieldsInContainer)
			{
				text3 = text3 + item2 + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static bool GetBoolField(string container_name, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return false;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return false;
			}
			int container_start = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, container_start);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return false;
			}
			if (!fieldsInContainer[index].Contains("(bool"))
			{
				Debug.Log((object)("Bool could not be found at field index: " + index));
				return false;
			}
			int num = fieldsInContainer[index].IndexOf("){") + "){".Length;
			string value = fieldsInContainer[index].Substring(num, fieldsInContainer[index].Length - 1 - num);
			if (!bool.TryParse(value, out var result))
			{
				Debug.Log((object)(container_name + ": " + index + " | Could not determine boolean value"));
				return false;
			}
			return result;
		}

		public static void SetBoolField(string container_name, bool value, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return;
			}
			string value2 = "(bool){" + value + "}";
			fieldsInContainer[index] = value2;
			string text3 = "";
			text3 += "\n";
			foreach (string item in fieldsInContainer)
			{
				text3 = text3 + item + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static void CreateBase64Field(string container_name, string data, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			string item = "(base64[" + data.Length + "]){" + data + "}";
			fieldsInContainer.Add(item);
			string text3 = "";
			text3 += "\n";
			foreach (string item2 in fieldsInContainer)
			{
				text3 = text3 + item2 + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static string GetBase64Field(string container_name, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return "";
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return "";
			}
			int container_start = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, container_start);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return "";
			}
			if (!fieldsInContainer[index].Contains("(base64"))
			{
				Debug.Log((object)("Base64 could not be found at field index: " + index));
				return "";
			}
			int num = fieldsInContainer[index].IndexOf("){") + "){".Length;
			return fieldsInContainer[index].Substring(num, fieldsInContainer[index].Length - 1 - num);
		}

		public static void SetBase64Field(string container_name, string data, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return;
			}
			string value = "(base64[" + data.Length + "]){" + data + "}";
			fieldsInContainer[index] = value;
			string text3 = "";
			text3 += "\n";
			foreach (string item in fieldsInContainer)
			{
				text3 = text3 + item + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static void CreateStringField(string container_name, string str, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			string item = "(string){" + str + "}";
			fieldsInContainer.Add(item);
			string text3 = "";
			text3 += "\n";
			foreach (string item2 in fieldsInContainer)
			{
				text3 = text3 + item2 + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}

		public static string GetStringField(string container_name, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return "";
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return "";
			}
			int container_start = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, container_start);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return "";
			}
			if (!fieldsInContainer[index].Contains("(string"))
			{
				Debug.Log((object)("String could not be found at field index: " + index));
				return "";
			}
			int num = fieldsInContainer[index].IndexOf("){") + "){".Length;
			return fieldsInContainer[index].Substring(num, fieldsInContainer[index].Length - 1 - num);
		}

		public static void SetStringField(string container_name, string str, int index, string path)
		{
			if (!File.Exists(path))
			{
				Debug.Log((object)("File \"" + path + "\" is not found"));
				return;
			}
			StreamReader streamReader = new StreamReader(path);
			string text = streamReader.ReadToEnd();
			streamReader.Close();
			string text2 = "[" + container_name + "]\n{";
			if (!text.Contains(text2))
			{
				Debug.Log((object)("Container " + container_name + " is not found"));
				return;
			}
			int num = text.IndexOf(text2) + text2.Length;
			List<string> fieldsInContainer = GetFieldsInContainer(text, num);
			text = RemoveFieldsInContainter(text, num);
			if (index >= fieldsInContainer.Count || index < 0)
			{
				Debug.Log((object)"Field index out of range");
				return;
			}
			string value = "(string){" + str + "}";
			fieldsInContainer[index] = value;
			string text3 = "";
			text3 += "\n";
			foreach (string item in fieldsInContainer)
			{
				text3 = text3 + item + "\n";
			}
			text = text.Insert(num, text3);
			StreamWriter streamWriter = new StreamWriter(path);
			streamWriter.Write(text);
			streamWriter.Close();
		}
	}
	public class CustomSandbox
	{
		public static GameObject base_indoors;

		public static GameObject base_outdoors;

		public static GameObject base_activator;

		public Material skybox_mat;

		public GameObject custom_indoors;

		public GameObject custom_outdoors;

		public GameObject custom_activator;

		public TimeOfDayChanger tod_changer;

		public ObjectActivator obj_activator;

		public UltrakillEvent uk_event;

		public List<Light> new_lights = new List<Light>();

		public List<Light> indoor_lights = new List<Light>();

		public List<Light> outdoor_lights = new List<Light>();

		public List<MeshRenderer> godrays = new List<MeshRenderer>();

		public SandboxInfo info = new SandboxInfo();

		public bool in_scene = false;

		public static void MakeBaseSandbox()
		{
			GameObject gameObject = ((Component)GameObject.Find("IndoorsLighting").transform.Find("Day")).gameObject;
			GameObject gameObject2 = ((Component)GameObject.Find("OutdoorsLighting").transform.Find("Day")).gameObject;
			GameObject gameObject3 = ((Component)GameObject.Find("Activators").transform.Find("Day Activator")).gameObject;
			base_indoors = Object.Instantiate<GameObject>(gameObject, gameObject.transform.parent);
			((Object)base_indoors).name = "Base (Indoors)";
			base_indoors.SetActive(false);
			base_outdoors = Object.Instantiate<GameObject>(gameObject2, gameObject2.transform.parent);
			((Object)base_outdoors).name = "Base (Outdoors)";
			base_outdoors.SetActive(false);
			base_activator = Object.Instantiate<GameObject>(gameObject3, gameObject3.transform.parent);
			((Object)base_activator).name = "Base Activator";
			base_activator.SetActive(false);
		}

		public void AddToScene()
		{
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Expected O, but got Unknown
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Expected O, but got Unknown
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_033d: Unknown result type (might be due to invalid IL or missing references)
			//IL_047c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0481: Unknown result type (might be due to invalid IL or missing references)
			//IL_041e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0579: Unknown result type (might be due to invalid IL or missing references)
			//IL_057e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04dd: Unknown result type (might be due to invalid IL or missing references)
			if (in_scene)
			{
				return;
			}
			GameObject gameObject = ((Component)GameObject.Find("IndoorsLighting").transform.Find("Day")).gameObject;
			GameObject gameObject2 = ((Component)GameObject.Find("OutdoorsLighting").transform.Find("Day")).gameObject;
			GameObject gameObject3 = ((Component)GameObject.Find("Activators").transform.Find("Day Activator")).gameObject;
			custom_indoors = Object.Instantiate<GameObject>(base_indoors, base_indoors.transform.parent);
			((Object)custom_indoors).name = "Custom (Indoors)";
			custom_outdoors = Object.Instantiate<GameObject>(base_outdoors, base_outdoors.transform.parent);
			((Object)custom_outdoors).name = "Custom (Outdoors)";
			custom_activator = Object.Instantiate<GameObject>(base_activator, base_activator.transform.parent);
			((Object)custom_activator).name = "Custom Activator";
			tod_changer = custom_activator.GetComponentInChildren<TimeOfDayChanger>();
			skybox_mat = new Material(tod_changer.newSkybox);
			if (info.skybox == null)
			{
				info.skybox = new SkyboxInfo();
				info.skybox.texture = (Texture2D)base_activator.GetComponentInChildren<TimeOfDayChanger>().newSkybox.mainTexture;
				info.skybox.name = null;
				skybox_mat.mainTexture = (Texture)(object)info.skybox.texture;
			}
			else
			{
				skybox_mat.mainTexture = (Texture)(object)info.skybox.texture;
			}
			tod_changer.newSkybox = skybox_mat;
			obj_activator = custom_activator.GetComponent<ObjectActivator>();
			uk_event = obj_activator.events;
			uk_event.toActivateObjects = (GameObject[])(object)new GameObject[2] { custom_indoors, custom_outdoors };
			Light[] componentsInChildren = custom_indoors.GetComponentsInChildren<Light>();
			if (info.indoor_lights != null)
			{
				for (int i = 0; i < componentsInChildren.Length; i++)
				{
					indoor_lights.Add(componentsInChildren[i]);
					componentsInChildren[i].color = info.indoor_lights[i].color;
				}
			}
			else
			{
				info.indoor_lights = new List<LightInfo>();
				for (int j = 0; j < componentsInChildren.Length; j++)
				{
					indoor_lights.Add(componentsInChildren[j]);
					LightInfo lightInfo = new LightInfo();
					lightInfo.color = componentsInChildren[j].color;
					info.indoor_lights.Add(lightInfo);
				}
			}
			Light[] componentsInChildren2 = custom_outdoors.GetComponentsInChildren<Light>();
			if (info.outdoor_lights != null)
			{
				for (int k = 0; k < componentsInChildren2.Length; k++)
				{
					outdoor_lights.Add(componentsInChildren2[k]);
					componentsInChildren2[k].color = info.outdoor_lights[k].color;
				}
			}
			else
			{
				info.outdoor_lights = new List<LightInfo>();
				for (int l = 0; l < componentsInChildren2.Length; l++)
				{
					outdoor_lights.Add(componentsInChildren2[l]);
					LightInfo lightInfo2 = new LightInfo();
					lightInfo2.color = componentsInChildren2[l].color;
					info.outdoor_lights.Add(lightInfo2);
				}
			}
			MeshRenderer[] componentsInChildren3 = custom_indoors.GetComponentsInChildren<MeshRenderer>();
			if (info.godrays != null)
			{
				for (int m = 0; m < componentsInChildren3.Length; m++)
				{
					godrays.Add(componentsInChildren3[m]);
					((Renderer)componentsInChildren3[m]).material.color = info.godrays[m].color;
				}
			}
			else
			{
				info.godrays = new List<GodrayInfo>();
				for (int n = 0; n < componentsInChildren3.Length; n++)
				{
					godrays.Add(componentsInChildren3[n]);
					GodrayInfo godrayInfo = new GodrayInfo();
					godrayInfo.color = ((Renderer)componentsInChildren3[n]).material.color;
					info.godrays.Add(godrayInfo);
				}
			}
			if (info.fog != null)
			{
				tod_changer.fogColor = info.fog.color;
				if (info.fog.enabled)
				{
					tod_changer.fogStart = info.fog.start;
					tod_changer.fogEnd = info.fog.end;
				}
				else
				{
					tod_changer.fogStart = 1E+21f;
					tod_changer.fogEnd = 1E+20f;
				}
			}
			else
			{
				info.fog = new FogInfo();
				info.fog.color = tod_changer.fogColor;
				info.fog.start = tod_changer.fogStart;
				info.fog.end = tod_changer.fogEnd;
				info.fog.enabled = true;
			}
			Light[] componentsInChildren4 = custom_outdoors.GetComponentsInChildren<Light>();
			foreach (Light item in componentsInChildren4)
			{
				new_lights.Add(item);
			}
			tod_changer.newLights = new_lights.ToArray();
			UpdateEffects();
			in_scene = true;
		}

		public void RemoveFromScene()
		{
			if (in_scene)
			{
				Object.Destroy((Object)(object)custom_indoors);
				Object.Destroy((Object)(object)custom_outdoors);
				Object.Destroy((Object)(object)custom_activator);
				tod_changer = null;
				obj_activator = null;
				uk_event = null;
				in_scene = false;
				indoor_lights.Clear();
				outdoor_lights.Clear();
				godrays.Clear();
			}
		}

		public void Clear()
		{
			RemoveFromScene();
			tod_changer = null;
			obj_activator = null;
			uk_event = null;
			in_scene = false;
		}

		public void LoadSkyboxFromPath(string path)
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			if (!File.Exists(path))
			{
				Debug.Log((object)("Error when trying to load skybox from path: " + path));
				return;
			}
			byte[] array = File.ReadAllBytes(path);
			if (info.skybox == null)
			{
				info.skybox = new SkyboxInfo();
			}
			info.skybox.texture = new Texture2D(0, 0, (TextureFormat)4, false);
			((Texture)info.skybox.texture).filterMode = (FilterMode)0;
			ImageConversion.LoadImage(info.skybox.texture, array);
			if ((Object)(object)skybox_mat != (Object)null)
			{
				skybox_mat.mainTexture = (Texture)(object)info.skybox.texture;
			}
		}

		public void LoadSkyboxFromData(byte[] data)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			Texture2D val = new Texture2D(0, 0, (TextureFormat)4, false);
			if (!ImageConversion.LoadImage(val, data))
			{
				Debug.Log((object)"Error when trying to load sandbox from data");
				return;
			}
			if (info.skybox == null)
			{
				info.skybox = new SkyboxInfo();
			}
			info.skybox.texture = val;
			((Texture)info.skybox.texture).filterMode = (FilterMode)0;
			if ((Object)(object)skybox_mat != (Object)null)
			{
				skybox_mat.mainTexture = (Texture)(object)info.skybox.texture;
			}
		}

		public void LoadSkyboxFromURL(string url)
		{
			UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
			((AsyncOperation)request.SendWebRequest()).completed += delegate
			{
				try
				{
					if (!request.isNetworkError && !request.isHttpError)
					{
						if (info.skybox == null)
						{
							info.skybox = new SkyboxInfo();
						}
						info.skybox.texture = DownloadHandlerTexture.GetContent(request);
						if ((Object)(object)skybox_mat != (Object)null)
						{
							skybox_mat.mainTexture = (Texture)(object)info.skybox.texture;
						}
					}
					else
					{
						Debug.Log((object)("Error when trying to load skybox from path/url: " + url));
					}
				}
				catch (Exception ex)
				{
					Debug.Log((object)ex);
				}
				finally
				{
					request.Dispose();
				}
			};
		}

		public void UpdateEffects()
		{
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: 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)
			if ((Object)(object)custom_indoors != (Object)null)
			{
				for (int i = 0; i < indoor_lights.Count; i++)
				{
					indoor_lights[i].color = info.indoor_lights[i].color;
				}
			}
			if ((Object)(object)custom_outdoors != (Object)null)
			{
				for (int j = 0; j < outdoor_lights.Count; j++)
				{
					outdoor_lights[j].color = info.outdoor_lights[j].color;
				}
			}
			if ((Object)(object)custom_indoors != (Object)null)
			{
				for (int k = 0; k < godrays.Count; k++)
				{
					((Renderer)godrays[k]).material.color = info.godrays[k].color;
				}
			}
			tod_changer.fogColor = info.fog.color;
			if (info.fog.enabled)
			{
				tod_changer.fogStart = info.fog.start;
				tod_changer.fogEnd = info.fog.end;
			}
			else
			{
				tod_changer.fogStart = 1E+25f;
				tod_changer.fogEnd = 1E+26f;
			}
			new_lights.Clear();
			Light[] componentsInChildren = custom_outdoors.GetComponentsInChildren<Light>();
			foreach (Light item in componentsInChildren)
			{
				new_lights.Add(item);
			}
			tod_changer.newLights = new_lights.ToArray();
		}
	}
	[BepInPlugin("ironfarm.uk.sandboxcustom", "SandboxCustomizer", "1.0.2")]
	public class Plugin : BaseUnityPlugin
	{
		private bool sandbox_loaded = false;

		private GameObject indoor_light_object = null;

		private GameObject outdoor_light_object = null;

		private Transform day_indoors = null;

		private Transform day_outdoors = null;

		public static List<CustomSandbox> sbs = new List<CustomSandbox>();

		private List<string> tex_path = new List<string>();

		public static string united_kingdom_path = Path.GetFullPath(Path.Combine(Application.dataPath, "..\\"));

		public static List<string> cg_skybox_paths = new List<string> { "Cybergrind\\Textures\\Skyboxes", "Cybergrind\\Textures\\Starbuster\\Skyboxes", "Cybergrind\\Textures\\Vvizard\\Skyboxes" };

		public static string data_folder_path = Path.Combine(Utils.ModDir(), "Data");

		public static string sandbox_folder_path = Path.Combine(Utils.ModDir(), "Sandboxes");

		public static string skybox_folder_path = Path.Combine(Utils.ModDir(), "Skyboxes");

		public static ConfigEntry<string> load_on_start;

		public static ConfigEntry<bool> remeber_last_sandbox;

		public static ConfigEntry<bool> auto_save_sandbox;

		public static ConfigEntry<float> tod_speed;

		public void Start()
		{
			AssetHandler.LoadBundle();
			AssetHandler.MakePrefabs();
			WhyDoesGettingAddressableNamesAtRuntimeHaveToBeSoHard.GetAddressKeys();
			Debug.Log((object)Application.dataPath);
			Debug.Log((object)Application.persistentDataPath);
			Debug.Log((object)"Lololo");
			load_on_start = ((BaseUnityPlugin)this).Config.Bind<string>("Sandbox", "Load_Sandbox_On_Start", "Day", (ConfigDescription)null);
			remeber_last_sandbox = ((BaseUnityPlugin)this).Config.Bind<bool>("Sandbox", "Remember_Last_Sandbox", true, (ConfigDescription)null);
			auto_save_sandbox = ((BaseUnityPlugin)this).Config.Bind<bool>("Sandbox", "Auto_Save_Sandbox", false, (ConfigDescription)null);
			tod_speed = ((BaseUnityPlugin)this).Config.Bind<float>("Sandbox", "Sandbox_Transition_Speed", 1f, (ConfigDescription)null);
			foreach (string item in Directory.EnumerateFiles(skybox_folder_path))
			{
				for (int i = 0; i < Utils.image_types.Count; i++)
				{
					if (string.Equals(Utils.image_types[i], Path.GetExtension(item), StringComparison.OrdinalIgnoreCase))
					{
						tex_path.Add(item);
						SandboxManager.tex_path.Add(item);
					}
				}
			}
			Debug.Log((object)"We did it reddit");
			SceneManager.sceneLoaded += SandboxLoadCheck;
			SceneManager.sceneUnloaded += SandboxUnloadCheck;
		}

		public void SandboxLoadCheck(Scene scene, LoadSceneMode sceneMode)
		{
			if (!(SceneHelper.CurrentScene == "uk_construct"))
			{
				return;
			}
			Debug.Log((object)"Custom Sandbox has Loaded");
			sandbox_loaded = true;
			CustomSandbox.MakeBaseSandbox();
			SandboxManager.Clear();
			SandboxManager.Setup();
			foreach (string item in Directory.EnumerateFiles(sandbox_folder_path))
			{
				if (string.Equals(".csb", Path.GetExtension(item), StringComparison.OrdinalIgnoreCase))
				{
					CustomSandbox customSandbox = new CustomSandbox();
					customSandbox.info = SandboxInfo.LoadInfo(item);
					if (customSandbox.info != null)
					{
						SandboxManager.AddSandbox(customSandbox);
					}
				}
			}
			SandboxManager.global_tod_speed = tod_speed.Value;
			SandboxManager.UpdateTODs();
			if (remeber_last_sandbox.Value)
			{
				GameObject value = null;
				if (!SandboxManager.vanilla_activators.TryGetValue(load_on_start.Value, out value))
				{
					foreach (CustomSandbox sandbox in SandboxManager.sandboxs)
					{
						if (sandbox.info.path == Path.Combine(sandbox_folder_path, load_on_start.Value))
						{
							SandboxManager.HardForceSandbox(sandbox);
							break;
						}
					}
					return;
				}
				SandboxManager.HardForceBaseSandbox(load_on_start.Value);
				SandboxManager.main_sandbox = load_on_start.Value;
			}
			else
			{
				((ConfigEntryBase)load_on_start).SetSerializedValue("Day");
			}
		}

		public void SandboxUnloadCheck(Scene scene)
		{
			if (SceneHelper.CurrentScene != "uk_construct" && sandbox_loaded)
			{
				Debug.Log((object)"Sandbox has Unloaded.");
				SandboxManager.Clear();
				sandbox_loaded = false;
			}
		}

		public void Update()
		{
			if (!sandbox_loaded)
			{
			}
		}
	}
	internal class PluginInfo
	{
		public const string Name = "SandboxCustomizer";

		public const string GUID = "ironfarm.uk.sandboxcustom";

		public const string Version = "1.0.2";
	}
	public class PointerAdder : MonoBehaviour
	{
		private ControllerPointer pointer;

		public List<UnityAction> on_pressed_actions = new List<UnityAction>();

		private void Awake()
		{
			if (!((Component)this).TryGetComponent<ControllerPointer>(ref pointer))
			{
				pointer = ((Component)this).gameObject.AddComponent<ControllerPointer>();
			}
			foreach (UnityAction on_pressed_action in on_pressed_actions)
			{
				pointer.OnPressed.AddListener(on_pressed_action);
			}
		}
	}
	public static class SandboxManager
	{
		private enum TODB
		{
			Left,
			Right,
			Add,
			Delete,
			Edit,
			Settings
		}

		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static UnityAction <>9__27_0;

			public static UnityAction <>9__27_1;

			public static UnityAction <>9__27_2;

			public static UnityAction <>9__27_3;

			public static UnityAction <>9__27_4;

			public static UnityAction <>9__27_5;

			public static UnityAction <>9__39_0;

			internal void <Setup>b__27_0()
			{
				if (tod_grid_index > 0)
				{
					tod_grid_index--;
				}
				UpdateGrid();
				Debug.Log((object)tod_grid_index);
			}

			internal void <Setup>b__27_1()
			{
				if (tod_grid_index < tod_grid_list.Count - 1)
				{
					tod_grid_index++;
				}
				UpdateGrid();
				Debug.Log((object)tod_grid_index);
			}

			internal void <Setup>b__27_2()
			{
				CustomSandbox customSandbox = new CustomSandbox();
				AddSandbox(customSandbox);
				if (tex_path.Count > 0)
				{
					string text = tex_path[Random.Range(0, tex_path.Count)];
					customSandbox.LoadSkyboxFromPath(text);
					customSandbox.info.skybox.name = text.Replace(Plugin.skybox_folder_path + "\\", "");
					customSandbox.info.skybox.name = customSandbox.info.skybox.name.Replace("PutSkyboxHere\\", "");
					CSBUtils.SetStringField("Skybox", customSandbox.info.skybox.name, 0, customSandbox.info.path);
				}
				UpdateGrid();
				Debug.Log((object)"Added sandbox");
			}

			internal void <Setup>b__27_3()
			{
				DeleteSandbox(sandbox_current);
				UpdateGrid();
				Debug.Log((object)"Removed sandbox");
			}

			internal void <Setup>b__27_4()
			{
				edit_panel.UpdateName();
				edit_panel.gameObject.SetActive(true);
				tod_panel.SetActive(false);
			}

			internal void <Setup>b__27_5()
			{
				settings_panel.remember_enabled = Plugin.remeber_last_sandbox.Value;
				settings_panel.auto_save_enabled = Plugin.auto_save_sandbox.Value;
				settings_panel.tod_slider.value = global_tod_speed;
				settings_panel.tod_speed_value.text = settings_panel.tod_slider.value.ToString("0.00");
				settings_panel.button_auto_save_img.SetActive(settings_panel.auto_save_enabled);
				settings_panel.button_remember_img.SetActive(settings_panel.remember_enabled);
				settings_panel.gameObject.SetActive(true);
				tod_panel.SetActive(false);
			}

			internal void <HardForceBaseSandbox>b__39_0()
			{
				RevertToDSpeedOnUnblock(target_base_tod);
			}
		}

		private static GameObject tod_grid;

		private static GameObject tod_changer;

		public static GameObject tod_panel;

		public static GameObject blocker;

		public static GameObject unblocker;

		public static float global_tod_speed = 1f;

		public static List<GameObject> tod_grid_list = new List<GameObject>();

		public static int tod_grid_index = 0;

		private static List<GameObject> tod_buttons = new List<GameObject>();

		private static int tod_button_total = 8;

		public static List<CustomSandbox> sandboxs = new List<CustomSandbox>();

		public static List<string> tex_path = new List<string>();

		public static GameObject base_tod_button;

		public static EditPanel edit_panel = new EditPanel();

		public static SettingsPanel settings_panel = new SettingsPanel();

		public static CustomSandbox sandbox_current = null;

		public static string main_sandbox = null;

		public static LightColorSlider cob = new LightColorSlider();

		private static bool is_setup = false;

		private static int todb_count = 6;

		public static GameObject[] shop_button_mover = (GameObject[])(object)new GameObject[todb_count];

		public static UnityEvent on_blocked_event = new UnityEvent();

		public static UnityEvent on_unblock_event = new UnityEvent();

		public static CustomSandbox dead_sandbox = new CustomSandbox();

		public static Dictionary<string, GameObject> vanilla_activators = new Dictionary<string, GameObject>();

		public static Dictionary<GameObject, string> activators_vanilla = new Dictionary<GameObject, string>();

		public static CustomSandbox backup_sandbox = null;

		public static GameObject target_activator;

		public static TimeOfDayChanger target_base_tod;

		private static bool load_sandboxes = false;

		public static void Setup()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Expected O, but got Unknown
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Expected O, but got Unknown
			//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Expected O, but got Unknown
			//IL_044e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0453: Unknown result type (might be due to invalid IL or missing references)
			//IL_0459: Expected O, but got Unknown
			//IL_0484: Unknown result type (might be due to invalid IL or missing references)
			//IL_0489: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Expected O, but got Unknown
			//IL_04ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c5: Expected O, but got Unknown
			//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fb: Expected O, but got Unknown
			//IL_0526: Unknown result type (might be due to invalid IL or missing references)
			//IL_052b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0531: Expected O, but got Unknown
			//IL_055c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0561: Unknown result type (might be due to invalid IL or missing references)
			//IL_0567: Expected O, but got Unknown
			if (is_setup)
			{
				return;
			}
			Utils.InitUIObjets();
			is_setup = true;
			tod_buttons = new List<GameObject>();
			sandboxs = new List<CustomSandbox>();
			on_blocked_event = new UnityEvent();
			on_unblock_event = new UnityEvent();
			dead_sandbox = new CustomSandbox();
			tod_changer = GameObject.Find("Sandbox Shop/Canvas/Border/TOD Changer");
			tod_panel = GameObject.Find("Sandbox Shop/Canvas/Border/TOD Changer/Panel");
			tod_grid = GameObject.Find("Sandbox Shop/Canvas/Border/TOD Changer/Panel/TOD Grid");
			blocker = GameObject.Find("Sandbox Shop/Canvas/Border/TOD Changer/Panel/Blocker");
			unblocker = blocker.GetComponent<ObjectActivator>().events.toActivateObjects[0];
			unblocker.AddComponent<BetterUnblocker>();
			vanilla_activators.Add("Dawn", ((Component)GameObject.Find("Activators").transform.Find("Dawn Activator")).gameObject);
			vanilla_activators.Add("Day", ((Component)GameObject.Find("Activators").transform.Find("Day Activator")).gameObject);
			vanilla_activators.Add("Dusk", ((Component)GameObject.Find("Activators").transform.Find("Dusk Activator")).gameObject);
			vanilla_activators.Add("Night", ((Component)GameObject.Find("Activators").transform.Find("Night Activator")).gameObject);
			vanilla_activators.Add("Night Darker", ((Component)GameObject.Find("Activators").transform.Find("Night Darker Activator")).gameObject);
			vanilla_activators.Add("Lust", ((Component)GameObject.Find("Activators").transform.Find("Lust Activator")).gameObject);
			vanilla_activators.Add("Greed", ((Component)GameObject.Find("Activators").transform.Find("Greed Activator")).gameObject);
			vanilla_activators.Add("Foggy", ((Component)GameObject.Find("Activators").transform.Find("Foggy Activator")).gameObject);
			foreach (KeyValuePair<string, GameObject> vanilla_activator in vanilla_activators)
			{
				activators_vanilla.Add(vanilla_activator.Value, vanilla_activator.Key);
			}
			base_tod_button = ((Component)Object.Instantiate<Transform>(tod_grid.transform.Find("Day"), tod_grid.transform)).gameObject;
			((Object)base_tod_button).name = "Base (Button)";
			base_tod_button.SetActive(false);
			blocker.GetComponent<ObjectActivator>().events.onActivate.AddListener(new UnityAction(onBlocked));
			unblocker.GetComponent<ObjectActivator>().events.onActivate.AddListener(new UnityAction(onUnblock));
			shop_button_mover[0] = Utils.CloneButtonForShop(AssetHandler.LoadAsset<GameObject>("button left"), tod_panel.transform);
			shop_button_mover[1] = Utils.CloneButtonForShop(AssetHandler.LoadAsset<GameObject>("button right"), tod_panel.transform);
			shop_button_mover[2] = Utils.CloneButtonForShop(AssetHandler.LoadAsset<GameObject>("button add"), tod_panel.transform);
			shop_button_mover[3] = Utils.CloneButtonForShop(AssetHandler.LoadAsset<GameObject>("button delete"), tod_panel.transform);
			shop_button_mover[4] = Utils.CloneButtonForShop(AssetHandler.LoadAsset<GameObject>("button edit"), tod_panel.transform);
			shop_button_mover[5] = Utils.CloneButtonForShop(AssetHandler.LoadAsset<GameObject>("button settings"), tod_panel.transform);
			edit_panel.Create(tod_changer.transform);
			edit_panel.gameObject.SetActive(false);
			settings_panel.Create(tod_changer.transform);
			settings_panel.gameObject.SetActive(false);
			tod_grid_list.Add(tod_grid);
			UpdateGrid();
			UpdateTODs();
			List<UnityAction> on_pressed_actions = shop_button_mover[0].GetComponent<PointerAdder>().on_pressed_actions;
			object obj = <>c.<>9__27_0;
			if (obj == null)
			{
				UnityAction val = delegate
				{
					if (tod_grid_index > 0)
					{
						tod_grid_index--;
					}
					UpdateGrid();
					Debug.Log((object)tod_grid_index);
				};
				<>c.<>9__27_0 = val;
				obj = (object)val;
			}
			on_pressed_actions.Add((UnityAction)obj);
			List<UnityAction> on_pressed_actions2 = shop_button_mover[1].GetComponent<PointerAdder>().on_pressed_actions;
			object obj2 = <>c.<>9__27_1;
			if (obj2 == null)
			{
				UnityAction val2 = delegate
				{
					if (tod_grid_index < tod_grid_list.Count - 1)
					{
						tod_grid_index++;
					}
					UpdateGrid();
					Debug.Log((object)tod_grid_index);
				};
				<>c.<>9__27_1 = val2;
				obj2 = (object)val2;
			}
			on_pressed_actions2.Add((UnityAction)obj2);
			List<UnityAction> on_pressed_actions3 = shop_button_mover[2].GetComponent<PointerAdder>().on_pressed_actions;
			object obj3 = <>c.<>9__27_2;
			if (obj3 == null)
			{
				UnityAction val3 = delegate
				{
					CustomSandbox customSandbox = new CustomSandbox();
					AddSandbox(customSandbox);
					if (tex_path.Count > 0)
					{
						string text = tex_path[Random.Range(0, tex_path.Count)];
						customSandbox.LoadSkyboxFromPath(text);
						customSandbox.info.skybox.name = text.Replace(Plugin.skybox_folder_path + "\\", "");
						customSandbox.info.skybox.name = customSandbox.info.skybox.name.Replace("PutSkyboxHere\\", "");
						CSBUtils.SetStringField("Skybox", customSandbox.info.skybox.name, 0, customSandbox.info.path);
					}
					UpdateGrid();
					Debug.Log((object)"Added sandbox");
				};
				<>c.<>9__27_2 = val3;
				obj3 = (object)val3;
			}
			on_pressed_actions3.Add((UnityAction)obj3);
			List<UnityAction> on_pressed_actions4 = shop_button_mover[3].GetComponent<PointerAdder>().on_pressed_actions;
			object obj4 = <>c.<>9__27_3;
			if (obj4 == null)
			{
				UnityAction val4 = delegate
				{
					DeleteSandbox(sandbox_current);
					UpdateGrid();
					Debug.Log((object)"Removed sandbox");
				};
				<>c.<>9__27_3 = val4;
				obj4 = (object)val4;
			}
			on_pressed_actions4.Add((UnityAction)obj4);
			List<UnityAction> on_pressed_actions5 = shop_button_mover[4].GetComponent<PointerAdder>().on_pressed_actions;
			object obj5 = <>c.<>9__27_4;
			if (obj5 == null)
			{
				UnityAction val5 = delegate
				{
					edit_panel.UpdateName();
					edit_panel.gameObject.SetActive(true);
					tod_panel.SetActive(false);
				};
				<>c.<>9__27_4 = val5;
				obj5 = (object)val5;
			}
			on_pressed_actions5.Add((UnityAction)obj5);
			List<UnityAction> on_pressed_actions6 = shop_button_mover[5].GetComponent<PointerAdder>().on_pressed_actions;
			object obj6 = <>c.<>9__27_5;
			if (obj6 == null)
			{
				UnityAction val6 = delegate
				{
					settings_panel.remember_enabled = Plugin.remeber_last_sandbox.Value;
					settings_panel.auto_save_enabled = Plugin.auto_save_sandbox.Value;
					settings_panel.tod_slider.value = global_tod_speed;
					settings_panel.tod_speed_value.text = settings_panel.tod_slider.value.ToString("0.00");
					settings_panel.button_auto_save_img.SetActive(settings_panel.auto_save_enabled);
					settings_panel.button_remember_img.SetActive(settings_panel.remember_enabled);
					settings_panel.gameObject.SetActive(true);
					tod_panel.SetActive(false);
				};
				<>c.<>9__27_5 = val6;
				obj6 = (object)val6;
			}
			on_pressed_actions6.Add((UnityAction)obj6);
		}

		public static void AddSandbox(CustomSandbox sandbox)
		{
			tod_button_total++;
			if (8 * tod_grid_list.Count() < tod_button_total)
			{
				GameObject val = Object.Instantiate<GameObject>(tod_grid, tod_grid.transform.parent);
				int childCount = val.transform.childCount;
				for (int i = 0; i < childCount; i++)
				{
					Object.Destroy((Object)(object)((Component)val.transform.GetChild(i)).gameObject);
				}
				tod_grid_list.Add(val);
				UpdateGrid();
			}
			sandbox.AddToScene();
			sandbox.tod_changer.speedMultiplier = global_tod_speed;
			sandboxs.Add(sandbox);
			GameObject gameObject = Object.Instantiate<GameObject>(base_tod_button, tod_grid_list[tod_grid_list.Count() - 1].transform).gameObject;
			gameObject.SetActive(true);
			((Object)gameObject).name = "Custom (Button)";
			gameObject.GetComponent<ShopButton>().toActivate[0] = sandbox.custom_activator;
			tod_buttons.Add(gameObject);
			UpdateDisableList();
			SandboxInfo.SaveInfo(sandbox.info);
			if (!Plugin.sbs.Contains(sandbox))
			{
				Plugin.sbs.Add(sandbox);
			}
		}

		public static void MakeDeadSandbox()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			dead_sandbox.AddToScene();
			for (int i = 0; i < dead_sandbox.info.outdoor_lights.Count; i++)
			{
				dead_sandbox.info.outdoor_lights[i].color = Color.black;
			}
			for (int j = 0; j < dead_sandbox.info.indoor_lights.Count; j++)
			{
				dead_sandbox.info.indoor_lights[j].color = Color.black;
			}
			dead_sandbox.skybox_mat.SetColor("_Tint", Color.black);
			dead_sandbox.UpdateEffects();
			UpdateDisableList();
		}

		public static void DeleteSandbox(CustomSandbox sandbox, bool delete_save = true)
		{
			if (!sandboxs.Contains(sandbox))
			{
				Debug.Log((object)"Sandbox being deleted is not in list");
				return;
			}
			if (File.Exists(sandbox.info.path) && delete_save)
			{
				File.Delete(sandbox.info.path);
			}
			int num = sandboxs.IndexOf(sandbox);
			bool flag = false;
			if (sandbox == sandbox_current)
			{
				flag = true;
			}
			if (flag)
			{
				if (num < sandboxs.Count - 1)
				{
					ForceSandbox(sandboxs[num + 1]);
				}
				else if (num > 0)
				{
					ForceSandbox(sandboxs[num - 1]);
				}
				else
				{
					((Component)GameObject.Find("Activators").transform.Find("Day Activator")).gameObject.SetActive(true);
					blocker.SetActive(true);
					sandbox_current = null;
				}
			}
			int num2 = num / 8 + 1;
			tod_button_total--;
			Object.Destroy((Object)(object)tod_buttons[num]);
			tod_buttons.RemoveAt(num);
			if (num2 < tod_grid_list.Count - 1)
			{
				for (int i = num2; i < tod_grid_list.Count - 1; i++)
				{
					GameObject gameObject = ((Component)tod_grid_list[i + 1].transform.GetChild(0)).gameObject;
					gameObject.transform.SetParent(tod_grid_list[i].transform);
				}
				if (tod_grid_list[tod_grid_list.Count - 1].transform.childCount == 0)
				{
					Object.Destroy((Object)(object)tod_grid_list[tod_grid_list.Count - 1]);
					tod_grid_list.RemoveAt(tod_grid_list.Count - 1);
				}
			}
			else if (tod_button_total % 8 == 0)
			{
				Object.Destroy((Object)(object)tod_grid_list[num2]);
				tod_grid_list.RemoveAt(num2);
				if (num2 == tod_grid_index)
				{
					tod_grid_index--;
				}
			}
			UpdateGrid();
			UpdateDisableList();
			if (Plugin.sbs.Contains(sandbox))
			{
				Plugin.sbs.Remove(sandbox);
			}
			if (flag)
			{
				sandbox.RemoveFromScene();
				sandboxs.RemoveAt(num);
			}
			else
			{
				sandbox.RemoveFromScene();
				sandboxs.RemoveAt(num);
			}
		}

		public static void RefreshSkybox()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			if (backup_sandbox != null)
			{
				ForceSandbox(backup_sandbox);
				sandbox_current = backup_sandbox;
			}
			on_unblock_event.RemoveListener(new UnityAction(RefreshSkybox));
		}

		public static void smile()
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			Debug.Log((object)"I LIED >:(");
			on_unblock_event.RemoveListener(new UnityAction(smile));
		}

		public static void ForceSandbox(CustomSandbox sandbox)
		{
			if (sandboxs.Contains(sandbox))
			{
				int num = sandboxs.IndexOf(sandbox);
				sandbox.custom_activator.SetActive(true);
				blocker.SetActive(true);
			}
		}

		public static void HardForceSandbox(CustomSandbox sandbox)
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			if (sandboxs.Contains(sandbox))
			{
				int num = sandboxs.IndexOf(sandbox);
				sandbox.tod_changer.speedMultiplier = 10000000f;
				sandbox.custom_activator.SetActive(true);
				sandbox_current = sandbox;
				on_unblock_event.AddListener((UnityAction)delegate
				{
					RevertToDSpeedOnUnblock(sandbox.tod_changer);
				});
				blocker.SetActive(true);
			}
		}

		public static void ForceBaseSandbox(string name)
		{
			target_activator = null;
			vanilla_activators.TryGetValue(name, out target_activator);
			if ((Object)(object)target_activator != (Object)null)
			{
				target_activator.SetActive(true);
				blocker.SetActive(true);
			}
			else
			{
				Debug.Log((object)"You dumb and reactive frendo");
			}
		}

		public static void HardForceBaseSandbox(string name)
		{
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			target_activator = null;
			vanilla_activators.TryGetValue(name, out target_activator);
			if ((Object)(object)target_activator != (Object)null)
			{
				target_base_tod = ((Component)target_activator.transform.GetChild(0)).GetComponent<TimeOfDayChanger>();
				target_base_tod.speedMultiplier = 10000000f;
				target_activator.SetActive(true);
				UnityEvent obj = on_unblock_event;
				object obj2 = <>c.<>9__39_0;
				if (obj2 == null)
				{
					UnityAction val = delegate
					{
						RevertToDSpeedOnUnblock(target_base_tod);
					};
					<>c.<>9__39_0 = val;
					obj2 = (object)val;
				}
				obj.AddListener((UnityAction)obj2);
				blocker.SetActive(true);
			}
			else
			{
				Debug.Log((object)"You dumb and reactive frendo");
			}
		}

		public static void RevertToDSpeedOnUnblock(TimeOfDayChanger tod)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			if ((Object)(object)tod != (Object)null)
			{
				tod.speedMultiplier = global_tod_speed;
			}
			on_unblock_event.RemoveListener((UnityAction)delegate
			{
				RevertToDSpeedOnUnblock(tod);
			});
		}

		public static void UpdateGrid()
		{
			foreach (GameObject item in tod_grid_list)
			{
				item.SetActive(false);
			}
			tod_grid_list[tod_grid_index].SetActive(true);
			if (tod_grid_index == 0)
			{
				shop_button_mover[0].SetActive(false);
			}
			else
			{
				shop_button_mover[0].SetActive(true);
			}
			if (tod_grid_index == tod_grid_list.Count - 1)
			{
				shop_button_mover[1].SetActive(false);
			}
			else
			{
				shop_button_mover[1].SetActive(true);
			}
			if (tod_buttons.Count == 0 || sandbox_current == null)
			{
				shop_button_mover[3].SetActive(false);
				shop_button_mover[4].SetActive(false);
			}
			else
			{
				shop_button_mover[3].SetActive(true);
				shop_button_mover[4].SetActive(true);
			}
			shop_button_mover[5].SetActive(true);
		}

		public static void UpdateDisableList()
		{
			Transform transform = GameObject.Find("Activators").transform;
			Transform transform2 = GameObject.Find("IndoorsLighting").transform;
			Transform transform3 = GameObject.Find("OutdoorsLighting").transform;
			List<GameObject> list = new List<GameObject>();
			List<GameObject> list2 = new List<GameObject>();
			for (int i = 0; i < transform2.childCount; i++)
			{
				list.Add(((Component)transform2.GetChild(i)).gameObject);
			}
			for (int j = 0; j < transform.childCount; j++)
			{
				list.Add(((Component)transform.GetChild(j)).gameObject);
			}
			list.Add(((Component)transform.Find("Dawn Activator")).GetComponent<ObjectActivator>().events.toActivateObjects[2]);
			list.Add(((Component)transform.Find("Night Activator")).GetComponent<ObjectActivator>().events.toActivateObjects[2]);
			list.Add(((Component)transform.Find("Foggy Activator")).GetComponent<ObjectActivator>().events.toActivateObjects[2]);
			for (int k = 0; k < transform3.childCount; k++)
			{
				list2.Add(((Component)transform3.GetChild(k)).gameObject);
			}
			for (int l = 0; l < transform.childCount; l++)
			{
				List<GameObject> list3 = list.ToList();
				List<GameObject> list4 = new List<GameObject>();
				List<GameObject> list5 = ((Component)transform.GetChild(l)).GetComponent<ObjectActivator>().events.toActivateObjects.ToList();
				list5.Add(((Component)transform.GetChild(l)).gameObject);
				foreach (GameObject item in list3)
				{
					if (((Object)item).name == "IndoorsGarage" || ((Object)item).name == "IndoorsBuilding")
					{
						list4.Add(item);
					}
					foreach (GameObject item2 in list5)
					{
						if ((Object)(object)item == (Object)(object)item2)
						{
							list4.Add(item);
						}
					}
				}
				foreach (GameObject item3 in list4)
				{
					list3.Remove(item3);
				}
				((Component)transform.GetChild(l)).GetComponent<ObjectActivator>().events.toDisActivateObjects = list3.ToArray();
				List<GameObject> list6 = list2.ToList();
				List<GameObject> list7 = new List<GameObject>();
				List<GameObject> list8 = new List<GameObject>();
				foreach (GameObject item4 in list6)
				{
					foreach (GameObject item5 in list5)
					{
						if ((Object)(object)item4 == (Object)(object)item5)
						{
							list7.Add(item4);
						}
					}
				}
				foreach (GameObject item6 in list7)
				{
					list6.Remove(item6);
				}
				List<Light> list9 = new List<Light>();
				foreach (GameObject item7 in list6)
				{
					for (int m = 0; m < item7.transform.childCount; m++)
					{
						if (((Object)item7.transform.GetChild(m)).name.Contains("Directional Light"))
						{
							list9.Add(((Component)item7.transform.GetChild(m)).GetComponent<Light>());
						}
					}
				}
				((Component)transform.GetChild(l).Find("TOD Changer")).gameObject.GetComponent<TimeOfDayChanger>().oldLights = list9.ToArray();
			}
			UpdateTODs();
		}

		public static void UpdateTODs()
		{
			Transform transform = GameObject.Find("Activators").transform;
			for (int i = 0; i < transform.childCount; i++)
			{
				((Component)transform.GetChild(i).Find("TOD Changer")).gameObject.GetComponent<TimeOfDayChanger>().speedMultiplier = global_tod_speed;
			}
		}

		public static void SaveSandboxes()
		{
			foreach (CustomSandbox sandbox in sandboxs)
			{
				SandboxInfo.SaveInfo(sandbox.info);
			}
		}

		public static void DeleteSandboxes()
		{
			if (sandbox_current != null)
			{
				((Component)GameObject.Find("Activators").transform.Find("Day Activator")).gameObject.SetActive(true);
				blocker.SetActive(true);
				sandbox_current = null;
			}
			while (sandboxs.Count != 0)
			{
				DeleteSandbox(sandboxs[0]);
			}
		}

		public static void ReloadSandboxes()
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Expected O, but got Unknown
			if (sandbox_current != null)
			{
				ForceBaseSandbox("Day");
				((ConfigEntryBase)Plugin.load_on_start).SetSerializedValue("Day");
				sandbox_current = null;
			}
			while (sandboxs.Count != 0)
			{
				DeleteSandbox(sandboxs[0], delete_save: false);
			}
			if (!load_sandboxes)
			{
				on_unblock_event.AddListener(new UnityAction(LoadSandboxes));
				blocker.SetActive(true);
				load_sandboxes = true;
			}
		}

		public static void LoadSandboxes()
		{
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected O, but got Unknown
			foreach (string item in Directory.EnumerateFiles(Plugin.sandbox_folder_path))
			{
				if (string.Equals(".csb", Path.GetExtension(item), StringComparison.OrdinalIgnoreCase))
				{
					CustomSandbox customSandbox = new CustomSandbox();
					customSandbox.info = SandboxInfo.LoadInfo(item);
					if (customSandbox.info != null)
					{
						AddSandbox(customSandbox);
					}
				}
			}
			on_unblock_event.RemoveListener(new UnityAction(LoadSandboxes));
			load_sandboxes = false;
		}

		public static void doAThing()
		{
			if (is_setup && sandboxs == null)
			{
			}
		}

		public static void onBlocked()
		{
			foreach (GameObject item in tod_grid_list)
			{
				item.SetActive(false);
			}
			for (int i = 0; i < todb_count; i++)
			{
				shop_button_mover[i].SetActive(false);
			}
			on_blocked_event.Invoke();
		}

		public static void onUnblock()
		{
			for (int i = 0; i < todb_count; i++)
			{
				shop_button_mover[i].SetActive(true);
			}
			UpdateGrid();
			on_unblock_event.Invoke();
		}

		public static void Clear()
		{
			tod_button_total = 8;
			tod_grid = null;
			tod_grid_list = new List<GameObject>();
			tod_grid_index = 0;
			tod_changer = null;
			tod_buttons = new List<GameObject>();
			foreach (CustomSandbox sandbox in sandboxs)
			{
				sandbox.Clear();
			}
			sandboxs = new List<CustomSandbox>();
			sandbox_current = null;
			backup_sandbox = null;
			tod_panel = null;
			shop_button_mover = (GameObject[])(object)new GameObject[todb_count];
			((UnityEventBase)on_unblock_event).RemoveAllListeners();
			((UnityEventBase)on_blocked_event).RemoveAllListeners();
			vanilla_activators.Clear();
			activators_vanilla.Clear();
			load_sandboxes = false;
			is_setup = false;
		}
	}
	public static class Utils
	{
		public static List<string> image_types = new List<string> { ".jpeg", ".jpg", ".png", ".bmp" };

		private static GameObject shop_slider_base = null;

		private static GameObject shop_button_base = null;

		public static string ModDir()
		{
			return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
		}

		public static T CopyComponent<T>(T original, GameObject destination) where T : Component
		{
			Type type = ((object)original).GetType();
			Component val = destination.AddComponent(type);
			FieldInfo[] fields = type.GetFields();
			FieldInfo[] array = fields;
			foreach (FieldInfo fieldInfo in array)
			{
				fieldInfo.SetValue(val, fieldInfo.GetValue(original));
			}
			return (T)(object)((val is T) ? val : null);
		}

		public static List<string> LayerMaskNames(LayerMask lmask)
		{
			List<string> list = new List<string>();
			int num = 1;
			for (int i = 0; i < 32; i++)
			{
				if ((((LayerMask)(ref lmask)).value & num) > 0)
				{
					list.Add(LayerMask.LayerToName(i));
					Debug.Log((object)(LayerMask.LayerToName(i) + " " + i));
				}
				num *= 2;
			}
			return list;
		}

		public static void InitUIObjets()
		{
			shop_slider_base = GameObject.Find("Shop/Canvas/Weapons/RevolverWindow/Color Screen/Standard/Custom/Unlocked/Color 1/Red/Slider");
			shop_button_base = GameObject.Find("Sandbox Shop/Canvas/Border/TOD Changer/Panel/Close Button");
		}

		public static GameObject CloneButtonForShop(GameObject button_base, Transform transform)
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)shop_button_base == (Object)null)
			{
				Debug.Log((object)"Couldn;t clode the buteon");
				return null;
			}
			GameObject val = Object.Instantiate<GameObject>(shop_button_base, transform);
			Object.Destroy((Object)(object)((Component)val.transform.Find("Text")).gameObject);
			val.transform.localPosition = button_base.transform.localPosition;
			for (int i = 0; i < button_base.transform.childCount; i++)
			{
				if (!(((Object)button_base.transform.GetChild(i)).name == "Panel"))
				{
					Object.Instantiate<Transform>(button_base.transform.GetChild(i), val.transform);
				}
			}
			((Object)val).name = ((Object)button_base).name;
			val.GetComponent<RectTransform>().anchoredPosition = button_base.GetComponent<RectTransform>().anchoredPosition;
			val.GetComponent<RectTransform>().anchoredPosition3D = button_base.GetComponent<RectTransform>().anchoredPosition3D;
			val.GetComponent<RectTransform>().anchorMax = button_base.GetComponent<RectTransform>().anchorMax;
			val.GetComponent<RectTransform>().anchorMin = button_base.GetComponent<RectTransform>().anchorMin;
			val.GetComponent<RectTransform>().offsetMin = button_base.GetComponent<RectTransform>().offsetMin;
			val.GetComponent<RectTransform>().offsetMax = button_base.GetComponent<RectTransform>().offsetMax;
			val.GetComponent<ShopButton>().toActivate = (GameObject[])(object)new GameObject[0];
			val.GetComponent<ShopButton>().toDeactivate = (GameObject[])(object)new GameObject[0];
			val.AddComponent<PointerAdder>();
			return val;
		}

		public static GameObject ReplaceButtonForShop(GameObject button_base, Transform transform)
		{
			GameObject result = CloneButtonForShop(button_base, transform);
			Object.Destroy((Object)(object)button_base);
			return result;
		}

		public static GameObject CloneSliderForShop(GameObject slider_base, Transform transform)
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)shop_slider_base == (Object)null)
			{
				Debug.Log((object)"codit colne ths ikdler");
				return null;
			}
			GameObject val = Object.Instantiate<GameObject>(shop_slider_base, transform);
			val.SetActive(true);
			val.transform.localPosition = slider_base.transform.localPosition;
			((Object)val).name = ((Object)slider_base).name;
			val.GetComponent<RectTransform>().anchoredPosition = slider_base.GetComponent<RectTransform>().anchoredPosition;
			val.GetComponent<RectTransform>().anchoredPosition3D = slider_base.GetComponent<RectTransform>().anchoredPosition3D;
			val.GetComponent<RectTransform>().anchorMax = slider_base.GetComponent<RectTransform>().anchorMax;
			val.GetComponent<RectTransform>().anchorMin = slider_base.GetComponent<RectTransform>().anchorMin;
			val.GetComponent<RectTransform>().offsetMin = slider_base.GetComponent<RectTransform>().offsetMin;
			val.GetComponent<RectTransform>().offsetMax = slider_base.GetComponent<RectTransform>().offsetMax;
			((Graphic)((Component)val.transform.Find("Background")).GetComponent<Image>()).color = ((Graphic)((Component)slider_base.transform.Find("Background")).GetComponent<Image>()).color;
			((Graphic)((Component)val.transform.Find("Fill Area/Fill")).GetComponent<Image>()).color = ((Graphic)((Component)slider_base.transform.Find("Fill Area/Fill")).GetComponent<Image>()).color;
			((Graphic)((Component)val.transform.Find("Handle Slide Area/Handle")).GetComponent<Image>()).color = ((Graphic)((Component)slider_base.transform.Find("Handle Slide Area/Handle")).GetComponent<Image>()).color;
			Object.Destroy((Object)(object)((Component)val.transform.Find("Value")).gameObject);
			val.GetComponent<Slider>().onValueChanged = slider_base.GetComponent<Slider>().onValueChanged;
			slider_base.SetActive(false);
			return val;
		}

		public static GameObject ReplaceSliderForShop(GameObject slider_base, Transform transform)
		{
			GameObject result = CloneSliderForShop(slider_base, transform);
			Object.Destroy((Object)(object)slider_base);
			return result;
		}

		public static int[] BitCountFinder(int num)
		{
			if (num < 1)
			{
				Debug.Log((object)"bruh");
				return null;
			}
			int num2 = (int)Math.Ceiling(Math.Log(num + 1, 2.0));
			int num3 = num2;
			int[] array = new int[num3];
			for (int i = 0; i < num2; i++)
			{
				array[i] = 0;
			}
			int num4 = 0;
			for (int j = 0; j < num + 1; j++)
			{
				num4 = 0;
				for (int k = 0; k < num2; k++)
				{
					if (((int)Math.Pow(2.0, k) & j) > 0)
					{
						num4++;
					}
				}
				if (num4 > 0)
				{
					array[num4 - 1]++;
				}
			}
			for (int l = 0; l < num2; l++)
			{
				Debug.Log((object)(l + 1 + ": " + array[l]));
			}
			return array;
		}
	}
	public static class AssetHandler
	{
		public static AssetBundle bundle;

		public static bool bundleLoaded;

		public static GameObject edit_panel;

		public static GameObject light_panel;

		public static GameObject light_color_slider;

		public static GameObject skybox_panel;

		public static GameObject fog_panel;

		public static GameObject misc_panel;

		public static GameObject settings_panel;

		public static void LoadBundle()
		{
			if (bundleLoaded)
			{
				Debug.Log((object)"Bundle already loaded");
				return;
			}
			bundle = AssetBundle.LoadFromFile(Path.Combine(Path.Combine(Utils.ModDir(), "Data"), "custom_sandbox_assets"));
			if ((Object)(object)bundle != (Object)null)
			{
				Debug.Log((object)"Bundle successfully loaded");
				bundleLoaded = true;
			}
			else
			{
				Debug.Log((object)"Bundle failed to loaded");
				bundleLoaded = false;
			}
		}

		public static T LoadAsset<T>(string name) where T : Object
		{
			if (!bundleLoaded)
			{
				Debug.Log((object)"Bundle is not loaded");
				return default(T);
			}
			T val = bundle.LoadAsset<T>(name);
			if ((Object)(object)val == (Object)null)
			{
				Debug.Log((object)(name + " didn't load"));
			}
			return val;
		}

		public static void UnloadBundle()
		{
			if (!bundleLoaded)
			{
				Debug.Log((object)"Bundle already unloaded");
				return;
			}
			Debug.Log((object)"Bundle succesfully unloaded");
			bundle.Unload(true);
			bundle = null;
		}

		public static void MakePrefabs()
		{
			edit_panel = AssetHandler.LoadAsset<GameObject>("EditPanel");
			edit_panel.AddComponent<HudOpenEffect>();
			light_panel = AssetHandler.LoadAsset<GameObject>("LightColorPanel");
			light_panel.AddComponent<HudOpenEffect>();
			light_color_slider = AssetHandler.LoadAsset<GameObject>("LightColorSlider");
			skybox_panel = AssetHandler.LoadAsset<GameObject>("SkyboxPanel");
			skybox_panel.AddComponent<HudOpenEffect>();
			fog_panel = AssetHandler.LoadAsset<GameObject>("FogPanel");
			fog_panel.AddComponent<HudOpenEffect>();
			misc_panel = AssetHandler.LoadAsset<GameObject>("MiscPanel");
			misc_panel.AddComponent<HudOpenEffect>();
			settings_panel = AssetHandler.LoadAsset<GameObject>("SettingsPanel");
			settings_panel.AddComponent<HudOpenEffect>();
		}
	}
	public static class WhyDoesGettingAddressableNamesAtRuntimeHaveToBeSoHard
	{
		public static async void GetAddressKeys()
		{
			AsyncOperationHandle<IResourceLocator> thingy = Addressables.LoadContentCatalogAsync("Where the catalog json is", (string)null);
			await thingy.Task;
			List<string> addressKeys = new List<string>();
			IResourceLocator resLocator = thingy.Result;
			if (resLocator == null)
			{
				return;
			}
			if (resLocator != null)
			{
				Debug.Log((object)"YEAAAAAAH");
				foreach (object key in resLocator.Keys)
				{
					addressKeys.Add(key.ToString());
					Debug.Log((object)key.ToString());
				}
				File.WriteAllLines(Path.Combine("Path you want to save the cataloge"), addressKeys);
			}
			else
			{
				Debug.Log((object)"Aw fiddlesticks");
			}
		}
	}
}
namespace SandboxCustomizer.UI
{
	public class EditPanel
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static UnityAction <>9__13_2;

			internal void <Create>b__13_2()
			{
				if (SandboxManager.sandbox_current.info.path != null)
				{
					SandboxManager.sandbox_current.info = SandboxInfo.LoadInfo(SandboxManager.sandbox_current.info.path);
					string path = "bruh";
					if (File.Exists(Path.Combine(Plugin.skybox_folder_path, SandboxManager.sandbox_current.info.skybox.name)))
					{
						path = Path.Combine(Plugin.skybox_folder_path, SandboxManager.sandbox_current.info.skybox.name);
					}
					else if (File.Exists(Path.Combine(Plugin.skybox_folder_path, "PutSkyboxHere", SandboxManager.sandbox_current.info.skybox.name)))
					{
						path = Path.Combine(Plugin.skybox_folder_path, "PutSkyboxHere", SandboxManager.sandbox_current.info.skybox.name);
					}
					SandboxManager.sandbox_current.LoadSkyboxFromPath(path);
					SandboxManager.sandbox_current.UpdateEffects();
					RenderSettings.skybox = SandboxManager.sandbox_current.skybox_mat;
				}
			}
		}

		public GameObject gameObject;

		public GameObject button_lights;

		public GameObject button_skybox;

		public GameObject button_fog;

		public GameObject button_misc;

		public Text sandbox_name;

		public GameObject button_save;

		public GameObject button_refresh;

		public GameObject button_back;

		public LightColorPanel light_panel;

		public SkyboxPanel skybox_panel;

		public FogPanel fog_panel;

		public MiscPanel misc_panel;

		public void Create(Transform transform)
		{
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Expected O, but got Unknown
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Expected O, but got Unknown
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: Expected O, but got Unknown
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Expected O, but got Unknown
			//IL_032b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Expected O, but got Unknown
			//IL_034d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Expected O, but got Unknown
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ca: Expected O, but got Unknown
			gameObject = Object.Instantiate<GameObject>(AssetHandler.edit_panel, transform);
			button_lights = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button lights")).gameObject, gameObject.transform);
			button_skybox = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button skybox")).gameObject, gameObject.transform);
			button_fog = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button fog")).gameObject, gameObject.transform);
			button_misc = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button misc")).gameObject, gameObject.transform);
			sandbox_name = ((Component)gameObject.transform.Find("SandboxName")).gameObject.GetComponent<Text>();
			button_save = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button save")).gameObject, gameObject.transform);
			button_refresh = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button refresh")).gameObject, gameObject.transform);
			button_back = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button back")).gameObject, gameObject.transform);
			light_panel = new LightColorPanel();
			light_panel.Create(gameObject.transform);
			light_panel.gameObject.SetActive(false);
			skybox_panel = new SkyboxPanel();
			skybox_panel.Create(gameObject.transform);
			skybox_panel.gameObject.SetActive(false);
			fog_panel = new FogPanel();
			fog_panel.Create(gameObject.transform);
			fog_panel.gameObject.SetActive(false);
			misc_panel = new MiscPanel();
			misc_panel.Create(gameObject.transform);
			misc_panel.gameObject.SetActive(false);
			button_back.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				SandboxManager.tod_panel.SetActive(true);
				gameObject.SetActive(false);
			});
			button_save.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				if (SandboxManager.sandbox_current != null)
				{
					SandboxInfo.SaveInfo(SandboxManager.sandbox_current.info);
					((ConfigEntryBase)Plugin.load_on_start).SetSerializedValue(SandboxManager.sandbox_current.info.path.Replace(Plugin.sandbox_folder_path + "\\", ""));
				}
				UpdateName();
			});
			List<UnityAction> on_pressed_actions = button_refresh.GetComponent<PointerAdder>().on_pressed_actions;
			object obj = <>c.<>9__13_2;
			if (obj == null)
			{
				UnityAction val = delegate
				{
					if (SandboxManager.sandbox_current.info.path != null)
					{
						SandboxManager.sandbox_current.info = SandboxInfo.LoadInfo(SandboxManager.sandbox_current.info.path);
						string path = "bruh";
						if (File.Exists(Path.Combine(Plugin.skybox_folder_path, SandboxManager.sandbox_current.info.skybox.name)))
						{
							path = Path.Combine(Plugin.skybox_folder_path, SandboxManager.sandbox_current.info.skybox.name);
						}
						else if (File.Exists(Path.Combine(Plugin.skybox_folder_path, "PutSkyboxHere", SandboxManager.sandbox_current.info.skybox.name)))
						{
							path = Path.Combine(Plugin.skybox_folder_path, "PutSkyboxHere", SandboxManager.sandbox_current.info.skybox.name);
						}
						SandboxManager.sandbox_current.LoadSkyboxFromPath(path);
						SandboxManager.sandbox_current.UpdateEffects();
						RenderSettings.skybox = SandboxManager.sandbox_current.skybox_mat;
					}
				};
				<>c.<>9__13_2 = val;
				obj = (object)val;
			}
			on_pressed_actions.Add((UnityAction)obj);
			button_lights.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Expected O, but got Unknown
				//IL_0150: Unknown result type (might be due to invalid IL or missing references)
				//IL_016f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0179: Expected O, but got Unknown
				light_panel.gameObject.SetActive(true);
				if (SandboxManager.sandbox_current != null)
				{
					light_panel.ClearAllSliders();
					foreach (LightInfo light_info2 in SandboxManager.sandbox_current.info.outdoor_lights)
					{
						LightColorSlider slider2 = new LightColorSlider();
						light_panel.AddColorSlider(slider2);
						slider2.SetColor(light_info2.color);
						slider2.on_value_change_event.AddListener((UnityAction)delegate
						{
							//IL_0013: Unknown result type (might be due to invalid IL or missing references)
							//IL_0018: Unknown result type (might be due to invalid IL or missing references)
							//IL_009c: Unknown result type (might be due to invalid IL or missing references)
							light_info2.color = slider2.color;
							SandboxManager.sandbox_current.UpdateEffects();
							Color color2 = default(Color);
							((Color)(ref color2))..ctor(slider2.slider_r.value, slider2.slider_g.value, slider2.slider_b.value, slider2.slider_mag.value);
							if (Plugin.auto_save_sandbox.Value && File.Exists(SandboxManager.sandbox_current.info.path))
							{
								CSBUtils.SetColorField("Outdoor Lights", color2, SandboxManager.sandbox_current.info.outdoor_lights.IndexOf(light_info2), SandboxManager.sandbox_current.info.path);
							}
						});
					}
					foreach (LightInfo light_info in SandboxManager.sandbox_current.info.indoor_lights)
					{
						LightColorSlider slider = new LightColorSlider();
						light_panel.AddColorSlider(slider);
						slider.SetColor(light_info.color);
						slider.on_value_change_event.AddListener((UnityAction)delegate
						{
							//IL_0013: Unknown result type (might be due to invalid IL or missing references)
							//IL_0018: Unknown result type (might be due to invalid IL or missing references)
							//IL_009c: Unknown result type (might be due to invalid IL or missing references)
							light_info.color = slider.color;
							SandboxManager.sandbox_current.UpdateEffects();
							Color color = default(Color);
							((Color)(ref color))..ctor(slider.slider_r.value, slider.slider_g.value, slider.slider_b.value, slider.slider_mag.value);
							if (Plugin.auto_save_sandbox.Value && File.Exists(SandboxManager.sandbox_current.info.path))
							{
								CSBUtils.SetColorField("Indoor Lights", color, SandboxManager.sandbox_current.info.indoor_lights.IndexOf(light_info), SandboxManager.sandbox_current.info.path);
							}
						});
					}
				}
			});
			button_skybox.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				skybox_panel.gameObject.SetActive(true);
				((Graphic)skybox_panel.skybox_image).material.mainTexture = (Texture)(object)SandboxManager.sandbox_current.info.skybox.texture;
			});
			button_fog.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
				//IL_0102: Expected O, but got Unknown
				fog_panel.gameObject.SetActive(true);
				((UnityEventBase)fog_panel.on_value_change_event).RemoveAllListeners();
				fog_panel.fog_enable = SandboxManager.sandbox_current.info.fog.enabled;
				fog_panel.SetColor(SandboxManager.sandbox_current.info.fog.color);
				fog_panel.fog_start.value = SandboxManager.sandbox_current.info.fog.start;
				fog_panel.fog_end.value = SandboxManager.sandbox_current.info.fog.end;
				if (fog_panel.fog_enable)
				{
					fog_panel.fog_enable_img.SetActive(true);
				}
				else
				{
					fog_panel.fog_enable_img.SetActive(false);
				}
				fog_panel.on_value_change_event.AddListener((UnityAction)delegate
				{
					//IL_0016: Unknown result type (might be due to invalid IL or missing references)
					//IL_001b: Unknown result type (might be due to invalid IL or missing references)
					//IL_008d: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
					SandboxManager.sandbox_current.info.fog.color = fog_panel.fog_color;
					SandboxManager.sandbox_current.info.fog.enabled = fog_panel.fog_enable;
					SandboxManager.sandbox_current.info.fog.start = fog_panel.fog_start.value;
					SandboxManager.sandbox_current.info.fog.end = fog_panel.fog_end.value;
					RenderSettings.fogColor = fog_panel.fog_color;
					if (Plugin.auto_save_sandbox.Value && File.Exists(SandboxManager.sandbox_current.info.path))
					{
						CSBUtils.SetColorField("Fog", fog_panel.fog_color, 0, SandboxManager.sandbox_current.info.path);
						CSBUtils.SetFloatField("Fog", fog_panel.fog_start.value, 1, SandboxManager.sandbox_current.info.path);
						CSBUtils.SetFloatField("Fog", fog_panel.fog_end.value, 2, SandboxManager.sandbox_current.info.path);
						CSBUtils.SetBoolField("Fog", fog_panel.fog_enable, 3, SandboxManager.sandbox_current.info.path);
					}
					if (fog_panel.fog_enable)
					{
						RenderSettings.fogStartDistance = fog_panel.fog_start.value;
						RenderSettings.fogEndDistance = fog_panel.fog_end.value;
						fog_panel.fog_enable_img.SetActive(true);
					}
					else
					{
						RenderSettings.fogStartDistance = 1E+25f;
						RenderSettings.fogEndDistance = 1E+26f;
						fog_panel.fog_enable_img.SetActive(false);
					}
					SandboxManager.sandbox_current.UpdateEffects();
				});
			});
			button_misc.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				//IL_0066: Unknown result type (might be due to invalid IL or missing references)
				//IL_0070: Expected O, but got Unknown
				misc_panel.gameObject.SetActive(true);
				misc_panel.godray_alpha.value = SandboxManager.sandbox_current.info.godrays[0].color.a;
				((UnityEventBase)misc_panel.on_value_change_event).RemoveAllListeners();
				misc_panel.on_value_change_event.AddListener((UnityAction)delegate
				{
					//IL_006e: Unknown result type (might be due to invalid IL or missing references)
					foreach (GodrayInfo godray in SandboxManager.sandbox_current.info.godrays)
					{
						godray.color.a = misc_panel.godray_alpha.value;
						if (Plugin.auto_save_sandbox.Value && File.Exists(SandboxManager.sandbox_current.info.path))
						{
							CSBUtils.SetColorField("Godrays", godray.color, SandboxManager.sandbox_current.info.godrays.IndexOf(godray), SandboxManager.sandbox_current.info.path);
						}
					}
					SandboxManager.sandbox_current.UpdateEffects();
				});
			});
		}

		public void UpdateName()
		{
			string text = "";
			if (SandboxManager.sandbox_current != null && SandboxManager.sandbox_current.info.path != null)
			{
				text = SandboxManager.sandbox_current.info.path.Replace(Plugin.sandbox_folder_path + "\\", "");
				text = text.Replace(".csb", "");
			}
			sandbox_name.text = text;
		}
	}
	public class FogPanel
	{
		public GameObject gameObject;

		public GameObject button_back;

		public GameObject button_fog_enable;

		public GameObject fog_enable_img;

		public bool fog_enable;

		public Image fog_img;

		public Color fog_color;

		public Slider fog_r;

		public Slider fog_g;

		public Slider fog_b;

		public Slider fog_start;

		public Slider fog_end;

		public Text fog_start_value;

		public Text fog_end_value;

		public UnityEvent on_value_change_event;

		public void Create(Transform transform)
		{
			//IL_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_029e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Expected O, but got Unknown
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Expected O, but got Unknown
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Expected O, but got Unknown
			gameObject = Object.Instantiate<GameObject>(AssetHandler.fog_panel, transform);
			button_back = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("button back")).gameObject, gameObject.transform);
			button_fog_enable = Utils.ReplaceButtonForShop(((Component)gameObject.transform.Find("fog enable button")).gameObject, gameObject.transform);
			fog_enable_img = ((Component)gameObject.transform.Find("fog enable button/Image(Clone)")).gameObject;
			fog_enable = true;
			fog_img = ((Component)gameObject.transform.Find("ColorSlider/Color")).GetComponent<Image>();
			fog_r = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("ColorSlider/Red")).gameObject, gameObject.transform.Find("ColorSlider")).GetComponent<Slider>();
			fog_g = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("ColorSlider/Green")).gameObject, gameObject.transform.Find("ColorSlider")).GetComponent<Slider>();
			fog_b = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("ColorSlider/Blue")).gameObject, gameObject.transform.Find("ColorSlider")).GetComponent<Slider>();
			fog_start = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("fog start/FogSlider")).gameObject, gameObject.transform.Find("fog start")).GetComponent<Slider>();
			fog_end = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("fog end/FogSlider")).gameObject, gameObject.transform.Find("fog end")).GetComponent<Slider>();
			fog_start_value = ((Component)gameObject.transform.Find("fog start/fog value")).GetComponent<Text>();
			fog_end_value = ((Component)gameObject.transform.Find("fog end/fog value")).GetComponent<Text>();
			fog_start.maxValue = 1000f;
			fog_start.minValue = -1000f;
			fog_start.wholeNumbers = true;
			fog_end.maxValue = 1000f;
			fog_end.minValue = -1000f;
			fog_end.wholeNumbers = true;
			fog_color = Color.black;
			on_value_change_event = new UnityEvent();
			UpdateColor();
			button_back.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				gameObject.SetActive(false);
			});
			button_fog_enable.GetComponent<PointerAdder>().on_pressed_actions.Add((UnityAction)delegate
			{
				fog_enable = !fog_enable;
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)fog_r.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)fog_g.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)fog_b.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)fog_start.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				fog_start_value.text = fog_start.value.ToString();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)fog_end.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				fog_end_value.text = fog_end.value.ToString();
				on_value_change_event.Invoke();
			});
		}

		public void UpdateColor()
		{
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			fog_color.r = fog_r.value;
			fog_color.g = fog_g.value;
			fog_color.b = fog_b.value;
			fog_color.a = 1f;
			((Graphic)fog_img).color = fog_color;
		}

		public void SetColor(Color col)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			fog_r.value = col.r;
			fog_g.value = col.g;
			fog_b.value = col.b;
			UpdateColor();
		}
	}
	public class LightColorSlider
	{
		public GameObject gameObject;

		public Slider slider_r;

		public Slider slider_g;

		public Slider slider_b;

		public Slider slider_mag;

		public Image color_img;

		public Image color_glow_img;

		public Color color;

		public Color slider_value;

		public UnityEvent on_value_change_event;

		public void Create(Transform transform)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Expected O, but got Unknown
			color = Color.white;
			slider_value = Color.white;
			gameObject = Object.Instantiate<GameObject>(AssetHandler.light_color_slider, transform);
			slider_r = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("Red")).gameObject, gameObject.transform).GetComponent<Slider>();
			slider_g = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("Green")).gameObject, gameObject.transform).GetComponent<Slider>();
			slider_b = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("Blue")).gameObject, gameObject.transform).GetComponent<Slider>();
			slider_mag = Utils.ReplaceSliderForShop(((Component)gameObject.transform.Find("Magnitude")).gameObject, gameObject.transform).GetComponent<Slider>();
			color_img = ((Component)gameObject.transform.Find("Color")).GetComponent<Image>();
			color_glow_img = ((Component)gameObject.transform.Find("ColorGlow")).GetComponent<Image>();
			UpdateColor();
			on_value_change_event = new UnityEvent();
			((UnityEvent<float>)(object)slider_r.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)slider_g.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)slider_b.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
			((UnityEvent<float>)(object)slider_mag.onValueChanged).AddListener((UnityAction<float>)delegate
			{
				UpdateColor();
				on_value_change_event.Invoke();
			});
		}

		public void Destroy()
		{
			//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_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			slider_r = null;
			slider_g = null;
			slider_b = null;
			slider_mag = null;
			color_img = null;
			color_glow_img = null;
			color = Color.