#define DEBUG using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Numerics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using AdvancedCompany; using AdvancedCompany.Boot; using AdvancedCompany.Config; using AdvancedCompany.Cosmetics; using AdvancedCompany.Game; using AdvancedCompany.Hooks.PlayerControllerB; using AdvancedCompany.IL; using AdvancedCompany.Lib; using AdvancedCompany.Lib.SyncCallbacks; using AdvancedCompany.Lib.SyncHandler; using AdvancedCompany.Network; using AdvancedCompany.Network.Messages; using AdvancedCompany.Network.Sync; using AdvancedCompany.Network.Sync.Items; using AdvancedCompany.Objects; using AdvancedCompany.Objects.Interfaces; using AdvancedCompany.Patches; using AdvancedCompany.PostProcessing; using AdvancedCompany.Terminal.Applications; using AdvancedCompany.UI; using AdvancedCompany.Unity.Moons; using AdvancedCompany.Unity.UI; using AssetsTools.NET; using AssetsTools.NET.Extra; using AssetsTools.NET.Extra.Decompressors.LZ4; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Coroner; using Dissonance; using GameNetcodeStuff; using HarmonyLib; using LZ4ps; using LethalCompanyInputUtils.Api; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Collections.Generic; using MoreCompany.Cosmetics; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SevenZip; using SevenZip.Compression.LZ; using SevenZip.Compression.LZMA; using SevenZip.Compression.RangeCoder; using Steamworks; using Steamworks.Data; using TMPro; using Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Audio; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; 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: AssemblyMetadata("AdvancedCompanyIgnore", "True")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public class BaseSettings : MonoBehaviour where T : Configuration, new() { public class Preset { private IConfigurationProvider Provider; private bool _CanBeRenamed; private bool _CanBeRemoved; private bool _CanBeSaved; private string _Name; public T Configuration; internal bool Selected = false; internal GameObject Container; internal GameObject SelectedBackground; internal TextMeshProUGUI Label; internal Button PresetButton; internal Button RemoveButton; internal Button RenameButton; public bool CanBeRenamed { get { return _CanBeRenamed; } set { _CanBeRenamed = value; if ((Object)(object)RenameButton != (Object)null) { ((Component)RenameButton).gameObject.SetActive(_CanBeRenamed); } } } public bool CanBeRemoved { get { return _CanBeRemoved; } set { _CanBeRemoved = value; if ((Object)(object)RemoveButton != (Object)null) { ((Component)RemoveButton).gameObject.SetActive(_CanBeRemoved); } } } public bool CanBeSaved { get { return _CanBeSaved; } set { _CanBeSaved = value; } } public string Name { get { return _Name; } set { _Name = value; if ((Object)(object)Label != (Object)null) { ((TMP_Text)Label).text = _Name; } } } public Preset(IConfigurationProvider provider, string name, T configuration, bool canRemove = true, bool canRename = true, bool canBeSaved = true) { Provider = provider; _Name = name; Configuration = configuration; _CanBeRemoved = canRemove; _CanBeRenamed = canRename; _CanBeSaved = canBeSaved; } } public interface IConfigurationProvider { List GetPresets(); Preset GetPreset(string name); void PresetRenamed(Preset preset, string oldName, string newName); void PresetRemoved(Preset preset); void PresetCreated(Preset preset); void PresetSaved(Preset preset); Preset CreatePreset(string name, T configuration); } public class TestConfigurationProvider : IConfigurationProvider { private List Presets = new List(); public TestConfigurationProvider() { Presets.Add(new Preset(this, "File config", new T(), canRemove: false, canRename: false)); Presets.Add(new Preset(this, "Test 1", new T())); Presets.Add(new Preset(this, "Test 2", new T())); } public Preset GetPreset(string name) { for (int i = 0; i < Presets.Count; i++) { if (Presets[i].Name.Equals(name, StringComparison.OrdinalIgnoreCase)) { return Presets[i]; } } return null; } public void PresetCreated(Preset preset) { Presets.Add(preset); } public List GetPresets() { return Presets; } public void PresetRemoved(Preset preset) { Presets.Remove(preset); } public void PresetRenamed(Preset preset, string oldName, string newName) { } public void PresetSaved(Preset preset) { } public Preset CreatePreset(string name, T configuration) { return new Preset(this, name, configuration); } } public delegate void Continue(T configuration, string presetName); public delegate void Cancel(); [Header("Images")] public Sprite TabActive; public Sprite TabInactive; [Header("Window")] public Transform TabContainer; public Transform Container; [Header("Presets")] public GameObject PresetTemplate; public Transform PresetContainer; public Button CreatePreset; private IConfigurationProvider PresetsProvider; [HideInInspector] public Preset SelectedPreset; [Header("Windows")] public RenamePresetWindow RenamePreset; public RemovePresetWindow RemovePreset; public ConfirmOverrideWindow ConfirmOverride; public NewPresetWindow NewPreset; [Header("Buttons")] public Button SaveAsNewPresetButton; public Button SaveButton; public Button ContinueButton; public Button CancelButton; [Header("Notification")] public GameObject NotificationObject; public TextMeshProUGUI NotificationText; [HideInInspector] public Continue OnContinue; [HideInInspector] public Cancel OnCancel; internal List