Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ItemDisplayPlacementHelper v1.7.10
plugins/ItemDisplayPlacementHelper/ItemDisplayPlacementHelper.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Generics.Dynamics; using HG; using ItemDisplayPlacementHelper.AnimatorEditing; using ItemDisplayPlacementHelper.AxisEditing; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using RoR2; using RoR2.ContentManagement; using RoR2.UI; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] public class InvariatCultureDecimalValidator : MonoBehaviour { private void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown ((Component)this).GetComponent<TMP_InputField>().onValidateInput = new OnValidateInput(Validate); } private char Validate(string text, int pos, char ch) { if ((pos != 0 || text.Length <= 0 || text[0] != '-') && ((ch >= '0' && ch <= '9') || (ch == '-' && pos == 0) || (ch == '.' && !text.Contains(".")))) { return ch; } return '\0'; } } namespace ItemDisplayPlacementHelper { public class AnimatorParametersController : MonoBehaviour { private CharacterModel currentModel; private Animator currentAnimator; public Transform container; private readonly List<AnimatorParameterField> rows = new List<AnimatorParameterField>(); [Space] public GameObject boolRowPrefab; public GameObject intRowPrefab; public GameObject floatRowPrefab; private void Awake() { ModelPicker.OnModelChanged += OnModelChanged; ModelPicker.OnModelWillChange += OnModelWillChange; } private void OnDestroy() { ModelPicker.OnModelChanged -= OnModelChanged; ModelPicker.OnModelWillChange -= OnModelWillChange; } private void OnModelWillChange() { foreach (AnimatorParameterField row in rows) { Object.Destroy((Object)(object)((Component)row).gameObject); } rows.Clear(); currentAnimator = null; } private void OnModelChanged(CharacterModel model) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected I4, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Invalid comparison between Unknown and I4 currentModel = model; if (Object.op_Implicit((Object)(object)currentModel)) { currentAnimator = ((Component)currentModel).GetComponent<Animator>(); } if (!Object.op_Implicit((Object)(object)currentAnimator)) { return; } AnimatorControllerParameter[] parameters = currentAnimator.parameters; foreach (AnimatorControllerParameter val in parameters) { GameObject val2 = null; AnimatorControllerParameterType type = val.type; switch (type - 1) { default: if ((int)type == 9) { continue; } break; case 0: val2 = Object.Instantiate<GameObject>(floatRowPrefab, container); break; case 2: val2 = Object.Instantiate<GameObject>(intRowPrefab, container); break; case 3: val2 = Object.Instantiate<GameObject>(boolRowPrefab, container); break; case 1: break; } AnimatorParameterField component = val2.GetComponent<AnimatorParameterField>(); component.animator = currentAnimator; component.parameter = val; rows.Add(component); val2.SetActive(true); } } } internal static class AssetsHelper { public static AssetBundle SceneBundle { get; private set; } public static void LoadAssetBundle() { SceneBundle = AssetBundle.LoadFromFile(GetBundlePath("kingenderbrine_idrs_editor")); } private static string GetBundlePath(string bundleName) { return Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)ItemDisplayPlacementHelperPlugin.Instance).Info.Location), bundleName); } } public class BepInExConfigController : MonoBehaviour { public SensitivityController sensitivityController; public ParentedPrefabDisplayController parentedPrefabDisplayController; private void Start() { sensitivityController.fastCoefficientInput.Value = ConfigHelper.FastCoefficient.Value; sensitivityController.slowCoefficientInput.Value = ConfigHelper.SlowCoefficient.Value; parentedPrefabDisplayController.CopyFormat = ConfigHelper.CopyFormat.Value; parentedPrefabDisplayController.customFormatInput.text = FromConfigFriendly(ConfigHelper.CustomFormat.Value); ((MonoBehaviour)this).StartCoroutine(SaveCurrentValues()); } private void OnDestroy() { ((MonoBehaviour)this).StopAllCoroutines(); } private IEnumerator SaveCurrentValues() { while (true) { yield return (object)new WaitForSeconds(10f); ConfigHelper.FastCoefficient.Value = sensitivityController.fastCoefficientInput.Value; ConfigHelper.SlowCoefficient.Value = sensitivityController.slowCoefficientInput.Value; ConfigHelper.CopyFormat.Value = parentedPrefabDisplayController.CopyFormat; ConfigHelper.CustomFormat.Value = ToConfigFriendly(parentedPrefabDisplayController.customFormatInput.text); } } private static string ToConfigFriendly(string str) { return Convert.ToBase64String(Encoding.UTF8.GetBytes(str)).Replace('=', '-'); } private static string FromConfigFriendly(string str) { return Encoding.UTF8.GetString(Convert.FromBase64String(str.Replace('-', '='))); } } public class CameraPostprocessEventHandler : MonoBehaviour { public static EventHandler onPostRender; private void OnPostRender() { onPostRender?.Invoke(this, null); } } public static class ConfigHelper { public static ConfigEntry<float> FastCoefficient { get; private set; } public static ConfigEntry<float> SlowCoefficient { get; private set; } public static ConfigEntry<CopyFormat> CopyFormat { get; private set; } public static ConfigEntry<string> CustomFormat { get; private set; } internal static void InitConfigs(ConfigFile config) { FastCoefficient = config.Bind<float>("EditorInputs", "FastCoefficient", 2.5f, (ConfigDescription)null); SlowCoefficient = config.Bind<float>("EditorInputs", "SlowCoefficient", 0.1f, (ConfigDescription)null); CopyFormat = config.Bind<CopyFormat>("EditorInputs", "CopyFormat", ItemDisplayPlacementHelper.CopyFormat.Block, (ConfigDescription)null); CustomFormat = config.Bind<string>("EditorInputs", "CustomFormat", "", (ConfigDescription)null); } } public class DialogController : MonoBehaviour { public TMP_Text textComponent; public GameObject container; private static DialogController Instance { get; set; } private void Awake() { Instance = this; } private void OnDestroy() { Instance = null; } public static void ShowError(string text) { if (Object.op_Implicit((Object)(object)Instance)) { Instance.textComponent.text = text; Instance.container.SetActive(true); } } public void Ok() { container.SetActive(false); } } public class DisplayRuleGroupEditingController : MonoBehaviour { public delegate void OnDisplayRuleGroupChangedHandler(DisplayRuleGroup displayRuleGroup); public GameObject rowPrefab; public Transform container; public Button reapplyButton; private CharacterModel characterModel; public static OnDisplayRuleGroupChangedHandler OnDisplayRuleGroupChanged; private readonly List<ParentedPrefabDisplay> parentedPrefabDisplays = new List<ParentedPrefabDisplay>(); private readonly List<GameObject> rows = new List<GameObject>(); private ItemDisplayRuleSet TempRuleSet; public static DisplayRuleGroupEditingController Instance { get; private set; } public DisplayRuleGroup DisplayRuleGroup { get; private set; } public ItemDisplayRuleSetController.Catalog Catalog { get; private set; } public int Index { get; private set; } = -1; private void Awake() { Instance = this; ModelPicker.OnModelWillChange += OnModelWillChange; ModelPicker.OnModelChanged += OnModelChanged; TempRuleSet = ScriptableObject.CreateInstance<ItemDisplayRuleSet>(); TempRuleSet.GenerateRuntimeValues(); } private void OnDestroy() { ModelPicker.OnModelWillChange -= OnModelWillChange; ModelPicker.OnModelChanged -= OnModelChanged; Instance = null; Object.Destroy((Object)(object)TempRuleSet); } private void Update() { ((Selectable)reapplyButton).interactable = Index != -1; } private void OnModelWillChange() { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) SetDisplayRuleGroup(default(DisplayRuleGroup), ItemDisplayRuleSetController.Catalog.Item, -1); } private void OnModelChanged(CharacterModel characterModel) { this.characterModel = characterModel; } public void SetDisplayRuleGroup(DisplayRuleGroup displayRuleGroup, ItemDisplayRuleSetController.Catalog catalog, int index) { //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_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_0110: 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_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) DisplayRuleGroup displayRuleGroup2 = DisplayRuleGroup; if (((DisplayRuleGroup)(ref displayRuleGroup2)).Equals(displayRuleGroup) && Catalog == catalog && Index == index) { return; } DisplayRuleGroup = displayRuleGroup; Catalog = catalog; Index = index; parentedPrefabDisplays.Clear(); rows.ForEach((Action<GameObject>)Object.Destroy); rows.Clear(); if (index == -1 || !Object.op_Implicit((Object)(object)characterModel)) { OnDisplayRuleGroupChanged(displayRuleGroup); return; } switch (catalog) { case ItemDisplayRuleSetController.Catalog.Item: { ItemIndex itemIndex = (ItemIndex)index; parentedPrefabDisplays.AddRange(characterModel.parentedPrefabDisplays.Where((ParentedPrefabDisplay el) => el.itemIndex == itemIndex)); break; } case ItemDisplayRuleSetController.Catalog.Equipment: { EquipmentIndex equipmentIndex = (EquipmentIndex)index; parentedPrefabDisplays.AddRange(characterModel.parentedPrefabDisplays.Where((ParentedPrefabDisplay el) => el.equipmentIndex == equipmentIndex)); break; } } for (int i = 0; i < parentedPrefabDisplays.Count; i++) { GameObject val = Object.Instantiate<GameObject>(rowPrefab, container); ItemDisplayRulePreviewController component = val.GetComponent<ItemDisplayRulePreviewController>(); component.itemDisplayRule = displayRuleGroup.rules[i]; component.parentedPrefabDisplay = parentedPrefabDisplays[i]; ParentedPrefabDisplay val2 = parentedPrefabDisplays[i]; ItemFollower component2 = ((ParentedPrefabDisplay)(ref val2)).instance.GetComponent<ItemFollower>(); if (Object.op_Implicit((Object)(object)component2) && Object.op_Implicit((Object)(object)component2.followerPrefab)) { ((MonoBehaviour)component2).StartCoroutine(AddComponentToFollowerInstanceCoroutine(component2)); } val.SetActive(true); rows.Add(val); } OnDisplayRuleGroupChanged(displayRuleGroup); } public void ReapplyCurrentDisplayGroup() { //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_0007: 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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) DisplayRuleGroup displayRuleGroup = DisplayRuleGroup; int num = Array.IndexOf(displayRuleGroup.rules, ParentedPrefabDisplayController.Instance.ItemDisplayRule); ItemDisplayRule[] array = displayRuleGroup.rules.ToArray(); for (int i = 0; i < parentedPrefabDisplays.Count; i++) { ParentedPrefabDisplay val = parentedPrefabDisplays[i]; GameObject instance = ((ParentedPrefabDisplay)(ref val)).instance; Transform parent = instance.transform.parent; ItemDisplayRule val2 = array[i]; val2.localPos = instance.transform.localPosition; val2.localScale = instance.transform.localScale; val2.localAngles = instance.transform.localEulerAngles; val2.childName = ((IEnumerable<NameTransformPair>)characterModel.childLocator.transformPairs).FirstOrDefault((Func<NameTransformPair, bool>)((NameTransformPair p) => (Object)(object)p.transform == (Object)(object)parent)).name; array[i] = val2; } displayRuleGroup.rules = array; DisplayRuleGroupPreviewController displayRuleGroupPreviewController; if (Catalog == ItemDisplayRuleSetController.Catalog.Item) { displayRuleGroupPreviewController = ItemDisplayRuleSetController.Instance.ItemRows[Index]; TempRuleSet.runtimeItemRuleGroups[Index] = displayRuleGroup; } else { displayRuleGroupPreviewController = ItemDisplayRuleSetController.Instance.EquipmentRows[Index]; TempRuleSet.runtimeEquipmentRuleGroups[Index] = displayRuleGroup; } displayRuleGroupPreviewController.ToggleDisplay(display: false); ItemDisplayRuleSet itemDisplayRuleSet = characterModel.itemDisplayRuleSet; characterModel.itemDisplayRuleSet = TempRuleSet; displayRuleGroupPreviewController.EditDisplayRuleGroup(); characterModel.itemDisplayRuleSet = itemDisplayRuleSet; ParentedPrefabDisplayController.Instance.SetItemDisplayRule(DisplayRuleGroup.rules[num], parentedPrefabDisplays[num]); } private IEnumerator AddComponentToFollowerInstanceCoroutine(ItemFollower itemFollower) { yield return (object)new WaitUntil((Func<bool>)(() => Object.op_Implicit((Object)(object)itemFollower.followerInstance))); itemFollower.followerInstance.AddComponent<MatchLocalScale>().target = ((Component)itemFollower).transform; } } public class DisplayRuleGroupPreviewController : MonoBehaviour { [HideInInspector] public Sprite icon; [HideInInspector] public string nameText; [HideInInspector] public DisplayRuleGroup displayRuleGroup; [HideInInspector] public ItemDisplayRuleSetController.Catalog catalog; [HideInInspector] public int index; private CharacterModel characterModel; [SerializeField] private Image imageComponent; [SerializeField] private TextMeshProUGUI textComponent; [SerializeField] private Toggle toggleComponent; [SerializeField] private Button buttonComponent; [SerializeField] private ToggleGroup toggleGroupComponent; [SerializeField] private Image background; private void Awake() { characterModel = ModelPicker.Instance.CharacterModel; ModelPicker.OnModelChanged += OnModelChanged; } private void OnDestroy() { ModelPicker.OnModelChanged -= OnModelChanged; } private void OnModelChanged(CharacterModel characterModel) { this.characterModel = characterModel; } private void Start() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Invalid comparison between Unknown and I4 ((TMP_Text)textComponent).text = nameText; imageComponent.sprite = icon; switch (catalog) { case ItemDisplayRuleSetController.Catalog.Item: toggleComponent.isOn = characterModel.enabledItemDisplays.Contains((ItemIndex)index); break; case ItemDisplayRuleSetController.Catalog.Equipment: toggleComponent.group = toggleGroupComponent; toggleComponent.isOn = (int)characterModel.currentEquipmentDisplayIndex == index; break; } } public void EditDisplayRuleGroup() { //IL_004c: 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_0031: Unknown result type (might be due to invalid IL or missing references) if (DisplayRuleGroupEditingController.Instance.Catalog == catalog && DisplayRuleGroupEditingController.Instance.Index == index) { DisplayRuleGroupEditingController.Instance.SetDisplayRuleGroup(default(DisplayRuleGroup), ItemDisplayRuleSetController.Catalog.Item, -1); return; } toggleComponent.isOn = true; DisplayRuleGroupEditingController.Instance.SetDisplayRuleGroup(displayRuleGroup, catalog, index); } public void ToggleDisplay(bool display) { //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) if (toggleComponent.isOn != display) { toggleComponent.isOn = display; return; } if (display) { switch (catalog) { case ItemDisplayRuleSetController.Catalog.Item: characterModel.EnableItemDisplay((ItemIndex)index); break; case ItemDisplayRuleSetController.Catalog.Equipment: characterModel.SetEquipmentDisplay((EquipmentIndex)index); break; } return; } switch (catalog) { case ItemDisplayRuleSetController.Catalog.Item: characterModel.DisableItemDisplay((ItemIndex)index); break; case ItemDisplayRuleSetController.Catalog.Equipment: characterModel.SetEquipmentDisplay((EquipmentIndex)(-1)); break; } if (DisplayRuleGroupEditingController.Instance.Catalog == catalog && DisplayRuleGroupEditingController.Instance.Index == index) { DisplayRuleGroupEditingController.Instance.SetDisplayRuleGroup(default(DisplayRuleGroup), ItemDisplayRuleSetController.Catalog.Item, -1); } } private void Update() { ((Behaviour)background).enabled = DisplayRuleGroupEditingController.Instance.Catalog == catalog && DisplayRuleGroupEditingController.Instance.Index == index; } } public class DropdownItem : MonoBehaviour, IEventSystemHandler, ICancelHandler { public TMP_Text text; public Image image; public RectTransform rectTransform; public Button button; [HideInInspector] public object Value { get; set; } public virtual void OnCancel(BaseEventData eventData) { SearchableDropdown componentInParent = ((Component)this).GetComponentInParent<SearchableDropdown>(); if (Object.op_Implicit((Object)(object)componentInParent)) { componentInParent.Hide(); } } } public class EditorConfigPanel : MonoBehaviour { private static readonly MethodInfo dynamicBonesLateUpdateMethod = typeof(DynamicBone).GetMethod("LateUpdate", BindingFlags.Instance | BindingFlags.NonPublic); private static readonly MethodInfo timeGetUnscaledDeltaTimeMethod = typeof(Time).GetProperty("unscaledDeltaTime").GetGetMethod(); public CameraRigController cameraRigController; [Space] public Toggle fadeToggle; public Toggle timeToggle; public Toggle dynamicBonesTimeToggle; [Space] public Button editorSpaceButton; public TextMeshProUGUI editorSpaceText; [Space] public Toggle editorModeMove; public Toggle editorModeRotate; public Toggle editorModeScale; private bool skipNotification; private ILHook dynamicBonesHook; private void OnDestroy() { if (dynamicBonesHook != null) { dynamicBonesHook.Undo(); } } private void Update() { skipNotification = true; if (Object.op_Implicit((Object)(object)cameraRigController)) { fadeToggle.isOn = cameraRigController.enableFading; } timeToggle.isOn = Time.timeScale > 0f; ((Selectable)editorSpaceButton).interactable = !EditorAxisController.Instance.OverrideToLocalSpace; switch (EditorAxisController.Instance.EditSpace) { case EditSpace.Global: ((TMP_Text)editorSpaceText).text = "Global"; break; case EditSpace.Local: ((TMP_Text)editorSpaceText).text = "Local"; break; } editorModeMove.isOn = EditorAxisController.Instance.EditMode == EditMode.Move; editorModeRotate.isOn = EditorAxisController.Instance.EditMode == EditMode.Rotate; editorModeScale.isOn = EditorAxisController.Instance.EditMode == EditMode.Scale; skipNotification = false; } public void ToggleTime(bool enabled) { if (!skipNotification) { Time.timeScale = (enabled ? 1 : 0); } } public void ToggleFade(bool enabled) { if (!skipNotification && Object.op_Implicit((Object)(object)cameraRigController)) { cameraRigController.enableFading = enabled; } } public void ToggleEditModeMove(bool value) { if (!skipNotification && value) { EditorAxisController.Instance.EditMode = EditMode.Move; } } public void ToggleEditModeScale(bool value) { if (!skipNotification && value) { EditorAxisController.Instance.EditMode = EditMode.Scale; } } public void ToggleEditModeRotate(bool value) { if (!skipNotification && value) { EditorAxisController.Instance.EditMode = EditMode.Rotate; } } public void ToggleEditSpace() { switch (EditorAxisController.Instance.ActualEditSpace) { case EditSpace.Global: EditorAxisController.Instance.ActualEditSpace = EditSpace.Local; break; case EditSpace.Local: EditorAxisController.Instance.ActualEditSpace = EditSpace.Global; break; } } public void ToggleDynamicBonesTimeScale(bool enabled) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (skipNotification) { return; } if (enabled) { if (dynamicBonesHook == null) { dynamicBonesHook = new ILHook((MethodBase)dynamicBonesLateUpdateMethod, new Manipulator(DynamicBonesLateUpdateIL)); } } else if (dynamicBonesHook != null) { dynamicBonesHook.Undo(); dynamicBonesHook = null; } } private void DynamicBonesLateUpdateIL(ILContext il) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Time>(x, "get_deltaTime") }); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Call, (MethodBase)timeGetUnscaledDeltaTimeMethod); } } public class EditorHUD : MonoBehaviour { public EditorSceneCameraController cameraController; public CameraRigController cameraRigController; private float oldTimeScale; public static EditorHUD Instance { get; private set; } private void Awake() { Instance = this; oldTimeScale = Time.timeScale; Time.timeScale = 1f; AkSoundEngine.PostEvent("Pause_All", (GameObject)null); PauseManager.onPauseEndGlobal = (Action)Delegate.Combine(PauseManager.onPauseEndGlobal, new Action(OnPauseEnd)); } private void Start() { ((Behaviour)((Component)this).GetComponent<CursorOpener>()).enabled = true; } private void OnDestroy() { Instance = null; PauseManager.onPauseEndGlobal = (Action)Delegate.Remove(PauseManager.onPauseEndGlobal, new Action(OnPauseEnd)); Time.timeScale = oldTimeScale; AkSoundEngine.PostEvent("Unpause_All", (GameObject)null); } private void Update() { if ((double)Time.timeScale < 0.01) { Physics.SyncTransforms(); } } private void OnPauseEnd() { AkSoundEngine.PostEvent("Pause_All", (GameObject)null); } } public class EditorKeysHandler : MonoBehaviour { public CameraRigController cameraRigController; private MPEventSystemLocator eventSystemLocator; private GameObject lastCheckedObject; private bool disallowKeyPress; private void Awake() { eventSystemLocator = ((Component)this).GetComponent<MPEventSystemLocator>(); } private void Update() { //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)eventSystemLocator.eventSystem)) { return; } GameObject currentSelectedGameObject = ((EventSystem)eventSystemLocator.eventSystem).currentSelectedGameObject; if (!Object.op_Implicit((Object)(object)currentSelectedGameObject)) { disallowKeyPress = false; lastCheckedObject = null; } else if ((Object)(object)currentSelectedGameObject != (Object)(object)lastCheckedObject) { if (Object.op_Implicit((Object)(object)currentSelectedGameObject.GetComponent<TMP_InputField>()) || Object.op_Implicit((Object)(object)currentSelectedGameObject.GetComponent<InputField>())) { disallowKeyPress = true; } else { disallowKeyPress = false; } lastCheckedObject = currentSelectedGameObject; } if (disallowKeyPress) { return; } if (Input.GetKeyDown((KeyCode)119)) { EditorAxisController.Instance.EditMode = EditMode.Move; } else if (Input.GetKeyDown((KeyCode)101)) { EditorAxisController.Instance.EditMode = EditMode.Rotate; } else if (Input.GetKeyDown((KeyCode)114)) { EditorAxisController.Instance.EditMode = EditMode.Scale; } if (Input.GetKeyDown((KeyCode)120)) { switch (EditorAxisController.Instance.ActualEditSpace) { case EditSpace.Global: EditorAxisController.Instance.ActualEditSpace = EditSpace.Local; break; case EditSpace.Local: EditorAxisController.Instance.ActualEditSpace = EditSpace.Global; break; } } if (Input.GetKeyDown((KeyCode)116)) { Time.timeScale = ((Time.timeScale == 0f) ? 1 : 0); } if (Input.GetKeyDown((KeyCode)102) && Object.op_Implicit((Object)(object)ParentedPrefabDisplayController.Instance)) { ParentedPrefabDisplay parentedPrefabDisplay = ParentedPrefabDisplayController.Instance.ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance)) { EditorSceneCameraController instance = EditorSceneCameraController.Instance; parentedPrefabDisplay = ParentedPrefabDisplayController.Instance.ParentedPrefabDisplay; instance.FocusOnPoint(((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.position); } } if (Input.GetKeyDown((KeyCode)103) && Object.op_Implicit((Object)(object)cameraRigController)) { cameraRigController.enableFading = !cameraRigController.enableFading; } } } public class EditorSceneCameraController : MonoBehaviour, ICameraStateProvider, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { private enum ActionType { None, Rotation, Movement } private const float minFocusLength = 0.1f; private float focusLength = 4f; private const float rotationMultiplier = 0.15f; private const float sidewaysMovementMultiplier = 0.01f; private const float forwardMovementMultiplier = 0.3f; public float sidewaysMovementSensitivity = 1f; public float rotationSensitivity = 1f; public float forwardMovementSensitivity = 1f; public float slowCoefficient = 0.1f; public float fastCoefficient = 3f; [Space] public Transform cameraDefaultPosition; public CameraRigController CameraRigController; public static EditorSceneCameraController Instance; private Vector3 previousMousePosition; private ActionType currentActionType; private Vector3? lerpPosition; private float lerpCameraTime; public bool PointerInside { get; private set; } private void Awake() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) Instance = this; CameraRigController.SetOverrideCam((ICameraStateProvider)(object)this, 0f); ((Component)CameraRigController).transform.SetPositionAndRotation(cameraDefaultPosition.position, cameraDefaultPosition.rotation); } private void OnDestroy() { Instance = null; if (Object.op_Implicit((Object)(object)CameraRigController)) { CameraRigController.SetOverrideCam((ICameraStateProvider)null, 0f); } } private void Update() { //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bc: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_05b0: Unknown result type (might be due to invalid IL or missing references) //IL_05b5: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_0544: Unknown result type (might be due to invalid IL or missing references) //IL_0549: Unknown result type (might be due to invalid IL or missing references) //IL_0574: 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_04a3: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04be: Unknown result type (might be due to invalid IL or missing references) //IL_04c3: Unknown result type (might be due to invalid IL or missing references) //IL_04c8: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Unknown result type (might be due to invalid IL or missing references) //IL_04e2: Unknown result type (might be due to invalid IL or missing references) //IL_04e7: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0513: Unknown result type (might be due to invalid IL or missing references) //IL_0518: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0423: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Unknown result type (might be due to invalid IL or missing references) //IL_043e: Unknown result type (might be due to invalid IL or missing references) //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_045a: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_046f: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_047a: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) float num = (Input.GetKey((KeyCode)306) ? slowCoefficient : (Input.GetKey((KeyCode)304) ? fastCoefficient : 1f)); if (PointerInside) { if (currentActionType == ActionType.None) { if (Input.GetMouseButtonDown(2)) { if (Input.GetKey((KeyCode)308)) { Vector3 val = default(Vector3); foreach (KeyValuePair<SkinnedMeshRenderer, MeshCollider> cachedSkinnedMeshRenderer in ModelPicker.Instance.CachedSkinnedMeshRenderers) { Vector3 localScale = ((Component)cachedSkinnedMeshRenderer.Key).transform.localScale; Vector3 lossyScale = ((Component)cachedSkinnedMeshRenderer.Key).transform.lossyScale; ((Vector3)(ref val))..ctor(localScale.x / lossyScale.x, localScale.y / lossyScale.y, localScale.z / lossyScale.z); if (localScale != Vector3.one || val != Vector3.one) { ((Component)cachedSkinnedMeshRenderer.Key).transform.localScale = val; } cachedSkinnedMeshRenderer.Key.BakeMesh(cachedSkinnedMeshRenderer.Value.sharedMesh); cachedSkinnedMeshRenderer.Value.sharedMesh = cachedSkinnedMeshRenderer.Value.sharedMesh; if (localScale != Vector3.one || val != Vector3.one) { ((Component)cachedSkinnedMeshRenderer.Key).transform.localScale = localScale; } } RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), ref val2, 5000f, LayerMask.GetMask(new string[1] { "World" }))) { lerpPosition = ((RaycastHit)(ref val2)).point + ((Component)CameraRigController).transform.forward * -1f * focusLength; lerpCameraTime = 0f; } } else { currentActionType = ActionType.Movement; lerpPosition = null; } } else if (Input.GetMouseButtonDown(1)) { currentActionType = ActionType.Rotation; lerpPosition = null; } } Vector3 val3 = ((Component)CameraRigController).transform.forward * Input.mouseScrollDelta.y * forwardMovementSensitivity * 0.3f * num; if (Input.GetKey((KeyCode)308)) { float num2 = Mathf.Sign(Input.mouseScrollDelta.y); if (num2 == 1f && focusLength <= 0.1f) { val3 = Vector3.zero; focusLength = 0.1f; } else { float num3 = Mathf.Max((float)Math.Log(focusLength), 0.5f); val3 *= num3; if (focusLength - num2 * ((Vector3)(ref val3)).magnitude <= 0.1f) { val3 = Vector3.zero; } focusLength -= num2 * ((Vector3)(ref val3)).magnitude; } } if (val3 != Vector3.zero) { lerpPosition = null; } Transform transform = ((Component)CameraRigController).transform; transform.position += val3; } if (lerpPosition.HasValue) { lerpCameraTime += Time.unscaledDeltaTime; ((Component)CameraRigController).transform.position = Vector3.Lerp(((Component)CameraRigController).transform.position, lerpPosition.Value, lerpCameraTime); if (lerpCameraTime >= 1f) { lerpPosition = null; } } if (EditorAxisController.Instance.SelectedAxis == Axis.None) { Vector3 val4 = Input.mousePosition - previousMousePosition; switch (currentActionType) { case ActionType.Movement: { Transform transform2 = ((Component)CameraRigController).transform; transform2.position -= ((Component)CameraRigController).transform.up * val4.y * sidewaysMovementSensitivity * 0.01f * num; Transform transform3 = ((Component)CameraRigController).transform; transform3.position -= ((Component)CameraRigController).transform.right * val4.x * sidewaysMovementSensitivity * 0.01f * num; break; } case ActionType.Rotation: if (Input.GetKey((KeyCode)308)) { Vector3 val5 = ((Component)CameraRigController).transform.position + ((Component)CameraRigController).transform.forward * focusLength; ((Component)CameraRigController).transform.RotateAround(val5, ((Component)CameraRigController).transform.right, val4.y * rotationSensitivity * 0.15f * -2f); ((Component)CameraRigController).transform.RotateAround(val5, Vector3.up, val4.x * rotationSensitivity * 0.15f * 2f); } else { ((Component)CameraRigController).transform.Rotate(Vector3.right, val4.y * rotationSensitivity * 0.15f * -1f, (Space)1); ((Component)CameraRigController).transform.Rotate(Vector3.up, val4.x * rotationSensitivity * 0.15f, (Space)0); } break; } } if (currentActionType != 0 && Input.GetMouseButtonUp((int)currentActionType)) { currentActionType = ActionType.None; } previousMousePosition = Input.mousePosition; } public void FocusOnPoint(Vector3 point) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) lerpPosition = ((Component)CameraRigController).transform.forward * -1f * focusLength + point; lerpCameraTime = 0f; } public void GetCameraState(CameraRigController cameraRigController, ref CameraState cameraState) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) cameraState.rotation = ((Component)cameraRigController).transform.rotation; cameraState.position = ((Component)cameraRigController).transform.position; } public bool IsHudAllowed(CameraRigController cameraRigController) { return false; } public bool IsUserControlAllowed(CameraRigController cameraRigController) { return false; } public bool IsUserLookAllowed(CameraRigController cameraRigController) { return false; } public void OnPointerExit(PointerEventData eventData) { PointerInside = false; } public void OnPointerEnter(PointerEventData eventData) { PointerInside = true; } } public enum EditMode { Move, Rotate, Scale, Combined } public enum EditSpace { Global, Local } public enum Axis { None = 0, X = 1, Y = 2, Z = 4, CameraPerpendicular = 8, CameraParallel = 16, XY = 3, XZ = 5, YZ = 6, XYZ = 7 } public enum CopyFormat { Custom, Block, Inline, ForParsing } [BepInPlugin("com.KingEnderBrine.ItemDisplayPlacementHelper", "Item Display Placement Helper", "1.7.10")] public class ItemDisplayPlacementHelperPlugin : BaseUnityPlugin { internal static ItemDisplayPlacementHelperPlugin Instance { get; private set; } internal static ManualLogSource InstanceLogger { get { ItemDisplayPlacementHelperPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } private void Awake() { Instance = this; AssetsHelper.LoadAssetBundle(); ConfigHelper.InitConfigs(((BaseUnityPlugin)this).Config); } private void OnDestroy() { Instance = null; } private void Update() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown((KeyCode)283)) { Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name == "title") { ((MonoBehaviour)this).StartCoroutine(StartSceneCoroutine()); } } } private IEnumerator StartSceneCoroutine() { if (!(NetworkManager.networkSceneName == "KingEnderBrine_IDRS_Editor")) { Console.instance.SubmitCmd((NetworkUser)null, "host 0", false); yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)PreGameController.instance != (Object)null)); NetworkManager.singleton.ServerChangeScene("KingEnderBrine_IDRS_Editor"); if (Object.op_Implicit((Object)(object)ConsoleWindow.instance)) { Object.Destroy((Object)(object)((Component)ConsoleWindow.instance).gameObject); } } } } public class ItemDisplayRulePreviewController : MonoBehaviour { [HideInInspector] public ItemDisplayRule itemDisplayRule; [HideInInspector] public ParentedPrefabDisplay parentedPrefabDisplay; [SerializeField] private TMP_Text textComponent; [SerializeField] private Button buttonComponent; private void Start() { textComponent.text = ((Object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance).name; } private void Update() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) Button obj = buttonComponent; ParentedPrefabDisplay val = ParentedPrefabDisplayController.Instance.ParentedPrefabDisplay; ((Selectable)obj).interactable = !((object)(ParentedPrefabDisplay)(ref val)).Equals((object?)parentedPrefabDisplay); } public void EditItemDisplayRule() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) ParentedPrefabDisplayController.Instance.SetItemDisplayRule(itemDisplayRule, parentedPrefabDisplay); } } public class ItemDisplayRuleSetController : MonoBehaviour { public enum Catalog { Item, Equipment } public GameObject rowPrefab; public Transform container; [Space] public Button enableAllButton; public Button disableAllButton; public TMP_InputField searchInput; public GameObject noIDRSTextObject; public TMP_Dropdown showItemsMode; private readonly Dictionary<int, DisplayRuleGroupPreviewController> itemRows = new Dictionary<int, DisplayRuleGroupPreviewController>(); private readonly Dictionary<int, DisplayRuleGroupPreviewController> equipmentRows = new Dictionary<int, DisplayRuleGroupPreviewController>(); private readonly Dictionary<ItemDisplayRuleSet, ItemDisplayRuleSet> fixedRuleSets = new Dictionary<ItemDisplayRuleSet, ItemDisplayRuleSet>(); private CharacterModel characterModel; private string filter; public IReadOnlyDictionary<int, DisplayRuleGroupPreviewController> ItemRows => itemRows; public IReadOnlyDictionary<int, DisplayRuleGroupPreviewController> EquipmentRows => equipmentRows; public static ItemDisplayRuleSetController Instance { get; private set; } private void Awake() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) Instance = this; showItemsMode.AddOptions((from el in (IEnumerable<ReadOnlyContentPack>)(object)ContentManager.allLoadedContentPacks where ((IEnumerable<EquipmentDef>)(object)((ReadOnlyContentPack)(ref el)).equipmentDefs).Any() || ((IEnumerable<ItemDef>)(object)((ReadOnlyContentPack)(ref el)).itemDefs).Any() select ((ReadOnlyContentPack)(ref el)).identifier).ToList()); ModelPicker.OnModelChanged += OnModelChanged; ModelPicker.OnModelWillChange += OnModelWillChange; } private void OnDestroy() { Instance = null; ModelPicker.OnModelChanged -= OnModelChanged; ModelPicker.OnModelWillChange -= OnModelWillChange; foreach (var (_, val3) in fixedRuleSets) { if (Object.op_Implicit((Object)(object)val3)) { Object.Destroy((Object)(object)val3); } } } private void Update() { noIDRSTextObject.SetActive(Object.op_Implicit((Object)(object)ModelPicker.Instance.ModelInstance) && (!Object.op_Implicit((Object)(object)characterModel) || !Object.op_Implicit((Object)(object)characterModel.itemDisplayRuleSet))); ((Selectable)enableAllButton).interactable = Object.op_Implicit((Object)(object)characterModel); ((Selectable)disableAllButton).interactable = Object.op_Implicit((Object)(object)characterModel); ((Selectable)searchInput).interactable = Object.op_Implicit((Object)(object)characterModel); ((Selectable)showItemsMode).interactable = Object.op_Implicit((Object)(object)characterModel); } private void OnModelChanged(CharacterModel characterModel) { if (Object.op_Implicit((Object)(object)characterModel) && Object.op_Implicit((Object)(object)characterModel.itemDisplayRuleSet)) { this.characterModel = characterModel; EnsureValidRuleSet(characterModel); GatherDisplayRules(this.characterModel.itemDisplayRuleSet.runtimeItemRuleGroups, itemRows, Catalog.Item); GatherDisplayRules(this.characterModel.itemDisplayRuleSet.runtimeEquipmentRuleGroups, equipmentRows, Catalog.Equipment); ApplyFilter(filter); } } private void EnsureValidRuleSet(CharacterModel characterModel) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) ItemDisplayRuleSet itemDisplayRuleSet = characterModel.itemDisplayRuleSet; if (fixedRuleSets.TryGetValue(itemDisplayRuleSet, out var value)) { if ((Object)(object)value != (Object)null) { characterModel.itemDisplayRuleSet = value; } return; } HashSet<string> hashSet = characterModel.childLocator.transformPairs.Select((NameTransformPair p) => p.name).ToHashSet(); for (int i = 0; i < itemDisplayRuleSet.keyAssetRuleGroups.Length; i++) { KeyAssetRuleGroup val = itemDisplayRuleSet.keyAssetRuleGroups[i]; if (((DisplayRuleGroup)(ref val.displayRuleGroup)).isEmpty) { continue; } for (int j = 0; j < val.displayRuleGroup.rules.Length; j++) { ItemDisplayRule val2 = val.displayRuleGroup.rules[j]; if (val2.childName == null || !hashSet.Contains(val2.childName)) { if (!Object.op_Implicit((Object)(object)value)) { value = Object.Instantiate<ItemDisplayRuleSet>(itemDisplayRuleSet); ItemDisplayPlacementHelperPlugin.InstanceLogger.LogError((object)("Model " + ((Object)characterModel).name + " has invalid entries in ItemDisplayRuleSet, applying temporary fix")); } value.keyAssetRuleGroups[i].displayRuleGroup.rules[j].childName = hashSet.First(); } } } fixedRuleSets[itemDisplayRuleSet] = value; if (Object.op_Implicit((Object)(object)value)) { value.GenerateRuntimeValues(); characterModel.itemDisplayRuleSet = value; } } private void OnModelWillChange() { foreach (DisplayRuleGroupPreviewController value in itemRows.Values) { Object.Destroy((Object)(object)((Component)value).gameObject); } itemRows.Clear(); foreach (DisplayRuleGroupPreviewController value2 in equipmentRows.Values) { Object.Destroy((Object)(object)((Component)value2).gameObject); } equipmentRows.Clear(); characterModel = null; } private void GatherDisplayRules(DisplayRuleGroup[] displayRuleGroups, Dictionary<int, DisplayRuleGroupPreviewController> rows, Catalog catalog) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < displayRuleGroups.Length; i++) { DisplayRuleGroup displayRuleGroup = displayRuleGroups[i]; if (!((DisplayRuleGroup)(ref displayRuleGroup)).isEmpty) { GameObject obj = Object.Instantiate<GameObject>(rowPrefab, container); DisplayRuleGroupPreviewController component = obj.GetComponent<DisplayRuleGroupPreviewController>(); component.displayRuleGroup = displayRuleGroup; DisplayRuleGroupPreviewController displayRuleGroupPreviewController = component; (Sprite, string) itemInfo = GetItemInfo(catalog, i); component.icon = itemInfo.Item1; displayRuleGroupPreviewController.nameText = itemInfo.Item2; component.catalog = catalog; component.index = i; obj.SetActive(true); rows[i] = component; } } } private (Sprite, string) GetItemInfo(Catalog catalog, int index) { switch (catalog) { case Catalog.Item: { ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)index); return (itemDef.pickupIconSprite, Language.GetString(itemDef.nameToken)); } case Catalog.Equipment: { EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef((EquipmentIndex)index); return (equipmentDef.pickupIconSprite, Language.GetString(equipmentDef.nameToken)); } default: throw new ArgumentException(); } } public void ApplyFilter(string newFilter) { filter = newFilter; UpdateRowsVisibility(); } public void ChangeShowMode(int value) { UpdateRowsVisibility(); } public void EnableAll() { foreach (DisplayRuleGroupPreviewController value in itemRows.Values) { if (((Component)value).gameObject.activeSelf) { value.ToggleDisplay(display: true); } } characterModel.UpdateMaterials(); } public void DisableAll() { foreach (DisplayRuleGroupPreviewController value in itemRows.Values) { if (((Component)value).gameObject.activeSelf) { value.ToggleDisplay(display: false); } } foreach (DisplayRuleGroupPreviewController value2 in equipmentRows.Values) { if (((Component)value2).gameObject.activeSelf) { value2.ToggleDisplay(display: false); } } } private void UpdateRowsVisibility() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) bool flag = string.IsNullOrEmpty(filter); string identifier = showItemsMode.options[showItemsMode.value].text; ReadOnlyContentPack[] array = ((showItemsMode.value > 0) ? ((IEnumerable<ReadOnlyContentPack>)(object)ContentManager.allLoadedContentPacks).Where((ReadOnlyContentPack p) => ((ReadOnlyContentPack)(ref p)).identifier == identifier).ToArray() : null); foreach (DisplayRuleGroupPreviewController value in itemRows.Values) { bool flag2 = flag || value.nameText.ContainsInSequence(filter); if (flag2 && array != null) { ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)value.index); flag2 = array.Any((ReadOnlyContentPack p) => ((ReadOnlyContentPack)(ref p)).itemDefs.Contains(itemDef)); } ((Component)value).gameObject.SetActive(flag2); } foreach (DisplayRuleGroupPreviewController value2 in equipmentRows.Values) { bool flag3 = flag || value2.nameText.ContainsInSequence(filter); if (flag3 && array != null) { EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef((EquipmentIndex)value2.index); flag3 = array.Any((ReadOnlyContentPack p) => ((ReadOnlyContentPack)(ref p)).equipmentDefs.Contains(equipmentDef)); } ((Component)value2).gameObject.SetActive(flag3); } } } public class MatchLocalScale : MonoBehaviour { public Transform target; private void Update() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)target)) { ((Component)this).transform.localScale = target.localScale; } } } public class ModelPicker : MonoBehaviour { public delegate void OnModelChangedHandler(CharacterModel characterModel); public SearchableDropdown dropdown; public TMP_Dropdown skinsDropdown; public Transform modelSpawnPosition; [Space] public RawImage icon; public TextMeshProUGUI bodyNameText; public TextMeshProUGUI modelNameText; private ReverseSkin reverseSkin; private List<SearchableDropdown.OptionData> allBodyOptions; private List<SearchableDropdown.OptionData> logbookBodyOptions; public ModelPrefabInfo ModelInfo { get; private set; } public GameObject ModelInstance { get; private set; } public CharacterModel CharacterModel { get; private set; } public ModelSkinController ModelSkinController { get; private set; } public Dictionary<SkinnedMeshRenderer, MeshCollider> CachedSkinnedMeshRenderers { get; } = new Dictionary<SkinnedMeshRenderer, MeshCollider>(); public static ModelPicker Instance { get; private set; } public static event OnModelChangedHandler OnModelChanged; public static event Action OnModelWillChange; private void Awake() { Instance = this; logbookBodyOptions = MapBodiesToOptions(SurvivorCatalog.orderedSurvivorDefs.Select((SurvivorDef survivorDef) => BodyCatalog.GetBodyPrefabBodyComponent(SurvivorCatalog.GetBodyIndexFromSurvivorIndex(survivorDef.survivorIndex))).Union(BodyCatalog.allBodyPrefabBodyBodyComponents.Where((CharacterBody characterBody) => Object.op_Implicit((Object)(object)characterBody) && Object.op_Implicit((Object)(object)((Component)characterBody).GetComponent<DeathRewards>()?.logUnlockableDef)))); allBodyOptions = MapBodiesToOptions(BodyCatalog.allBodyPrefabBodyBodyComponents); dropdown.Options = logbookBodyOptions; ((UnityEvent<object>)(dropdown.OnItemSelected ?? (dropdown.OnItemSelected = new SearchableDropdown.DropdownEvent()))).AddListener((UnityAction<object>)SelectModel); static List<SearchableDropdown.OptionData> MapBodiesToOptions(IEnumerable<CharacterBody> bodies) { return (from characterBody in bodies select (characterBody, ((Component)characterBody).GetComponentInChildren<CharacterModel>()) into el where Object.op_Implicit((Object)(object)el.characterModel) select el).Select<(CharacterBody, CharacterModel), SearchableDropdown.OptionData>(delegate((CharacterBody characterBody, CharacterModel characterModel) el) { ModelPrefabInfo modelPrefabInfo = new ModelPrefabInfo { modelPrefab = ((Component)el.characterModel).gameObject, bodyName = ((Object)el.characterBody).name, modelName = ((Object)el.characterModel).name, localizedBodyName = Language.GetString(el.characterBody.baseNameToken ?? ((Object)el.characterBody).name), characterBody = el.characterBody }; return new SearchableDropdown.OptionData(modelPrefabInfo, modelPrefabInfo.localizedBodyName + " || " + modelPrefabInfo.bodyName + " || " + modelPrefabInfo.modelName); }).ToList(); } } private void OnDestroy() { Instance = null; } public void SelectModel(object modelInfo) { ((MonoBehaviour)this).StartCoroutine(SelectModelAsync(modelInfo)); } public IEnumerator SelectModelAsync(object modelInfo) { if (modelInfo as ModelPrefabInfo != ModelInfo) { ModelPicker.OnModelWillChange?.Invoke(); DestroyModelInstance(); ModelInfo = modelInfo as ModelPrefabInfo; yield return BuildModelInstance(); ConfigureSkinVariants(); ModelPicker.OnModelChanged?.Invoke(CharacterModel); } } private void DestroyModelInstance() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) CachedSkinnedMeshRenderers.Clear(); Object.Destroy((Object)(object)ModelInstance); ModelInstance = null; ModelSkinController = null; CharacterModel = null; ((Graphic)icon).color = Color.clear; icon.texture = null; ((TMP_Text)bodyNameText).text = null; ((TMP_Text)modelNameText).text = null; reverseSkin = null; } private IEnumerator BuildModelInstance() { if (ModelInfo == null || Object.op_Implicit((Object)(object)ModelInstance)) { yield break; } ((Graphic)icon).color = Color.white; icon.texture = ModelInfo.characterBody.portraitIcon; ((TMP_Text)bodyNameText).text = ModelInfo.localizedBodyName; ((TMP_Text)modelNameText).text = ModelInfo.modelName; ModelInstance = Object.Instantiate<GameObject>(ModelInfo.modelPrefab, modelSpawnPosition.position, modelSpawnPosition.rotation); CharacterModel = ModelInstance.GetComponent<CharacterModel>(); CharacterModel.constraintItemDisplaysScale = false; ModelSkinController = ModelInstance.GetComponent<ModelSkinController>(); if (Object.op_Implicit((Object)(object)ModelSkinController) && ModelSkinController.skins.Length != 0) { yield return ModelSkinController.ApplySkinAsync(0, (AsyncReferenceHandleUnloadType)(-1)); reverseSkin = new ReverseSkin(ModelInstance, ModelSkinController.skins[Mathf.Clamp(ModelSkinController.currentSkinIndex, 0, ModelSkinController.skins.Length - 1)]); } AimAnimator[] componentsInChildren = ModelInstance.GetComponentsInChildren<AimAnimator>(); foreach (AimAnimator obj in componentsInChildren) { obj.inputBank = null; obj.directionComponent = null; ((Behaviour)obj).enabled = false; } Animator[] componentsInChildren2 = ModelInstance.GetComponentsInChildren<Animator>(); foreach (Animator obj2 in componentsInChildren2) { obj2.SetBool("isGrounded", true); obj2.SetFloat("aimPitchCycle", 0.5f); obj2.SetFloat("aimYawCycle", 0.5f); obj2.Play("Idle"); obj2.Update(0f); } DitherModel[] componentsInChildren3 = ModelInstance.GetComponentsInChildren<DitherModel>(); for (int i = 0; i < componentsInChildren3.Length; i++) { ((Behaviour)componentsInChildren3[i]).enabled = false; } IKSimpleChain[] componentsInChildren4 = ModelInstance.GetComponentsInChildren<IKSimpleChain>(); for (int i = 0; i < componentsInChildren4.Length; i++) { ((Behaviour)componentsInChildren4[i]).enabled = false; } PrintController[] componentsInChildren5 = ModelInstance.GetComponentsInChildren<PrintController>(); for (int i = 0; i < componentsInChildren5.Length; i++) { ((Behaviour)componentsInChildren5[i]).enabled = false; } LightIntensityCurve[] componentsInChildren6 = ModelInstance.GetComponentsInChildren<LightIntensityCurve>(); foreach (LightIntensityCurve val in componentsInChildren6) { if (!val.loop) { ((Behaviour)val).enabled = false; } } AkEvent[] componentsInChildren7 = ModelInstance.GetComponentsInChildren<AkEvent>(); for (int i = 0; i < componentsInChildren7.Length; i++) { ((Behaviour)componentsInChildren7[i]).enabled = false; } ShakeEmitter[] componentsInChildren8 = ModelInstance.GetComponentsInChildren<ShakeEmitter>(); for (int i = 0; i < componentsInChildren8.Length; i++) { ((Behaviour)componentsInChildren8[i]).enabled = false; } Collider[] componentsInChildren9 = ModelInstance.GetComponentsInChildren<Collider>(); for (int i = 0; i < componentsInChildren9.Length; i++) { componentsInChildren9[i].enabled = false; } InverseKinematics[] componentsInChildren10 = ModelInstance.GetComponentsInChildren<InverseKinematics>(); for (int i = 0; i < componentsInChildren10.Length; i++) { ((Behaviour)componentsInChildren10[i]).enabled = false; } MeshFilter[] componentsInChildren11 = ModelInstance.GetComponentsInChildren<MeshFilter>(); foreach (MeshFilter val2 in componentsInChildren11) { MeshCollider obj3 = ((Component)val2).gameObject.AddComponent<MeshCollider>(); obj3.convex = false; obj3.sharedMesh = val2.sharedMesh; ((Component)val2).gameObject.layer = 11; } SkinnedMeshRenderer[] componentsInChildren12 = ModelInstance.GetComponentsInChildren<SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer val3 in componentsInChildren12) { MeshCollider val4 = ((Component)val3).gameObject.AddComponent<MeshCollider>(); val4.convex = false; val4.sharedMesh = new Mesh(); ((Component)val3).gameObject.layer = 11; CachedSkinnedMeshRenderers[val3] = val4; } } private void ConfigureSkinVariants() { skinsDropdown.ClearOptions(); if (!Object.op_Implicit((Object)(object)ModelSkinController)) { ((Component)skinsDropdown).gameObject.SetActive(false); return; } skinsDropdown.AddOptions(((IEnumerable<SkinDef>)ModelSkinController.skins).Select((Func<SkinDef, OptionData>)delegate(SkinDef el) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown string text = ((el.nameToken == null) ? ((Object)el).name : Language.GetString(el.nameToken)); if (string.IsNullOrWhiteSpace(text)) { text = "<No name>"; } return new OptionData(text, el.icon); }).ToList()); ((Component)skinsDropdown).gameObject.SetActive(true); } public void SelectSkin(int index) { ((MonoBehaviour)this).StartCoroutine(SelectSkinAsync(index)); } public IEnumerator SelectSkinAsync(int index) { if (Object.op_Implicit((Object)(object)ModelSkinController)) { ItemDisplayRuleSet oldIDRS = CharacterModel.itemDisplayRuleSet; reverseSkin?.Apply(); yield return ModelSkinController.ApplySkinAsync(index, (AsyncReferenceHandleUnloadType)(-1)); reverseSkin = new ReverseSkin(ModelInstance, ModelSkinController.skins[ModelSkinController.currentSkinIndex]); if ((Object)(object)oldIDRS != (Object)(object)CharacterModel.itemDisplayRuleSet) { ItemDisplayRuleSetController.Instance.DisableAll(); ModelPicker.OnModelWillChange?.Invoke(); ModelPicker.OnModelChanged?.Invoke(CharacterModel); } } } public void ToggleBodyOptions(bool enabled) { if (enabled) { dropdown.Options = allBodyOptions; } else { dropdown.Options = logbookBodyOptions; } } } public class ModelPrefabInfo { public GameObject modelPrefab; public string bodyName; public string localizedBodyName; public string modelName; public CharacterBody characterBody; } public class MouseEventConsumer : MonoBehaviour { private void OnMouseDrag() { } } [RequireComponent(typeof(TMP_InputField))] public class NavigateInputFieldOnTab : MonoBehaviour { private TMP_InputField inputField; public MoveDirection moveDirection; private void Awake() { inputField = ((Component)this).GetComponent<TMP_InputField>(); } private void Update() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected I4, but got Unknown if (!((Selectable)inputField).interactable || !inputField.isFocused) { return; } Navigation navigation = ((Selectable)inputField).navigation; if ((int)((Navigation)(ref navigation)).mode != 0 && Input.GetKeyDown((KeyCode)9)) { Selectable val = null; MoveDirection val2 = moveDirection; switch ((int)val2) { case 0: val = ((Selectable)inputField).FindSelectableOnLeft(); break; case 1: val = ((Selectable)inputField).FindSelectableOnUp(); break; case 2: val = ((Selectable)inputField).FindSelectableOnRight(); break; case 3: val = ((Selectable)inputField).FindSelectableOnDown(); break; } if (Object.op_Implicit((Object)(object)val)) { val.Select(); } } } } public class ParentedPrefabDisplayController : MonoBehaviour { public TMP_Dropdown childNameDropdown; [Space] public Vector3InputField localPosInput; public Vector3InputField localAnglesInput; public Vector3InputField localScaleInput; [Space] public Button copyToClipboardButton; public Button editCopyFormatButton; [Space] public GameObject editFormatContainer; public TMP_InputField customFormatInput; public TMP_Text formatPreviewText; public TMP_Dropdown formatDropdown; private CharacterModel characterModel; private CopyFormat _copyFormat; private const string blockFormat = "childName = {childName},\r\nlocalPos = {localPos:5},\r\nlocalAngles = {localAngles:5},\r\nlocalScale = {localScale:5}\r\n"; private const string inlineFormat = "{childName}, {localPos:5}, {localAngles:5}, {localScale:5}"; private const string forParsing = "{r:childName},{r:localPos.x:5},{r:localPos.y:5},{r:localPos.z:5},{r:localAngles.x:5},{r:localAngles.y:5},{r:localAngles.z:5},{r:localScale.x:5},{r:localScale.y:5},{r:localScale.z:5}"; public ParentedPrefabDisplay ParentedPrefabDisplay { get; private set; } public ItemDisplayRule ItemDisplayRule { get; private set; } public static ParentedPrefabDisplayController Instance { get; private set; } public CopyFormat CopyFormat { get { return _copyFormat; } set { if (formatDropdown.value == (int)value) { SelectFormat((int)value); } else { formatDropdown.value = (int)value; } } } private void Awake() { Instance = this; Vector3InputField vector3InputField = localPosInput; vector3InputField.onValueChanged = (Vector3InputField.OnChangeEvent)Delegate.Combine(vector3InputField.onValueChanged, new Vector3InputField.OnChangeEvent(OnLocalPosChanged)); Vector3InputField vector3InputField2 = localAnglesInput; vector3InputField2.onValueChanged = (Vector3InputField.OnChangeEvent)Delegate.Combine(vector3InputField2.onValueChanged, new Vector3InputField.OnChangeEvent(OnLocalAnglesChanged)); Vector3InputField vector3InputField3 = localScaleInput; vector3InputField3.onValueChanged = (Vector3InputField.OnChangeEvent)Delegate.Combine(vector3InputField3.onValueChanged, new Vector3InputField.OnChangeEvent(OnLocalScaleChanged)); ModelPicker.OnModelChanged += OnModelChanged; ModelPicker.OnModelWillChange += OnModelWillChange; DisplayRuleGroupEditingController.OnDisplayRuleGroupChanged = (DisplayRuleGroupEditingController.OnDisplayRuleGroupChangedHandler)Delegate.Combine(DisplayRuleGroupEditingController.OnDisplayRuleGroupChanged, new DisplayRuleGroupEditingController.OnDisplayRuleGroupChangedHandler(OnDisplayRuleGroupChanged)); formatDropdown.AddOptions(((IEnumerable<string>)Enum.GetNames(typeof(CopyFormat))).Select((Func<string, OptionData>)((string name) => new OptionData(name))).ToList()); } private void OnDestroy() { ModelPicker.OnModelChanged -= OnModelChanged; ModelPicker.OnModelWillChange -= OnModelWillChange; DisplayRuleGroupEditingController.OnDisplayRuleGroupChanged = (DisplayRuleGroupEditingController.OnDisplayRuleGroupChangedHandler)Delegate.Remove(DisplayRuleGroupEditingController.OnDisplayRuleGroupChanged, new DisplayRuleGroupEditingController.OnDisplayRuleGroupChangedHandler(OnDisplayRuleGroupChanged)); Instance = null; } private void OnModelWillChange() { ClearValues(); childNameDropdown.ClearOptions(); } private void OnModelChanged(CharacterModel characterModel) { this.characterModel = characterModel; if (Object.op_Implicit((Object)(object)characterModel) && Object.op_Implicit((Object)(object)characterModel.childLocator)) { childNameDropdown.options.AddRange(((IEnumerable<NameTransformPair>)characterModel.childLocator.transformPairs).Select((Func<NameTransformPair, OptionData>)((NameTransformPair el) => new OptionData(el.name))).ToList()); } } private void OnDisplayRuleGroupChanged(DisplayRuleGroup displayRuleGroup) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) SetItemDisplayRule(default(ItemDisplayRule), default(ParentedPrefabDisplay)); } private void Update() { //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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_009a: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) ParentedPrefabDisplay parentedPrefabDisplay = ParentedPrefabDisplay; bool flag = Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance); ((Selectable)childNameDropdown).interactable = flag; localPosInput.interactable = flag; localAnglesInput.interactable = flag; localScaleInput.interactable = flag; ((Selectable)copyToClipboardButton).interactable = flag; ((Selectable)editCopyFormatButton).interactable = flag; if (!flag) { editFormatContainer.SetActive(false); } parentedPrefabDisplay = ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance)) { Vector3InputField vector3InputField = localPosInput; parentedPrefabDisplay = ParentedPrefabDisplay; vector3InputField.SetValueWithoutNotify(((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.localPosition); Vector3InputField vector3InputField2 = localAnglesInput; parentedPrefabDisplay = ParentedPrefabDisplay; vector3InputField2.SetValueWithoutNotify(((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.localEulerAngles); Vector3InputField vector3InputField3 = localScaleInput; parentedPrefabDisplay = ParentedPrefabDisplay; vector3InputField3.SetValueWithoutNotify(((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.localScale); } } private void ClearValues() { childNameDropdown.captionText.text = ""; localPosInput.ClearValues(); localAnglesInput.ClearValues(); localScaleInput.ClearValues(); } public void SetItemDisplayRule(ItemDisplayRule itemDisplayRule, ParentedPrefabDisplay parentedPrefabDisplay) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) ItemDisplayRule itemDisplayRule2 = ItemDisplayRule; ParentedPrefabDisplay parentedPrefabDisplay2; if (((ItemDisplayRule)(ref itemDisplayRule2)).Equals(itemDisplayRule)) { parentedPrefabDisplay2 = ParentedPrefabDisplay; if (((object)(ParentedPrefabDisplay)(ref parentedPrefabDisplay2)).Equals((object?)parentedPrefabDisplay)) { return; } } ClearValues(); ParentedPrefabDisplay = parentedPrefabDisplay; ItemDisplayRule = itemDisplayRule; EditorAxisController instance = EditorAxisController.Instance; parentedPrefabDisplay2 = ParentedPrefabDisplay; object selectedObject; if (!Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay2)).instance)) { selectedObject = null; } else { parentedPrefabDisplay2 = ParentedPrefabDisplay; selectedObject = ((ParentedPrefabDisplay)(ref parentedPrefabDisplay2)).instance.transform; } instance.SetSelectedObject((Transform)selectedObject); parentedPrefabDisplay2 = ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay2)).instance)) { Transform displayTransform = ((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform; childNameDropdown.captionText.text = ((IEnumerable<NameTransformPair>)characterModel.childLocator.transformPairs).FirstOrDefault((Func<NameTransformPair, bool>)((NameTransformPair el) => (Object)(object)el.transform == (Object)(object)displayTransform.parent)).name; childNameDropdown.SetValueWithoutNotify(childNameDropdown.options.FindIndex((OptionData el) => el.text == childNameDropdown.captionText.text)); localPosInput.SetValueWithoutNotify(displayTransform.localPosition, forceUpdate: true); localAnglesInput.SetValueWithoutNotify(displayTransform.localEulerAngles, forceUpdate: true); localScaleInput.SetValueWithoutNotify(displayTransform.localScale, forceUpdate: true); } } public void OnLocalPosChanged(Vector3 value) { //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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ParentedPrefabDisplay parentedPrefabDisplay = ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance)) { parentedPrefabDisplay = ParentedPrefabDisplay; ((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.localPosition = value; } } public void OnLocalAnglesChanged(Vector3 value) { //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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ParentedPrefabDisplay parentedPrefabDisplay = ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance)) { parentedPrefabDisplay = ParentedPrefabDisplay; ((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.localEulerAngles = value; } } public void OnLocalScaleChanged(Vector3 value) { //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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ParentedPrefabDisplay parentedPrefabDisplay = ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance)) { parentedPrefabDisplay = ParentedPrefabDisplay; ((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.localScale = value; } } public void SelectChild(int index) { //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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) ParentedPrefabDisplay parentedPrefabDisplay = ParentedPrefabDisplay; if (Object.op_Implicit((Object)(object)((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance)) { Transform transform = characterModel.childLocator.transformPairs[index].transform; parentedPrefabDisplay = ParentedPrefabDisplay; ((ParentedPrefabDisplay)(ref parentedPrefabDisplay)).instance.transform.SetParent(transform, false); } } public void SelectFormat(int format) { _copyFormat = (CopyFormat)format; ((Component)customFormatInput).gameObject.SetActive(CopyFormat == CopyFormat.Custom); ((Component)formatPreviewText.transform.parent.parent).gameObject.SetActive(CopyFormat != CopyFormat.Custom); formatPreviewText.text = GetText(); } public void CopyValuesToClipboard() { try { string text = GetText(); GUIUtility.systemCopyBuffer = ReplacePlaceHolders(text); } catch (Exception ex) { DialogController.ShowError(ex.Message); } } public void ToogleEditFormatContainerVisibility() { editFormatContainer.SetActive(!editFormatContainer.activeSelf); } private string ReplacePlaceHolders(string text) { MatchCollection matchCollection = Regex.Matches(text, "(?<!\\{)\\{((?<modificator>.??):)?(?<field>[^\\{\\}:]*?)(\\.(?<subfield>.*?))?(:(?<precision>.*?))?\\}(?!\\})"); if (matchCollection.Count == 0) { return text; } StringBuilder stringBuilder = new StringBuilder(); int num = 0; for (int i = 0; i < matchCollection.Count; i++) { Match match = matchCollection[i]; stringBuilder.Append(text.Substring(num, match.Index - num).Replace("{{", "{").Replace("}}", "}")); num = match.Index + match.Length; stringBuilder.Append(ParsePlaceHolder(match)); } if (matchCollection.Count == 0) { return text; } if (num != text.Length) { stringBuilder.Append(text.Substring(num, text.Length - num).Replace("{{", "{").Replace("}}", "}")); } return stringBuilder.ToString(); } private string ParsePlaceHolder(Match match) { //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) string modificator = match.Groups["modificator"].Value?.ToLower(); string value = match.Groups["field"].Value; string value2 = match.Groups["subfield"].Value; int result = 5; if (match.Groups["precision"].Success && !int.TryParse(match.Groups["precision"].Value, out result)) { throw new ArgumentException("Failed to parse placeholder " + match.Value); } switch (value) { case "childName": return StringText(childNameDropdown.captionText.text, modificator); case "localPos": return Vector3Text(localPosInput.CurrentValue, result, modificator, value2); case "localAngles": return Vector3Text(localAnglesInput.CurrentValue, result, modificator, value2); case "localScale": return Vector3Text(localScaleInput.CurrentValue, result, modificator, value2); case "modelName": return StringText(ModelPicker.Instance.ModelInfo.modelName, modificator); case "bodyName": return StringText(ModelPicker.Instance.ModelInfo.bodyName, modificator); case "itemName": return StringText(GetItemName(), modificator); case "objectName": { GameObject result2 = ParentedPrefabDisplay.prefabReference.Result; return StringText(((result2 != null) ? ((Object)result2).name : null) ?? "", modificator); } default: throw new ArgumentException("Failed to parse placeholder " + match.Value); } } private string GetItemName() { //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_000c: Invalid comparison between Unknown and I4 //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Invalid comparison between Unknown and I4 //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if ((int)ParentedPrefabDisplay.itemIndex != -1) { ItemDef itemDef = ItemCatalog.GetItemDef(ParentedPrefabDisplay.itemIndex); if (itemDef == null) { return null; } return ((Object)itemDef).name; } if ((int)ParentedPrefabDisplay.equipmentIndex != -1) { EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(ParentedPrefabDisplay.equipmentIndex); if (equipmentDef == null) { return null; } return ((Object)equipmentDef).name; } return ""; } private string GetText() { return CopyFormat switch { CopyFormat.Custom => customFormatInput.text, CopyFormat.Block => "childName = {childName},\r\nlocalPos = {localPos:5},\r\nlocalAngles = {localAngles:5},\r\nlocalScale = {localScale:5}\r\n", CopyFormat.Inline => "{childName}, {localPos:5}, {localAngles:5}, {localScale:5}", CopyFormat.ForParsing => "{r:childName},{r:localPos.x:5},{r:localPos.y:5},{r:localPos.z:5},{r:localAngles.x:5},{r:localAngles.y:5},{r:localAngles.z:5},{r:localScale.x:5},{r:localScale.y:5},{r:localScale.z:5}", _ => throw new IndexOutOfRangeException(), }; } private string StringText(string str, string modificator) { if (modificator == "r") { return str; } return "\"" + str + "\""; } private string Vector3Text(Vector3 vector, int precision, string modificator, string subField) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) bool flag = modificator == "r"; return subField switch { "x" => FloatInvariant(vector.x, precision) + (flag ? "" : "F"), "y" => FloatInvariant(vector.y, precision) + (flag ? "" : "F"), "z" => FloatInvariant(vector.z, precision) + (flag ? "" : "F"), _ => "new Vector3(" + FloatInvariant(vector.x, precision) + "F, " + FloatInvariant(vector.y, precision) + "F, " + FloatInvariant(vector.z, precision) + "F)", }; } private string FloatInvariant(float num, int precision) { return num.ToString("0." + "".PadLeft(precision, '#'), CultureInfo.InvariantCulture); } } public class ReverseSkin { private readonly List<RendererInfo> baseRendererInfos = new List<RendererInfo>(); private readonly List<GameObjectActivationTemplate> gameObjectActivationTemplates = new List<GameObjectActivationTemplate>(); private readonly List<MeshReplacementTemplate> meshReplacementTemplates = new List<MeshReplacementTemplate>(); private readonly GameObject modelObject; public ReverseSkin(GameObject modelObject, SkinDef skinDef) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) this.modelObject = modelObject; IEnumerator enumerator = skinDef.BakeAsync(); while (enumerator.MoveNext()) { } RuntimeSkin runtimeSkin = skinDef.runtimeSkin; baseRendererInfos.AddRange(modelObject.GetComponent<CharacterModel>().baseRendererInfos); Enumerator<GameObjectActivationTemplate> enumerator2 = runtimeSkin.gameObjectActivationTemplates.GetEnumerator(); try { while (enumerator2.MoveNext()) { GameObjectActivationTemplate current = enumerator2.Current; gameObjectActivationTemplates.Add(new GameObjectActivationTemplate { transformPath = current.transformPath, shouldActivate = !current.shouldActivate }); } } finally { ((IDisposable)enumerator2).Dispose(); } Enumerator<MeshReplacementTemplate> enumerator3 = runtimeSkin.meshReplacementTemplates.GetEnumerator(); try { while (enumerator3.MoveNext()) { MeshReplacementTemplate current2 = enumerator3.Current; Renderer component = ((Component)modelObject.transform.Find(current2.transformPath)).GetComponent<Renderer>(); Mesh directRef = null; if (!(component is MeshRenderer)) { SkinnedMeshRenderer val = (SkinnedMeshRenderer)(object)((component is SkinnedMeshRenderer) ? component : null); if (val != null) { directRef = val.sharedMesh; } } else { directRef = ((Component)component).GetComponent<MeshFilter>().sharedMesh; } meshReplacementTemplates.Add(new MeshReplacementTemplate { transformPath = current2.transformPath, meshReference = new AssetOrDirectReference<Mesh> { directRef = directRef } }); } } finally { ((IDisposable)enumerator3).Dispose(); } } public void Apply() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)modelObject)) { return; } Transform transform = modelObject.transform; modelObject.GetComponent<CharacterModel>().baseRendererInfos = baseRendererInfos.ToArray(); foreach (GameObjectActivationTemplate gameObjectActivationTemplate in gameObjectActivationTemplates) { ((Component)transform.Find(gameObjectActivationTemplate.transformPath)).gameObject.SetActive(gameObjectActivationTemplate.shouldActivate); } foreach (MeshReplacementTemplate meshReplacementTemplate in meshReplacementTemplates) { Renderer component = ((Component)transform.Find(meshReplacementTemplate.transformPath)).GetComponent<Renderer>(); if (!(component is MeshRenderer)) { SkinnedMeshRenderer val = (SkinnedMeshRenderer)(object)((component is SkinnedMeshRenderer) ? component : null); if (val != null) { val.sharedMesh = meshReplacementTemplate.meshReference.directRef; } } else { ((Component)component).GetComponent<MeshFilter>().sharedMesh = meshReplacementTemplate.meshReference.directRef; } } } } public class RotateWithObject : MonoBehaviour { public Transform objectTransform; private void LateUpdate() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)objectTransform)) { ((Component)this).transform.rotation = objectTransform.rotation; } } } [AddComponentMenu("UI/Searchable Dropdown", 35)] [RequireComponent(typeof(RectTransform))] public class SearchableDropdown : TMP_InputField, IEventSystemHandler, ICancelHandler { public class OptionData { public object Value { get; set; } public string Text { get; set; } public Sprite Image { get; set; } public OptionData() { } public OptionData(object value, string text) { Value = value; Text = text; } public OptionData(object value, Sprite image) { Value = value; Image = image; } public OptionData(object value, string text, Sprite image) { Value = value; Text = text; Image = image; } } [Serializable] public class DropdownEvent : UnityEvent<object> { } internal class FloatTweenRunner { protected MonoBehaviour m_CoroutineContainer; protected IEnumerator m_Tween; private static IEnumerator Start(FloatTween tweenInfo) { if (tweenInfo.ValidTarget()) { float elapsedTime = 0f; while ((double)elapsedTime < (double)tweenInfo.duration) { elapsedTime += (tweenInfo.ignoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime); tweenInfo.TweenValue(Mathf.Clamp01(elapsedTime / tweenInfo.duration)); yield return null; } tweenInfo.TweenValue(1f); } } public void Init(MonoBehaviour coroutineContainer) { m_CoroutineContainer = coroutineContainer; } public void StartTween(FloatTween info) { if ((Object)(object)m_CoroutineContainer == (Object)null) { Debug.LogWarning((object)"Coroutine container not configured... did you forget to call Init?"); return; } StopTween(); if (!((Component)m_CoroutineContainer).gameObject.activeInHierarchy) { info.TweenValue(1f); return; } m_Tween = Start(info); m_CoroutineContainer.StartCoroutine(m_Tween); } public void StopTween() { if (m_Tween != null) { m_CoroutineContainer.StopCoroutine(m_Tween); m_Tween = null; } } } internal struct FloatTween { public class FloatTweenCallback : UnityEvent<float> { } private FloatTweenCallback m_Target; private float m_StartValue; private float m_TargetValue; private float m_Duration; private bool m_IgnoreTimeScale; public float startValue { get { return m_StartValue; } set { m_StartValue = value; } } public float targetValue { get { return m_TargetValue; } set { m_TargetValue = value; } } public float duration { get { return m_Duration; } set { m_Duration = value; } } public bool ignoreTimeScale { get { return m_IgnoreTimeScale; } set { m_IgnoreTimeScale = value; } } public void TweenValue(float floatPercentage) { if (ValidTarget()) { ((UnityEvent<float>)m_Target).Invoke(Mathf.Lerp(m_StartValue, m_TargetValue, floatPercentage)); } } public void AddOnChangedCallback(UnityAction<float> callback) { if (m_Target == null) { m_Target = new FloatTweenCallback(); } ((UnityEvent<float>)m_Target).AddListener(callback); } public bool GetIgnoreTimescale() { return m_IgnoreTimeScale; } public float GetDuration() { return m_Duration; } public bool ValidTarget() { return m_Target != null; } } [SerializeField] private RectTransform m_Template; [Space] [SerializeField] private TMP_Text m_ItemText; [SerializeField] private Image m_ItemImage; [SerializeField] private TMP_Text m_SelectText; [Space] private GameObject m_Dropdown; private GameObject m_Blocker; private List<DropdownItem> m_Items = new List<DropdownItem>(); private FloatTweenRunner m_AlphaTweenRunner; private bool validTemplate; private Canvas rootCanvas; private Vector2 initialContentSizeDelta; private Vector2 initialDropdownSizeDelta; [SerializeField] private DropdownEvent m_OnItemSelected; public RectTransfo