Decompiled source of RuntimeInspector v4.0.1
plugins/RuntimeInspector/DynamicPanels.Runtime.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.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("DynamicPanels.Editor")] [assembly: AssemblyVersion("0.0.0.0")] namespace DynamicPanels; [DisallowMultipleComponent] public abstract class AnchorZoneBase : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerDownHandler, IPointerExitHandler { protected Panel m_panel; private Graphic raycastZone; private int hoveredPointerId = -98765; public Panel Panel => m_panel; public RectTransform RectTransform { get; private set; } public DynamicPanelsCanvas Canvas => m_panel.Canvas; protected void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown RectTransform = (RectTransform)((Component)this).transform; raycastZone = (Graphic)(object)((Component)this).gameObject.AddComponent<NonDrawingGraphic>(); } protected void OnEnable() { hoveredPointerId = -98765; } public abstract bool Execute(PanelTab panelTab, PointerEventData eventData); public abstract bool GetAnchoredPreviewRectangleAt(PointerEventData eventData, out Rect rect); public void Initialize(Panel panel) { m_panel = panel; } public void SetActive(bool value) { hoveredPointerId = -98765; raycastZone.raycastTarget = value; } public void OnPointerEnter(PointerEventData eventData) { if (PanelManager.Instance.AnchorPreviewPanelTo(this)) { hoveredPointerId = eventData.pointerId; } } public void OnPointerDown(PointerEventData eventData) { PanelManager.Instance.CancelDraggingPanel(); } public void OnPointerExit(PointerEventData eventData) { if (eventData.pointerId == hoveredPointerId) { hoveredPointerId = -98765; PanelManager.Instance.StopAnchorPreviewPanelTo(this); } } } public class CanvasAnchorZone : AnchorZoneBase { private Direction direction; public void SetDirection(Direction direction) { this.direction = direction; } public override bool Execute(PanelTab panelTab, PointerEventData eventData) { Panel source = PanelManager.Instance.DetachPanelTab(panelTab.Panel, panelTab.Panel.GetTabIndex(panelTab)); PanelManager.Instance.AnchorPanel(source, m_panel.Canvas, direction); return true; } public override bool GetAnchoredPreviewRectangleAt(PointerEventData eventData, out Rect rect) { //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_0024: 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: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0060: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: 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_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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_00c8: 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_00d9: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_00b0: Unknown result type (might be due to invalid IL or missing references) Vector2 size = m_panel.Canvas.Size; if (direction == Direction.Left) { rect = new Rect(0f, 0f, size.x * 0.2f, size.y); } else if (direction == Direction.Top) { rect = new Rect(0f, size.y * 0.8f, size.x, size.y * 0.2f); } else if (direction == Direction.Right) { rect = new Rect(size.x * 0.8f, 0f, size.x * 0.2f, size.y); } else { rect = new Rect(0f, 0f, size.x, size.y * 0.2f); } ((Rect)(ref rect)).position = ((Rect)(ref rect)).position + (((Rect)(ref rect)).size - size) * 0.5f; return true; } } public class PanelAnchorZone : AnchorZoneBase { public override bool Execute(PanelTab panelTab, PointerEventData eventData) { Direction anchorDirection = GetAnchorDirection(eventData); if (anchorDirection == Direction.None) { return false; } Panel source = PanelManager.Instance.DetachPanelTab(panelTab.Panel, panelTab.Panel.GetTabIndex(panelTab)); PanelManager.Instance.AnchorPanel(source, m_panel, anchorDirection); return true; } public override bool GetAnchoredPreviewRectangleAt(PointerEventData eventData, out Rect rect) { //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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_00ce: 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_00da: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0111: 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_011d: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) Direction anchorDirection = GetAnchorDirection(eventData); if (anchorDirection == Direction.None) { rect = default(Rect); return false; } Vector2 sizeDelta = m_panel.RectTransform.sizeDelta; sizeDelta.y -= m_panel.Internal.HeaderHeight; float num = Mathf.Min(m_panel.Canvas.PanelAnchorZoneLength, sizeDelta.x * m_panel.Canvas.PanelAnchorZoneLengthRatio); float num2 = Mathf.Min(m_panel.Canvas.PanelAnchorZoneLength, sizeDelta.y * m_panel.Canvas.PanelAnchorZoneLengthRatio); switch (anchorDirection) { case Direction.Left: rect = new Rect(0f, 0f, num, sizeDelta.y); break; case Direction.Top: rect = new Rect(0f, sizeDelta.y - num2, sizeDelta.x, num2); break; case Direction.Right: rect = new Rect(sizeDelta.x - num, 0f, num, sizeDelta.y); break; default: rect = new Rect(0f, 0f, sizeDelta.x, num2); break; } ((Rect)(ref rect)).position = ((Rect)(ref rect)).position + (m_panel.RectTransform.anchoredPosition + (((Rect)(ref rect)).size - m_panel.Canvas.Size) * 0.5f); return true; } private Direction GetAnchorDirection(PointerEventData eventData) { //IL_000c: 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) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: 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_00d1: 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_00e2: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); RectTransformUtility.ScreenPointToLocalPointInRectangle(m_panel.RectTransform, eventData.position, m_panel.Canvas.Internal.worldCamera, ref val); Vector2 sizeDelta = m_panel.RectTransform.sizeDelta; sizeDelta.y -= m_panel.Internal.HeaderHeight; float num = Mathf.Min(m_panel.Canvas.PanelAnchorZoneLength, sizeDelta.x * m_panel.Canvas.PanelAnchorZoneLengthRatio); float num2 = Mathf.Min(m_panel.Canvas.PanelAnchorZoneLength, sizeDelta.y * m_panel.Canvas.PanelAnchorZoneLengthRatio); if (val.y < num2) { return Direction.Bottom; } if (val.y > sizeDelta.y - num2) { return Direction.Top; } if (val.x < num) { return Direction.Left; } if (val.x > sizeDelta.x - num) { return Direction.Right; } return Direction.None; } } public class PanelHeaderAnchorZone : AnchorZoneBase { public override bool Execute(PanelTab panelTab, PointerEventData eventData) { Vector2 tabPreviewRect; int tabIndexAt = m_panel.Internal.GetTabIndexAt(eventData, out tabPreviewRect); m_panel.AddTab(panelTab.Content, tabIndexAt); return true; } public override bool GetAnchoredPreviewRectangleAt(PointerEventData eventData, out Rect rect) { //IL_0015: 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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) m_panel.Internal.GetTabIndexAt(eventData, out var tabPreviewRect); rect = new Rect(tabPreviewRect.x, m_panel.RectTransform.sizeDelta.y - m_panel.Internal.HeaderHeight, tabPreviewRect.y, m_panel.Internal.HeaderHeight); ((Rect)(ref rect)).position = ((Rect)(ref rect)).position + (m_panel.RectTransform.anchoredPosition + (((Rect)(ref rect)).size - m_panel.Canvas.Size) * 0.5f); return true; } } [DisallowMultipleComponent] public class DynamicPanelsCanvas : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, ISerializationCallbackReceiver { internal class InternalSettings { private readonly DynamicPanelsCanvas canvas; public readonly Camera worldCamera; public Panel DummyPanel => canvas.dummyPanel; public List<PanelProperties> InitialPanelsUnanchored { get { if (canvas.initialPanelsUnanchored == null) { canvas.initialPanelsUnanchored = new List<PanelProperties>(); } return canvas.initialPanelsUnanchored; } } public AnchoredPanelProperties InitialPanelsAnchored { get { if (canvas.initialPanelsAnchored == null) { canvas.initialPanelsAnchored = new AnchoredPanelProperties(); } return canvas.initialPanelsAnchored; } } public InternalSettings(DynamicPanelsCanvas canvas) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Invalid comparison between Unknown and I4 this.canvas = canvas; if ((int)canvas.UnityCanvas.renderMode == 0 || ((int)canvas.UnityCanvas.renderMode == 1 && !Object.op_Implicit((Object)(object)canvas.UnityCanvas.worldCamera))) { worldCamera = null; } else { worldCamera = (Object.op_Implicit((Object)(object)canvas.UnityCanvas.worldCamera) ? canvas.UnityCanvas.worldCamera : Camera.main); } } public bool IsLastDockedPanel(Panel panel) { if (panel.IsDocked) { return !PanelGroupHasAnyOtherPanels(canvas.RootPanelGroup, panel); } return false; } private bool PanelGroupHasAnyOtherPanels(PanelGroup group, Panel panel) { for (int i = 0; i < group.Count; i++) { if (group[i] is Panel) { Panel panel2 = (Panel)group[i]; if ((Object)(object)panel2 != (Object)(object)panel && (Object)(object)panel2 != (Object)(object)canvas.dummyPanel) { return true; } } else if (PanelGroupHasAnyOtherPanels((PanelGroup)group[i], panel)) { return true; } } return false; } public void OnApplicationQuit() { canvas.OnApplicationQuitting(); } public void AnchorZonesSetActive(bool value) { canvas.AnchorZonesSetActive(value); } public void ReceiveRaycasts(bool value) { canvas.background.raycastTarget = value; } } [Serializable] public class PanelProperties { public List<PanelTabProperties> tabs = new List<PanelTabProperties>(); } public class AnchoredPanelProperties { public PanelProperties panel = new PanelProperties(); public Direction anchorDirection; public Vector2 initialSize; public List<AnchoredPanelProperties> subPanels = new List<AnchoredPanelProperties>(); } [Serializable] public struct SerializableAnchoredPanelProperties { public PanelProperties panel; public Direction anchorDirection; public Vector2 initialSize; public int childCount; public int indexOfFirstChild; } [Serializable] public class PanelTabProperties : ISerializationCallbackReceiver { public RectTransform content; public string id; public Vector2 minimumSize = new Vector2(250f, 300f); public string tabLabel = "Panel"; public Sprite tabIcon; void ISerializationCallbackReceiver.OnBeforeSerialize() { if (string.IsNullOrEmpty(id)) { id = Guid.NewGuid().ToString(); } } void ISerializationCallbackReceiver.OnAfterDeserialize() { } } [SerializeField] [HideInInspector] private string m_id; private Panel dummyPanel; private Graphic background; private RectTransform anchorZonesParent; private readonly CanvasAnchorZone[] anchorZones = new CanvasAnchorZone[4]; [SerializeField] private bool m_leaveFreeSpace = true; [SerializeField] private Vector2 minimumFreeSpace = new Vector2(50f, 50f); [SerializeField] private RectTransform freeSpaceTargetTransform; private Vector2 freeSpacePrevPos; private Vector2 freeSpacePrevSize; public bool PreventDetachingLastDockedPanel; [SerializeField] private float m_panelResizableAreaLength = 12f; [SerializeField] private float m_canvasAnchorZoneLength = 20f; [SerializeField] private float m_panelAnchorZoneLength = 100f; private const float m_panelAnchorZoneLengthRatio = 0.31f; [SerializeField] private List<PanelProperties> initialPanelsUnanchored; [SerializeField] [HideInInspector] private List<SerializableAnchoredPanelProperties> initialPanelsAnchoredSerialized; private AnchoredPanelProperties initialPanelsAnchored; private bool updateBounds = true; private bool isDirty; private bool isQuitting; public RectTransform RectTransform { get; private set; } public Canvas UnityCanvas { get; private set; } internal InternalSettings Internal { get; private set; } public string ID { get { return m_id; } set { m_id = value; } } public UnanchoredPanelGroup UnanchoredPanelGroup { get; private set; } public PanelGroup RootPanelGroup { get; private set; } public Vector2 Size { get; private set; } public bool LeaveFreeSpace { get { return m_leaveFreeSpace; } set { m_leaveFreeSpace = value; if (!m_leaveFreeSpace) { dummyPanel.Detach(); } else if (!dummyPanel.IsDocked) { if (RootPanelGroup.Count <= 1) { RootPanelGroup.AddElement(dummyPanel); } else { RootPanelGroup.AddElementBefore(RootPanelGroup[RootPanelGroup.Count / 2], dummyPanel); } } } } public float PanelResizableAreaLength => m_panelResizableAreaLength; public float CanvasAnchorZoneLength => m_canvasAnchorZoneLength; public float PanelAnchorZoneLength => m_panelAnchorZoneLength; public float PanelAnchorZoneLengthRatio => 0.31f; private void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0045: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) RectTransform = (RectTransform)((Component)this).transform; UnityCanvas = ((Component)this).GetComponentInParent<Canvas>(); Internal = new InternalSettings(this); UnanchoredPanelGroup = new UnanchoredPanelGroup(this); RectTransform.ChangePivotWithoutAffectingPosition(new Vector2(0.5f, 0.5f)); if (!Object.op_Implicit((Object)(object)((Component)this).GetComponent<RectMask2D>())) { ((Component)this).gameObject.AddComponent<RectMask2D>(); } Rect rect = RectTransform.rect; Size = ((Rect)(ref rect)).size; InitializeRootGroup(); InitializeAnchorZones(); background = ((Component)this).GetComponent<Graphic>(); if (!Object.op_Implicit((Object)(object)background)) { background = (Graphic)(object)((Component)this).gameObject.AddComponent<NonDrawingGraphic>(); background.raycastTarget = false; } PanelManager.Instance.RegisterCanvas(this); Application.quitting -= OnApplicationQuitting; Application.quitting += OnApplicationQuitting; } private void Start() { //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_000f: 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_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) Rect rect = RectTransform.rect; Size = ((Rect)(ref rect)).size; HashSet<Transform> hashSet = new HashSet<Transform>(); Transform val = ((Component)this).transform; while (Object.op_Implicit((Object)(object)val)) { hashSet.Add(val); val = val.parent; } Dictionary<Panel, Vector2> dictionary = null; if (initialPanelsAnchored != null) { dictionary = new Dictionary<Panel, Vector2>(initialPanelsAnchoredSerialized.Count); CreateAnchoredPanelsRecursively(initialPanelsAnchored.subPanels, dummyPanel, hashSet, dictionary); } if (initialPanelsUnanchored != null) { for (int i = 0; i < initialPanelsUnanchored.Count; i++) { CreateInitialPanel(initialPanelsUnanchored[i], null, Direction.None, hashSet); } } initialPanelsUnanchored = null; initialPanelsAnchored = null; initialPanelsAnchoredSerialized = null; if (Object.op_Implicit((Object)(object)freeSpaceTargetTransform)) { if ((Object)(object)((Transform)freeSpaceTargetTransform).parent != (Object)(object)RectTransform) { ((Transform)freeSpaceTargetTransform).SetParent((Transform)(object)RectTransform, false); } freeSpaceTargetTransform.anchorMin = Vector2.zero; freeSpaceTargetTransform.anchorMax = Vector2.zero; freeSpaceTargetTransform.pivot = Vector2.zero; ((Transform)freeSpaceTargetTransform).SetAsFirstSibling(); } LeaveFreeSpace = m_leaveFreeSpace; LateUpdate(); if (m_leaveFreeSpace) { dummyPanel.ResizeTo(new Vector2(99999f, 99999f)); } if (dictionary != null) { ResizeAnchoredPanelsRecursively(RootPanelGroup, dictionary); } } private void OnDestroy() { Application.quitting -= OnApplicationQuitting; if (!isQuitting) { PanelManager.Instance.UnregisterCanvas(this); } } private void OnApplicationQuitting() { isQuitting = true; } private void LateUpdate() { //IL_00a6: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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_00d5: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: 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_00c8: Unknown result type (might be due to invalid IL or missing references) if (isDirty) { PanelManager.Instance.StopCanvasOperations(this); RootPanelGroup.Internal.UpdateLayout(); UnanchoredPanelGroup.Internal.UpdateLayout(); RootPanelGroup.Internal.UpdateSurroundings(null, null, null, null); } if (updateBounds) { UpdateBounds(); updateBounds = false; } if (isDirty) { RootPanelGroup.Internal.EnsureMinimumSize(); UnanchoredPanelGroup.Internal.EnsureMinimumSize(); isDirty = false; } if (m_leaveFreeSpace && Object.op_Implicit((Object)(object)freeSpaceTargetTransform)) { Vector2 position = dummyPanel.Position; Vector2 size = dummyPanel.Size; if (position != freeSpacePrevPos || size != freeSpacePrevSize) { freeSpacePrevPos = position; freeSpacePrevSize = size; freeSpaceTargetTransform.anchoredPosition = position; freeSpaceTargetTransform.sizeDelta = size; } } } public void SetDirty() { isDirty = true; updateBounds = true; } public void ForceRebuildLayoutImmediate() { LateUpdate(); } void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) { PanelManager.Instance.OnPointerEnteredCanvas(this, eventData); } private void OnRectTransformDimensionsChange() { updateBounds = true; } private void UpdateBounds() { //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_000f: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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) Rect rect = RectTransform.rect; Size = ((Rect)(ref rect)).size; RootPanelGroup.Internal.UpdateBounds(Vector2.zero, Size); UnanchoredPanelGroup.Internal.UpdateBounds(Vector2.zero, Size); } private void CreateAnchoredPanelsRecursively(List<AnchoredPanelProperties> anchoredPanels, Panel rootPanel, HashSet<Transform> createdTabs, Dictionary<Panel, Vector2> initialSizes) { //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_0058: Unknown result type (might be due to invalid IL or missing references) if (anchoredPanels == null) { return; } for (int i = 0; i < anchoredPanels.Count; i++) { Panel panel = CreateInitialPanel(anchoredPanels[i].panel, rootPanel, anchoredPanels[i].anchorDirection, createdTabs); if ((Object)(object)panel == (Object)null) { panel = rootPanel; } else if (anchoredPanels[i].initialSize != Vector2.zero) { initialSizes[panel] = anchoredPanels[i].initialSize; } CreateAnchoredPanelsRecursively(anchoredPanels[i].subPanels, panel, createdTabs, initialSizes); } } private void ResizeAnchoredPanelsRecursively(PanelGroup group, Dictionary<Panel, Vector2> initialSizes) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (group == null) { return; } int count = group.Count; for (int i = 0; i < count; i++) { Panel panel = group[i] as Panel; if ((Object)(object)panel != (Object)null) { if (initialSizes.TryGetValue(panel, out var value)) { panel.ResizeTo(value, Direction.Right, Direction.Top); } } else { ResizeAnchoredPanelsRecursively(group[i] as PanelGroup, initialSizes); } } } private Panel CreateInitialPanel(PanelProperties properties, Panel anchor, Direction anchorDirection, HashSet<Transform> createdTabs) { //IL_00aa: Unknown result type (might be due to invalid IL or missing references) Panel panel = null; for (int i = 0; i < properties.tabs.Count; i++) { PanelTabProperties panelTabProperties = properties.tabs[i]; if (Object.op_Implicit((Object)(object)panelTabProperties.content) && !createdTabs.Contains((Transform)(object)panelTabProperties.content)) { if ((Object)(object)((Transform)panelTabProperties.content).parent != (Object)(object)RectTransform) { ((Transform)panelTabProperties.content).SetParent((Transform)(object)RectTransform, false); } PanelTab panelTab; if ((Object)(object)panel == (Object)null) { panel = PanelUtils.CreatePanelFor(panelTabProperties.content, this); panelTab = panel[0]; } else { panelTab = panel.AddTab(panelTabProperties.content); } panelTab.Icon = panelTabProperties.tabIcon; panelTab.Label = panelTabProperties.tabLabel; panelTab.MinSize = panelTabProperties.minimumSize; panelTab.ID = panelTabProperties.id; createdTabs.Add((Transform)(object)panelTabProperties.content); } } if ((Object)(object)panel != (Object)null) { panel.ActiveTab = 0; if ((Object)(object)anchor != (Object)null && anchorDirection != Direction.None) { panel.DockToPanel(anchor, anchorDirection); } } return panel; } private void InitializeRootGroup() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) dummyPanel = PanelUtils.Internal.CreatePanel(null, this); ((Object)((Component)dummyPanel).gameObject).name = "DummyPanel"; dummyPanel.CanvasGroup.alpha = 0f; dummyPanel.Internal.SetDummy(minimumFreeSpace); RootPanelGroup = new PanelGroup(this, Direction.Right); RootPanelGroup.AddElement(dummyPanel); } private void InitializeAnchorZones() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_0045: 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_0065: 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_008a: 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_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: 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_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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) anchorZonesParent = (RectTransform)new GameObject("CanvasAnchorZone", new Type[1] { typeof(RectTransform) }).transform; ((Transform)anchorZonesParent).SetParent((Transform)(object)RectTransform, false); anchorZonesParent.anchorMin = Vector2.zero; anchorZonesParent.anchorMax = Vector2.one; anchorZonesParent.sizeDelta = Vector2.zero; CreateAnchorZone(Direction.Left, new Vector2(0f, 0f), new Vector2(0f, 1f), new Vector2(m_canvasAnchorZoneLength, 0f)); CreateAnchorZone(Direction.Top, new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(0f, m_canvasAnchorZoneLength)); CreateAnchorZone(Direction.Right, new Vector2(1f, 0f), new Vector2(1f, 1f), new Vector2(m_canvasAnchorZoneLength, 0f)); CreateAnchorZone(Direction.Bottom, new Vector2(0f, 0f), new Vector2(1f, 0f), new Vector2(0f, m_canvasAnchorZoneLength)); for (int i = 0; i < anchorZones.Length; i++) { anchorZones[i].SetActive(value: false); } } private void CreateAnchorZone(Direction direction, Vector2 anchorMin, Vector2 anchorMax, Vector2 sizeDelta) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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) CanvasAnchorZone canvasAnchorZone = new GameObject("AnchorZone" + direction, new Type[1] { typeof(RectTransform) }).AddComponent<CanvasAnchorZone>(); canvasAnchorZone.Initialize(dummyPanel); canvasAnchorZone.SetDirection(direction); ((Transform)canvasAnchorZone.RectTransform).SetParent((Transform)(object)anchorZonesParent, false); canvasAnchorZone.RectTransform.pivot = anchorMin; canvasAnchorZone.RectTransform.anchorMin = anchorMin; canvasAnchorZone.RectTransform.anchorMax = anchorMax; canvasAnchorZone.RectTransform.anchoredPosition = Vector2.zero; canvasAnchorZone.RectTransform.sizeDelta = sizeDelta; anchorZones[(int)direction] = canvasAnchorZone; } private void AnchorZonesSetActive(bool value) { if (((Behaviour)this).enabled) { if (value) { ((Transform)anchorZonesParent).SetAsLastSibling(); } for (int i = 0; i < anchorZones.Length; i++) { anchorZones[i].SetActive(value); } } } [ContextMenu("Save Layout")] public void SaveLayout() { PanelSerialization.SerializeCanvas(this); } [ContextMenu("Load Layout")] public void LoadLayout() { PanelSerialization.DeserializeCanvas(this); } void ISerializationCallbackReceiver.OnBeforeSerialize() { if (initialPanelsAnchoredSerialized == null) { initialPanelsAnchoredSerialized = new List<SerializableAnchoredPanelProperties>(); } else { initialPanelsAnchoredSerialized.Clear(); } if (initialPanelsAnchored == null) { initialPanelsAnchored = new AnchoredPanelProperties(); } if (string.IsNullOrEmpty(m_id)) { m_id = Guid.NewGuid().ToString(); } AddToSerializedAnchoredPanelProperties(initialPanelsAnchored); } void ISerializationCallbackReceiver.OnAfterDeserialize() { if (initialPanelsAnchoredSerialized != null && initialPanelsAnchoredSerialized.Count > 0) { ReadFromSerializedAnchoredPanelProperties(0, out initialPanelsAnchored); } else { initialPanelsAnchored = new AnchoredPanelProperties(); } } private void AddToSerializedAnchoredPanelProperties(AnchoredPanelProperties props) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) SerializableAnchoredPanelProperties serializableAnchoredPanelProperties = default(SerializableAnchoredPanelProperties); serializableAnchoredPanelProperties.panel = props.panel; serializableAnchoredPanelProperties.anchorDirection = props.anchorDirection; serializableAnchoredPanelProperties.initialSize = props.initialSize; serializableAnchoredPanelProperties.childCount = props.subPanels.Count; serializableAnchoredPanelProperties.indexOfFirstChild = initialPanelsAnchoredSerialized.Count + 1; SerializableAnchoredPanelProperties item = serializableAnchoredPanelProperties; initialPanelsAnchoredSerialized.Add(item); for (int i = 0; i < props.subPanels.Count; i++) { AddToSerializedAnchoredPanelProperties(props.subPanels[i]); } } private int ReadFromSerializedAnchoredPanelProperties(int index, out AnchoredPanelProperties props) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) SerializableAnchoredPanelProperties serializableAnchoredPanelProperties = initialPanelsAnchoredSerialized[index]; AnchoredPanelProperties anchoredPanelProperties = new AnchoredPanelProperties { panel = serializableAnchoredPanelProperties.panel, anchorDirection = serializableAnchoredPanelProperties.anchorDirection, initialSize = serializableAnchoredPanelProperties.initialSize, subPanels = new List<AnchoredPanelProperties>() }; for (int i = 0; i != serializableAnchoredPanelProperties.childCount; i++) { index = ReadFromSerializedAnchoredPanelProperties(++index, out var props2); anchoredPanelProperties.subPanels.Add(props2); } props = anchoredPanelProperties; return index; } } public interface IPanelGroupElement { DynamicPanelsCanvas Canvas { get; } PanelGroup Group { get; } Vector2 Position { get; } Vector2 Size { get; } Vector2 MinSize { get; } void ResizeTo(Vector2 newSize, Direction horizontalDir = Direction.Right, Direction verticalDir = Direction.Bottom); void DockToRoot(Direction direction); void DockToPanel(IPanelGroupElement anchor, Direction direction); IPanelGroupElement GetSurroundingElement(Direction direction); } public class PanelGroup : IPanelGroupElement { internal class InternalSettings { private readonly PanelGroup group; public InternalSettings(PanelGroup group) { this.group = group; } public void SetDirty() { group.SetDirty(); } public void UpdateBounds(Vector2 position, Vector2 size) { //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) group.UpdateBounds(position, size); } public void UpdateLayout() { group.UpdateLayout(); } public void UpdateSurroundings(IPanelGroupElement left, IPanelGroupElement top, IPanelGroupElement right, IPanelGroupElement bottom) { group.UpdateSurroundings(left, top, right, bottom); } public void TryChangeSizeOf(IPanelGroupElement element, Direction direction, float deltaSize) { group.TryChangeSizeOf(element, direction, deltaSize); } public void ResizeElementTo(IPanelGroupElement element, Vector2 newSize, Direction horizontalDir, Direction verticalDir) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) group.ResizeElementTo(element, newSize, horizontalDir, verticalDir); } public void ReplaceElement(IPanelGroupElement beforeElement, IPanelGroupElement afterElement) { group.ReplaceElement(beforeElement, afterElement); } public void EnsureMinimumSize() { for (int i = 0; i < group.elements.Count; i++) { group.EnsureMinimumSizeOf(group.elements[i]); } } } private class ElementDirtyProperties { public IPanelGroupElement element; public float posX; public float posY; public float sizeX; public float sizeY; public ElementDirtyProperties() { } public ElementDirtyProperties(IPanelGroupElement element) { this.element = element; } public void Reset(IPanelGroupElement element) { this.element = element; posX = (posY = (sizeX = (sizeY = 0f))); } } protected const float MIN_SIZE_TOLERANCE = 0.0001f; protected readonly Direction direction; protected readonly List<IPanelGroupElement> elements; protected readonly IPanelGroupElement[] surroundings; private List<ElementDirtyProperties> resizeProperties; private int resizePropsIndex; protected bool isDirty; public DynamicPanelsCanvas Canvas { get; private set; } public PanelGroup Group { get; protected set; } internal InternalSettings Internal { get; private set; } public Vector2 Position { get; protected set; } public Vector2 Size { get; protected set; } public Vector2 MinSize { get; protected set; } public int Count => elements.Count; public IPanelGroupElement this[int index] => elements[index]; public PanelGroup(DynamicPanelsCanvas canvas, Direction direction) { Canvas = canvas; Internal = new InternalSettings(this); this.direction = direction; elements = new List<IPanelGroupElement>(2); surroundings = new IPanelGroupElement[4]; } public bool IsInSameDirection(Direction direction) { switch (direction) { case Direction.None: return false; case Direction.Left: case Direction.Right: if (this.direction != 0) { return this.direction == Direction.Right; } return true; default: if (this.direction != Direction.Top) { return this.direction == Direction.Bottom; } return true; } } public IPanelGroupElement GetSurroundingElement(Direction direction) { return surroundings[(int)direction]; } protected void SetDirty() { isDirty = true; for (PanelGroup group = Group; group != null; group = group.Group) { group.isDirty = true; } Canvas.SetDirty(); } protected virtual void UpdateBounds(Vector2 position, Vector2 size) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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_007b: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) Position = position; if (elements.Count == 1) { UpdateBoundsOf(elements[0], position, size); } else { bool flag = IsInSameDirection(Direction.Right); float num = (flag ? ((Size.x != 0f) ? (size.x / Size.x) : size.x) : ((Size.y != 0f) ? (size.y / Size.y) : size.y)); for (int i = 0; i < elements.Count; i++) { Vector2 size2 = elements[i].Size; if (flag) { size2.x *= num; size2.y = size.y; UpdateBoundsOf(elements[i], position, size2); position.x += size2.x; } else { size2.x = size.x; size2.y *= num; UpdateBoundsOf(elements[i], position, size2); position.y += size2.y; } } } Size = size; } protected virtual void UpdateLayout() { //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_03d5: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0327: 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_0330: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0387: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_022b: 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_023b: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_0251: 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_0245: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) if (!isDirty) { return; } elements.RemoveAll((IPanelGroupElement element) => element.IsNull() || element.Group != this); for (int num = elements.Count - 1; num >= 0; num--) { if (elements[num] is PanelGroup panelGroup) { panelGroup.UpdateLayout(); int count = panelGroup.Count; switch (count) { case 0: elements.RemoveAt(num); break; case 1: elements[num] = panelGroup.elements[0]; SetGroupFor(elements[num], this); num++; break; default: if (panelGroup.IsInSameDirection(direction)) { elements.RemoveAt(num); elements.InsertRange(num, panelGroup.elements); int num2 = 0; while (num2 < count) { SetGroupFor(elements[num], this); num2++; num++; } } break; } } } Vector2 val = Vector2.zero; Vector2 val2 = Vector2.zero; bool flag = IsInSameDirection(Direction.Right); int num3 = -1; for (int i = 0; i < elements.Count; i++) { Vector2 size = elements[i].Size; Vector2 minSize = elements[i].MinSize; bool flag2 = false; if (size.x == 0f && minSize.x > 0f) { size.x = Mathf.Min(1f, minSize.x); flag2 = true; } if (size.y == 0f && minSize.y > 0f) { size.y = Mathf.Min(1f, minSize.y); flag2 = true; } if (flag2) { UpdateBoundsOf(elements[i], elements[i].Position, size); } if (i == 0) { val = size; val2 = minSize; } else if (flag) { val.x += size.x; val2.x += minSize.x; if (size.y < val.y) { val.y = size.y; } if (minSize.y > val2.y) { val2.y = minSize.y; } } else { val.y += size.y; val2.y += minSize.y; if (size.x < val.x) { val.x = size.x; } if (minSize.x > val2.x) { val2.x = minSize.x; } } if (elements[i] is Panel && ((Panel)elements[i]).Internal.IsDummy) { num3 = i; } } if (num3 >= 0) { Vector2 zero = Vector2.zero; if (val.x < Size.x) { zero.x = Size.x - val.x; val.x = Size.x; } if (val.y < Size.y) { zero.y = Size.y - val.y; val.y = Size.y; } RectTransform rectTransform = ((Panel)elements[num3]).RectTransform; rectTransform.sizeDelta += zero; } Size = val; MinSize = val2; isDirty = false; } protected void UpdateSurroundings(IPanelGroupElement left, IPanelGroupElement top, IPanelGroupElement right, IPanelGroupElement bottom) { surroundings[0] = left; surroundings[1] = top; surroundings[2] = right; surroundings[3] = bottom; bool flag = IsInSameDirection(Direction.Right); for (int i = 0; i < elements.Count; i++) { if (flag) { left = ((i > 0) ? elements[i - 1] : surroundings[0]); right = ((i < elements.Count - 1) ? elements[i + 1] : surroundings[2]); } else { bottom = ((i > 0) ? elements[i - 1] : surroundings[3]); top = ((i < elements.Count - 1) ? elements[i + 1] : surroundings[1]); } if (elements[i] is PanelGroup panelGroup) { panelGroup.UpdateSurroundings(left, top, right, bottom); } else { ((Panel)elements[i]).Internal.UpdateSurroundings(left, top, right, bottom); } } } protected void ResizeElementTo(IPanelGroupElement element, Vector2 newSize, Direction horizontalDir, Direction verticalDir) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) if (horizontalDir != 0 && horizontalDir != Direction.Right) { horizontalDir = Direction.Right; } if (verticalDir != Direction.Bottom && verticalDir != Direction.Top) { verticalDir = Direction.Bottom; } Direction direction = horizontalDir.Opposite(); Direction direction2 = verticalDir.Opposite(); float num = newSize.x - element.Size.x; if (num > 0.0001f) { TryChangeSizeOf(element, horizontalDir, num); num = newSize.x - element.Size.x; if (num > 0.0001f) { TryChangeSizeOf(element, direction, num); } } else if (num < -0.0001f) { TryChangeSizeOf(element.GetSurroundingElement(horizontalDir), direction, 0f - num); num = newSize.x - element.Size.x; if (num < -0.0001f) { TryChangeSizeOf(element.GetSurroundingElement(direction), horizontalDir, 0f - num); } } float num2 = newSize.y - element.Size.y; if (num2 > 0.0001f) { TryChangeSizeOf(element, verticalDir, num2); num2 = newSize.y - element.Size.y; if (num2 > 0.0001f) { TryChangeSizeOf(element, direction2, num2); } } else if (num2 < -0.0001f) { TryChangeSizeOf(element.GetSurroundingElement(verticalDir), direction2, 0f - num2); num2 = newSize.y - element.Size.y; if (num2 < -0.0001f) { TryChangeSizeOf(element.GetSurroundingElement(direction2), verticalDir, 0f - num2); } } } protected virtual void EnsureMinimumSizeOf(IPanelGroupElement element) { //IL_0001: 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_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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) float num = element.Size.x - element.MinSize.x; if (num < -0.0001f) { TryChangeSizeOf(element, Direction.Right, 0f - num); num = element.Size.x - element.MinSize.x; if (num < -0.0001f) { TryChangeSizeOf(element, Direction.Left, 0f - num); } } float num2 = element.Size.y - element.MinSize.y; if (num2 < -0.0001f) { TryChangeSizeOf(element, Direction.Bottom, 0f - num2); num2 = element.Size.y - element.MinSize.y; if (num2 < -0.0001f) { TryChangeSizeOf(element, Direction.Top, 0f - num2); } } if (element is PanelGroup panelGroup) { panelGroup.Internal.EnsureMinimumSize(); } } protected void TryChangeSizeOf(IPanelGroupElement element, Direction direction, float deltaSize) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_00aa: 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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) if (element.IsNull() || deltaSize <= 0.0001f || element.GetSurroundingElement(direction).IsNull()) { return; } resizePropsIndex = 0; IPanelGroupElement surroundingElement = element.GetSurroundingElement(direction); element = surroundingElement.GetSurroundingElement(direction.Opposite()); AddResizeProperty(element); float deltaSize2 = TryChangeSizeOfInternal(surroundingElement, direction, deltaSize); if (resizePropsIndex > 1) { ResizeElementHelper(0, direction, deltaSize2); for (int i = 0; i < resizePropsIndex; i++) { ElementDirtyProperties elementDirtyProperties = resizeProperties[i]; Vector2 position = elementDirtyProperties.element.Position + new Vector2(elementDirtyProperties.posX, elementDirtyProperties.posY); Vector2 size = elementDirtyProperties.element.Size + new Vector2(elementDirtyProperties.sizeX, elementDirtyProperties.sizeY); UpdateBoundsOf(elementDirtyProperties.element, position, size); } } } protected float TryChangeSizeOfInternal(IPanelGroupElement element, Direction direction, float deltaSize) { //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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) int num = resizePropsIndex; AddResizeProperty(element); float num2 = ((direction != 0 && direction != Direction.Right) ? (element.Size.y - element.MinSize.y) : (element.Size.x - element.MinSize.x)); if (num2 > 0.0001f) { if (num2 >= deltaSize) { num2 = deltaSize; deltaSize = 0f; } else { deltaSize -= num2; } ResizeElementHelper(num, direction.Opposite(), 0f - num2); } else { num2 = 0f; } if (deltaSize > 0.0001f) { IPanelGroupElement surroundingElement = element.GetSurroundingElement(direction); if (!surroundingElement.IsNull()) { if (surroundingElement.Group != element.Group) { AddResizeProperty(surroundingElement.GetSurroundingElement(direction.Opposite())); } float num3 = TryChangeSizeOfInternal(surroundingElement, direction, deltaSize); if (num3 > 0.0001f) { if (surroundingElement.Group == element.Group) { switch (direction) { case Direction.Left: resizeProperties[num].posX -= num3; break; case Direction.Top: resizeProperties[num].posY += num3; break; case Direction.Right: resizeProperties[num].posX += num3; break; default: resizeProperties[num].posY -= num3; break; } num2 += num3; } else { ResizeElementHelper(num + 1, direction, num3); } } else if (num2 == 0f) { resizePropsIndex = num; } else { resizePropsIndex = num + 1; } } else if (num2 == 0f) { resizePropsIndex = num; } } return num2; } private void AddResizeProperty(IPanelGroupElement element) { if (resizeProperties == null) { resizeProperties = new List<ElementDirtyProperties> { new ElementDirtyProperties(element), new ElementDirtyProperties() }; } else if (resizePropsIndex == resizeProperties.Count) { resizeProperties.Add(new ElementDirtyProperties(element)); } else { resizeProperties[resizePropsIndex].Reset(element); } resizePropsIndex++; } private void ResizeElementHelper(int resizePropsIndex, Direction direction, float deltaSize) { ElementDirtyProperties elementDirtyProperties = resizeProperties[resizePropsIndex]; switch (direction) { case Direction.Left: elementDirtyProperties.posX -= deltaSize; elementDirtyProperties.sizeX += deltaSize; break; case Direction.Top: elementDirtyProperties.sizeY += deltaSize; break; case Direction.Right: elementDirtyProperties.sizeX += deltaSize; break; default: elementDirtyProperties.posY -= deltaSize; elementDirtyProperties.sizeY += deltaSize; break; } } protected void ReplaceElement(IPanelGroupElement beforeElement, IPanelGroupElement afterElement) { if (beforeElement == afterElement) { return; } if (beforeElement.IsNull() || afterElement.IsNull()) { Debug.LogError((object)"Invalid argument!"); return; } int num = elements.IndexOf(beforeElement); if (num < 0) { Debug.LogError((object)"Invalid index!"); return; } if (beforeElement.Group == this) { Canvas.UnanchoredPanelGroup.AddElement(beforeElement); } AddElementAt(num, afterElement); } public void ResizeTo(Vector2 newSize, Direction horizontalDir = Direction.Right, Direction verticalDir = Direction.Bottom) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (Group != null) { Group.ResizeElementTo(this, newSize, horizontalDir, verticalDir); } } public void DockToRoot(Direction direction) { PanelManager.Instance.AnchorPanel(this, Canvas, direction); } public void DockToPanel(IPanelGroupElement anchor, Direction direction) { PanelManager.Instance.AnchorPanel(this, anchor, direction); } public void AddElement(IPanelGroupElement element) { AddElementAt(elements.Count, element); } public void AddElementBefore(IPanelGroupElement pivot, IPanelGroupElement element) { AddElementAt(elements.IndexOf(pivot), element); } public void AddElementAfter(IPanelGroupElement pivot, IPanelGroupElement element) { AddElementAt(elements.IndexOf(pivot) + 1, element); } protected void AddElementAt(int index, IPanelGroupElement element) { if (element.IsNull()) { Debug.LogError((object)"Invalid argument!"); return; } if (index < 0 || index > elements.Count) { Debug.LogError((object)"Invalid index!"); return; } int num = elements.IndexOf(element); if (num >= 0 && element.Group != this) { if (index > num) { index--; } elements.RemoveAt(num); num = -1; } if (num == index) { return; } if (element.Group != null) { element.Group.SetDirty(); } if (num < 0) { elements.Insert(index, element); SetGroupFor(element, this); } else if (num != index) { if (num > index) { num++; } elements.Insert(index, element); elements.RemoveAt(num); } SetDirty(); } protected void SetGroupFor(IPanelGroupElement element, PanelGroup group) { Panel panel = element as Panel; if ((Object)(object)panel != (Object)null) { panel.Internal.Group = group; if ((Object)(object)((Transform)panel.RectTransform).parent != (Object)(object)group.Canvas.RectTransform) { ((Transform)panel.RectTransform).SetParent((Transform)(object)group.Canvas.RectTransform, false); } } else { ((PanelGroup)element).Group = group; } } protected void UpdateBoundsOf(IPanelGroupElement element, Vector2 position, Vector2 size) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0014: Unknown result type (might be due to invalid IL or missing references) if (element is Panel) { ((Panel)element).Internal.UpdateBounds(position, size); } else { ((PanelGroup)element).UpdateBounds(position, size); } } public override string ToString() { if (direction == Direction.Left || direction == Direction.Right) { return "Horizontal Group"; } return "Vertical Group"; } public void PrintHierarchy() { Debug.Log((object)ToTree(0, new StringBuilder(500))); } private string ToTree(int depth, StringBuilder treeBuilder) { string text = string.Empty; for (int i = 0; i <= depth; i++) { text += "-"; } treeBuilder.Append(depth).Append(text).Append(' ') .Append(this) .Append(Environment.NewLine); foreach (IPanelGroupElement element in elements) { if (element is Panel) { treeBuilder.Append(depth + 1).Append(text).Append("- ") .Append(element) .Append(Environment.NewLine); } else { ((PanelGroup)element).ToTree(depth + 1, treeBuilder); } } if (depth != 0) { return null; } return treeBuilder.ToString(); } } public class UnanchoredPanelGroup : PanelGroup { public UnanchoredPanelGroup(DynamicPanelsCanvas canvas) : base(canvas, Direction.None) { } protected override void UpdateBounds(Vector2 position, Vector2 size) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < elements.Count; i++) { if (elements[i] is Panel) { RestrictPanelToBounds((Panel)elements[i], size); } } } protected override void UpdateLayout() { bool num = isDirty; base.UpdateLayout(); if (!num) { return; } for (int num2 = elements.Count - 1; num2 >= 0; num2--) { if (elements[num2] is PanelGroup panelGroup) { elements.RemoveAt(num2); int num3 = 0; while (num3 < panelGroup.Count) { elements.Insert(num2, panelGroup[num3]); SetGroupFor(elements[num2], this); num3++; num2++; } } } } protected override void EnsureMinimumSizeOf(IPanelGroupElement element) { //IL_0011: 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_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) //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_0028: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) Panel panel = element as Panel; if (Object.op_Implicit((Object)(object)panel)) { Vector2 position = panel.Position; Vector2 size = panel.Size; Vector2 minSize = panel.MinSize; bool flag = false; float num = size.x - minSize.x; if (num < -0.0001f) { size.x -= num; position.x += num * 0.5f; flag = true; } float num2 = size.y - minSize.y; if (num2 < -0.0001f) { size.y -= num2; position.y += num2 * 0.5f; flag = true; } if (flag) { panel.Internal.UpdateBounds(position, size); RestrictPanelToBounds(panel); } } } public void RestrictPanelToBounds(Panel panel) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) RestrictPanelToBounds(panel, base.Canvas.Size); } protected void RestrictPanelToBounds(Panel panel, Vector2 canvasSize) { //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_0012: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) Vector2 anchoredPosition = panel.RectTransform.anchoredPosition; Vector2 sizeDelta = panel.RectTransform.sizeDelta; if (anchoredPosition.y + sizeDelta.y < 50f) { anchoredPosition.y = 50f - sizeDelta.y; } else if (anchoredPosition.y + sizeDelta.y > canvasSize.y) { anchoredPosition.y = canvasSize.y - sizeDelta.y; } if (anchoredPosition.x < 0f) { anchoredPosition.x = 0f; } else if (canvasSize.x - anchoredPosition.x < 125f) { anchoredPosition.x = canvasSize.x - 125f; } panel.RectTransform.anchoredPosition = anchoredPosition; } public override string ToString() { return "Unanchored Panel Group"; } } [RequireComponent(typeof(CanvasRenderer))] public class NonDrawingGraphic : Graphic { public override void SetMaterialDirty() { } public override void SetVerticesDirty() { } protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); } } public class PanelCursorHandler : MonoBehaviour { private static PanelCursorHandler instance; private PanelResizeHelper activeResizeHelper; private PointerEventData activeEventData; private bool isResizing; private Vector2 prevPointerPos; [SerializeField] private Texture2D horizontalCursor; [SerializeField] private Texture2D verticalCursor; [SerializeField] private Texture2D diagonalCursorTopLeft; [SerializeField] private Texture2D diagonalCursorTopRight; private void Awake() { instance = this; } public static void OnPointerEnter(PanelResizeHelper resizeHelper, PointerEventData eventData) { if (!((Object)(object)instance == (Object)null)) { instance.activeResizeHelper = resizeHelper; instance.activeEventData = eventData; } } public static void OnPointerExit(PanelResizeHelper resizeHelper) { if (!((Object)(object)instance == (Object)null) && (Object)(object)instance.activeResizeHelper == (Object)(object)resizeHelper) { instance.activeResizeHelper = null; instance.activeEventData = null; if (!instance.isResizing) { SetDefaultCursor(); } } } public static void OnBeginResize(Direction primary, Direction secondary) { if (!((Object)(object)instance == (Object)null)) { instance.isResizing = true; instance.UpdateCursor(primary, secondary); } } public static void OnEndResize() { //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) if (!((Object)(object)instance == (Object)null)) { instance.isResizing = false; if ((Object)(object)instance.activeResizeHelper == (Object)null) { SetDefaultCursor(); } else { instance.prevPointerPos = new Vector2(-1f, -1f); } } } 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_0026: 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_0060: 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_009d: Unknown result type (might be due to invalid IL or missing references) if (isResizing || !((Object)(object)activeResizeHelper != (Object)null)) { return; } Vector2 position = activeEventData.position; if (!(position != prevPointerPos)) { return; } if (activeEventData.dragging) { SetDefaultCursor(); } else { Direction direction = activeResizeHelper.Direction; Direction secondDirection = activeResizeHelper.GetSecondDirection(activeEventData.position); if (activeResizeHelper.Panel.CanResizeInDirection(direction)) { UpdateCursor(direction, secondDirection); } else if (secondDirection != Direction.None) { UpdateCursor(secondDirection, Direction.None); } else { SetDefaultCursor(); } } prevPointerPos = position; } private static void SetDefaultCursor() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) Cursor.SetCursor((Texture2D)null, Vector2.zero, (CursorMode)0); } private void UpdateCursor(Direction primary, Direction secondary) { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) Texture2D val = (Texture2D)(primary switch { Direction.Left => secondary switch { Direction.Top => diagonalCursorTopLeft, Direction.Bottom => diagonalCursorTopRight, _ => horizontalCursor, }, Direction.Right => secondary switch { Direction.Top => diagonalCursorTopRight, Direction.Bottom => diagonalCursorTopLeft, _ => horizontalCursor, }, Direction.Top => secondary switch { Direction.Left => diagonalCursorTopLeft, Direction.Right => diagonalCursorTopRight, _ => verticalCursor, }, _ => secondary switch { Direction.Left => diagonalCursorTopRight, Direction.Right => diagonalCursorTopLeft, _ => verticalCursor, }, }); Cursor.SetCursor(val, new Vector2((float)((Texture)val).width * 0.5f, (float)((Texture)val).height * 0.5f), (CursorMode)0); } } [DisallowMultipleComponent] public class PanelHeader : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler, IEndDragHandler { [SerializeField] private Panel m_panel; private int pointerId = -98765; private Vector2 m_initialTouchPos; public Panel Panel => m_panel; internal Vector2 InitialTouchPos => m_initialTouchPos; private void OnEnable() { pointerId = -98765; } public void OnBeginDrag(PointerEventData eventData) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (!PanelManager.Instance.OnBeginPanelTranslate(m_panel)) { eventData.pointerDrag = null; return; } pointerId = eventData.pointerId; RectTransformUtility.ScreenPointToLocalPointInRectangle(m_panel.RectTransform, eventData.position, m_panel.Canvas.Internal.worldCamera, ref m_initialTouchPos); } public void OnDrag(PointerEventData eventData) { if (eventData.pointerId != pointerId) { eventData.pointerDrag = null; } else { PanelManager.Instance.OnPanelTranslate(this, eventData); } } public void OnEndDrag(PointerEventData eventData) { if (eventData.pointerId == pointerId) { pointerId = -98765; PanelManager.Instance.OnEndPanelTranslate(m_panel); } } public void Stop() { pointerId = -98765; } } public static class PanelNotificationCenter { internal static class Internal { public static void PanelCreated(Panel panel) { if (IsPanelRegistered(panel)) { return; } panels.Add(panel); panel.Internal.ChangeCloseButtonVisibility(m_onPanelClosed != null); if (PanelNotificationCenter.OnPanelCreated != null) { PanelNotificationCenter.OnPanelCreated(panel); } if (((Component)panel).gameObject.activeInHierarchy) { if (PanelNotificationCenter.OnPanelBecameActive != null) { PanelNotificationCenter.OnPanelBecameActive(panel); } } else if (PanelNotificationCenter.OnPanelBecameInactive != null) { PanelNotificationCenter.OnPanelBecameInactive(panel); } } public static void PanelDestroyed(Panel panel) { if (panels.Remove(panel) && PanelNotificationCenter.OnPanelDestroyed != null) { PanelNotificationCenter.OnPanelDestroyed(panel); } } public static void PanelBecameActive(Panel panel) { if (IsPanelRegistered(panel) && PanelNotificationCenter.OnPanelBecameActive != null) { PanelNotificationCenter.OnPanelBecameActive(panel); } } public static void PanelBecameInactive(Panel panel) { if (IsPanelRegistered(panel) && PanelNotificationCenter.OnPanelBecameInactive != null) { PanelNotificationCenter.OnPanelBecameInactive(panel); } } public static void PanelClosed(Panel panel) { if (m_onPanelClosed != null) { m_onPanelClosed(panel); } } public static void TabDragStateChanged(PanelTab tab, bool isDragging) { if (isDragging) { if (PanelNotificationCenter.OnStartedDraggingTab != null) { PanelNotificationCenter.OnStartedDraggingTab(tab); } } else if (PanelNotificationCenter.OnStoppedDraggingTab != null) { PanelNotificationCenter.OnStoppedDraggingTab(tab); } } public static void ActiveTabChanged(PanelTab tab) { if (PanelNotificationCenter.OnActiveTabChanged != null) { PanelNotificationCenter.OnActiveTabChanged(tab); } } public static void TabIDChanged(PanelTab tab, string previousID, string newID) { if (!idToTab.ContainsValue(tab)) { tab.Internal.ChangeCloseButtonVisibility(m_onTabClosed != null); if (PanelNotificationCenter.OnTabCreated != null) { PanelNotificationCenter.OnTabCreated(tab); } } if (!string.IsNullOrEmpty(previousID) && idToTab.TryGetValue(previousID, out var value) && (Object)(object)value == (Object)(object)tab) { idToTab.Remove(previousID); } if (!string.IsNullOrEmpty(newID)) { idToTab[newID] = tab; } else if (PanelNotificationCenter.OnTabDestroyed != null) { PanelNotificationCenter.OnTabDestroyed(tab); } } public static void TabClosed(PanelTab tab) { if (m_onTabClosed != null) { m_onTabClosed(tab); } } private static bool IsPanelRegistered(Panel panel) { for (int num = panels.Count - 1; num >= 0; num--) { if ((Object)(object)panels[num] == (Object)(object)panel) { return true; } } return false; } } public delegate void PanelDelegate(Panel panel); public delegate void TabDelegate(PanelTab tab); private static PanelDelegate m_onPanelClosed; private static TabDelegate m_onTabClosed; private static readonly List<Panel> panels = new List<Panel>(32); private static readonly Dictionary<string, PanelTab> idToTab = new Dictionary<string, PanelTab>(32); public static int NumberOfPanels => panels.Count; public static event PanelDelegate OnPanelCreated; public static event PanelDelegate OnPanelDestroyed; public static event PanelDelegate OnPanelBecameActive; public static event PanelDelegate OnPanelBecameInactive; public static event TabDelegate OnTabCreated; public static event TabDelegate OnTabDestroyed; public static event TabDelegate OnActiveTabChanged; public static event TabDelegate OnStartedDraggingTab; public static event TabDelegate OnStoppedDraggingTab; public static event PanelDelegate OnPanelClosed { add { if (value == null) { return; } if (m_onPanelClosed == null) { for (int num = panels.Count - 1; num >= 0; num--) { panels[num].Internal.ChangeCloseButtonVisibility(isVisible: true); } } m_onPanelClosed = (PanelDelegate)Delegate.Combine(m_onPanelClosed, value); } remove { if (value == null || m_onPanelClosed == null) { return; } m_onPanelClosed = (PanelDelegate)Delegate.Remove(m_onPanelClosed, value); if (m_onPanelClosed == null) { for (int num = panels.Count - 1; num >= 0; num--) { panels[num].Internal.ChangeCloseButtonVisibility(isVisible: false); } } } } public static event TabDelegate OnTabClosed { add { if (value == null) { return; } if (m_onTabClosed == null) { foreach (PanelTab value2 in idToTab.Values) { value2.Internal.ChangeCloseButtonVisibility(isVisible: true); } } m_onTabClosed = (TabDelegate)Delegate.Combine(m_onTabClosed, value); } remove { if (value == null || m_onTabClosed == null) { return; } m_onTabClosed = (TabDelegate)Delegate.Remove(m_onTabClosed, value); if (m_onTabClosed != null) { return; } foreach (PanelTab value2 in idToTab.Values) { value2.Internal.ChangeCloseButtonVisibility(isVisible: false); } } } public static Panel GetPanel(int panelIndex) { if (panelIndex >= 0 && panelIndex < panels.Count) { return panels[panelIndex]; } return null; } public static bool TryGetTab(string tabID, out PanelTab tab) { if (string.IsNullOrEmpty(tabID)) { tab = null; return false; } return idToTab.TryGetValue(tabID, out tab); } } [DisallowMultipleComponent] public class PanelResizeHelper : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler { private Panel m_panel; private Direction m_direction; private Direction secondDirection; private PanelResizeHelper helperBefore; private PanelResizeHelper helperAfter; private int pointerId = -98765; public Panel Panel => m_panel; public RectTransform RectTransform { get; private set; } public Direction Direction => m_direction; private void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown RectTransform = (RectTransform)((Component)this).transform; } private void OnEnable() { pointerId = -98765; } public void Initialize(Panel panel, Direction direction, PanelResizeHelper helperBefore, PanelResizeHelper helperAfter) { m_panel = panel; m_direction = direction; this.helperBefore = helperBefore; this.helperAfter = helperAfter; } public void OnPointerEnter(PointerEventData eventData) { PanelCursorHandler.OnPointerEnter(this, eventData); } public void OnPointerExit(PointerEventData eventData) { PanelCursorHandler.OnPointerExit(this); } public void OnBeginDrag(PointerEventData eventData) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (!m_panel.CanResizeInDirection(m_direction)) { eventData.pointerDrag = null; return; } pointerId = eventData.pointerId; secondDirection = GetSecondDirection(eventData.pressPosition); PanelCursorHandler.OnBeginResize(m_direction, secondDirection); } public void OnDrag(PointerEventData eventData) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) if (eventData.pointerId == pointerId) { m_panel.Internal.OnResize(m_direction, eventData.position); if (secondDirection != Direction.None) { m_panel.Internal.OnResize(secondDirection, eventData.position); } } } public void OnEndDrag(PointerEventData eventData) { if (eventData.pointerId == pointerId) { if (!m_panel.IsDocked) { ((UnanchoredPanelGroup)m_panel.Group).RestrictPanelToBounds(m_panel); } pointerId = -98765; PanelCursorHandler.OnEndResize(); } } public Direction GetSecondDirection(Vector2 pointerPosition) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (m_panel.IsDocked) { return Direction.None; } Direction direction = (RectTransformUtility.RectangleContainsScreenPoint(helperBefore.RectTransform, pointerPosition, m_panel.Canvas.Internal.worldCamera) ? helperBefore.m_direction : ((!RectTransformUtility.RectangleContainsScreenPoint(helperAfter.RectTransform, pointerPosition, m_panel.Canvas.Internal.worldCamera)) ? Direction.None : helperAfter.m_direction)); if (!m_panel.CanResizeInDirection(direction)) { direction = Direction.None; } return direction; } public void Stop() { if (pointerId != -98765) { if (!m_panel.IsDocked) { ((UnanchoredPanelGroup)m_panel.Group).RestrictPanelToBounds(m_panel); } pointerId = -98765; PanelCursorHandler.OnEndResize(); } } } public static class PanelSerialization { [Serializable] private class SerializedCanvas { public bool active; public bool useFreeSpace; public SerializedPanelGroup rootPanelGroup; public SerializedPanelGroup unanchoredPanelGroup; } [Serializable] private abstract class ISerializedElement { public SerializedVector2 size; } [Serializable] private class SerializedPanelGroup : ISerializedElement { public bool horizontal; public ISerializedElement[] children; } [Serializable] private class SerializedDummyPanel : ISerializedElement { } [Serializable] private class SerializedPanel : ISerializedElement { public int activeTab; public SerializedPanelTab[] tabs; public SerializedVector2 floatingSize; } [Serializable] private class SerializedUnanchoredPanel : SerializedPanel { public bool active; public SerializedVector2 position; } [Serializable] private class SerializedPanelTab { public string id; } [Serializable] private struct SerializedVector2 { public float x; public float y; public static implicit operator Vector2(SerializedVector2 v) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) return new Vector2(v.x, v.y); } public static implicit operator SerializedVector2(Vector2 v) { //IL_000a: 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) SerializedVector2 result = default(SerializedVector2); result.x = v.x; result.y = v.y; return result; } } private struct GroupElementSizeHolder { public IPanelGroupElement element; public Vector2 size; public GroupElementSizeHolder(IPanelGroupElement element, Vector2 size) { //IL_0008: 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) this.element = element; this.size = size; } } private static readonly List<SerializedPanelTab> tabsTemp = new List<SerializedPanelTab>(4); private static readonly List<GroupElementSizeHolder> sizesHolder = new List<GroupElementSizeHolder>(4); public static void SerializeCanvas(DynamicPanelsCanvas canvas) { byte[] array = SerializeCanvasToArray(canvas); if (array == null || array.Length == 0) { Debug.LogError((object)"Couldn't serialize!"); return; } PlayerPrefs.SetString(canvas.ID, Convert.ToBase64String(array)); PlayerPrefs.Save(); } public static void DeserializeCanvas(DynamicPanelsCanvas canvas) { DeserializeCanvasFromArray(canvas, Convert.FromBase64String(PlayerPrefs.GetString(canvas.ID, string.Empty))); } public static byte[] SerializeCanvasToArray(DynamicPanelsCanvas canvas) { canvas.ForceRebuildLayoutImmediate(); BinaryFormatter binaryFormatter = new BinaryFormatter(); using MemoryStream memoryStream = new MemoryStream(); binaryFormatter.Serialize(memoryStream, new SerializedCanvas { active = ((Component)canvas).gameObject.activeSelf, useFreeSpace = canvas.LeaveFreeSpace, rootPanelGroup = (Serialize(canvas.RootPanelGroup) as SerializedPanelGroup), unanchoredPanelGroup = (Serialize(canvas.UnanchoredPanelGroup) as SerializedPanelGroup) }); return memoryStream.ToArray(); } public static void DeserializeCanvasFromArray(DynamicPanelsCanvas canvas, byte[] data) { //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) if (data == null || data.Length == 0) { Debug.LogError((object)"Data is null!"); return; } BinaryFormatter binaryFormatter = new BinaryFormatter(); SerializedCanvas serializedCanvas; using (MemoryStream serializationStream = new MemoryStream(data)) { serializedCanvas = binaryFormatter.Deserialize(serializationStream) as SerializedCanvas; } if (serializedCanvas == null) { return; } sizesHolder.Clear(); canvas.LeaveFreeSpace = serializedCanvas.useFreeSpace; if (serializedCanvas.rootPanelGroup != null) { PanelGroup rootPanelGroup = canvas.RootPanelGroup; ISerializedElement[] children = serializedCanvas.rootPanelGroup.children; for (int num = children.Length - 1; num >= 0; num--) { IPanelGroupElement panelGroupElement = Deserialize(canvas, children[num]); if (panelGroupElement != null) { if (rootPanelGroup.Count == 0) { rootPanelGroup.AddElement(panelGroupElement); } else { rootPanelGroup.AddElementBefore(rootPanelGroup[0], panelGroupElement); } sizesHolder.Insert(0, new GroupElementSizeHolder(panelGroupElement, children[num].size)); } } } if (sizesHolder.Count > 0) { canvas.ForceRebuildLayoutImmediate(); for (int i = 0; i < sizesHolder.Count; i++) { sizesHolder[i].element.ResizeTo(sizesHolder[i].size, Direction.Right, Direction.Top); } } if (serializedCanvas.unanchoredPanelGroup != null) { ISerializedElement[] children2 = serializedCanvas.unanchoredPanelGroup.children; for (int j = 0; j < children2.Length; j++) { if (children2[j] is SerializedUnanchoredPanel element) { Panel panel = Deserialize(canvas, element) as Panel; if ((Object)(object)panel != (Object)null) { panel.Detach(); canvas.UnanchoredPanelGroup.RestrictPanelToBounds(panel); } } } } for (int k = 0; k < canvas.UnanchoredPanelGroup.Count; k++) { Panel panel2 = canvas.UnanchoredPanelGroup[k] as Panel; if ((Object)(object)panel2 != (Object)null) { ((Transform)panel2.RectTransform).SetAsLastSibling(); } } ((Component)canvas).gameObject.SetActive(serializedCanvas.active); } private static ISerializedElement Serialize(IPanelGroupElement element) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_011a: 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_00b4: 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) if (element == null) { return null; } if (element is Panel) { Panel panel = (Panel)element; if (panel.Internal.IsDummy) { return new SerializedDummyPanel { size = panel.Size }; } tabsTemp.Clear(); for (int i = 0; i < panel.NumberOfTabs; i++) { PanelTab panelTab = panel[i]; tabsTemp.Add(new SerializedPanelTab { id = panelTab.ID }); } if (tabsTemp.Count == 0) { return null; } if (panel.IsDocked) { return new SerializedPanel { activeTab = panel.ActiveTab, tabs = tabsTemp.ToArray(), size = panel.Size, floatingSize = panel.FloatingSize }; } return new SerializedUnanchoredPanel { active = ((Component)panel).gameObject.activeSelf, activeTab = panel.ActiveTab, tabs = tabsTemp.ToArray(), position = panel.Position, size = panel.Size, floatingSize = panel.Size }; } PanelGroup panelGroup = (PanelGroup)element; ISerializedElement[] array = new ISerializedElement[panelGroup.Count]; for (int j = 0; j < panelGroup.Count; j++) { array[j] = Serialize(panelGroup[j]); } return new SerializedPanelGroup { horizontal = panelGroup.IsInSameDirection(Direction.Right), children = array, size = panelGroup.Size }; } private static IPanelGroupElement Deserialize(DynamicPanelsCanvas canvas, ISerializedElement element) { //IL_00f2: 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_0171: Unknown result type (might be due to invalid IL or missing references) if (element == null) { return null; } if (element is SerializedDummyPanel) { return canvas.Internal.DummyPanel; } if (element is SerializedPanel) { SerializedPanel serializedPanel = (SerializedPanel)element; Panel panel = null; SerializedPanelTab[] tabs = serializedPanel.tabs; for (int i = 0; i < tabs.Length; i++) { if (PanelNotificationCenter.TryGetTab(tabs[i].id, out var tab)) { if ((Object)(object)panel == (Object)null) { panel = tab.Detach(); canvas.UnanchoredPanelGroup.AddElement(panel); } else { panel.AddTab(tab); } } } if ((Object)(object)panel != (Object)null) { if (serializedPanel.activeTab < tabs.Length) { int tabIndex = panel.GetTabIndex(tabs[serializedPanel.activeTab].id); if (tabIndex >= 0) { panel.ActiveTab = tabIndex; } } if (serializedPanel is SerializedUnanchoredPanel) { SerializedUnanchoredPanel serializedUnanchoredPanel = (SerializedUnanchoredPanel)serializedPanel; panel.RectTransform.anchoredPosition = serializedUnanchoredPanel.position; ((Component)panel).gameObject.SetActive(serializedUnanchoredPanel.active); } panel.FloatingSize = serializedPanel.floatingSize; } return panel; } if (element is SerializedPanelGroup) { SerializedPanelGroup serializedPanelGroup = (SerializedPanelGroup)element; ISerializedElement[] children = serializedPanelGroup.children; if (children == null || children.Length == 0) { return null; } PanelGroup panelGroup = new PanelGroup(canvas, (!serializedPanelGroup.horizontal) ? Direction.Top : Direction.Right); for (int j = 0; j < children.Length; j++) { if (children[j] != null) { IPanelGroupElement panelGroupElement = Deserialize(canvas, children[j]); if (panelGroupElement != null) { panelGroup.AddElement(panelGroupElement); sizesHolder.Add(new GroupElementSizeHolder(panelGroupElement, children[j].size)); } } } if (panelGroup.Count > 0) { return panelGroup; } } return null; } } [DisallowMultipleComponent] public class PanelTab : MonoBehaviour, IPointerClickHandler, IEventSystemHandler, IBeginDragHandler, IDragHandler, IEndDragHandler { internal class InternalSettings { private readonly PanelTab tab; public readonly RectTransform RectTransform; public bool IsBeingDetached => tab.pointerId != -98765; public InternalSettings(PanelTab tab) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown this.tab = tab; RectTransform = (RectTransform)((Component)tab).transform; } public void Initialize(Panel panel, RectTransform content) { tab.m_panel = panel; tab.Content = content; } public void ChangeCloseButtonVisibility(bool isVisible) { if (Object.op_Implicit((Object)(object)tab.closeButton) && isVisible != ((Component)tab.closeButton).gameObject.activeSelf) { ((Component)tab.closeButton).gameObject.SetActive(isVisible); float preferredWidth = ((Component)tab.closeButton).GetComponent<LayoutElement>().preferredWidth; LayoutElement component = ((Component)tab).GetComponent<LayoutElement>(); component.preferredWidth += (isVisible ? preferredWidth : (0f - preferredWidth)); } } public void Stop() { if (tab.pointerId != -98765) { tab.ResetBackgroundColor(); tab.pointerId = -98765; PanelNotificationCenter.Internal.TabDragStateChanged(tab, isDragging: false); } } public void SetActive(bool activeState) { tab.SetActive(activeState); } } [SerializeField] private Image background; [SerializeField] private Image iconHolder; [SerializeField] private Text nameHolder; [SerializeField] private Button closeButton; private string m_id; private Panel m_panel; private Vector2 m_minSize; private int pointerId = -98765; internal InternalSettings Internal { get; private set; } public string ID { get { return m_id; } set { if (!string.IsNullOrEmpty(value) && m_id != value) { PanelNotificationCenter.Internal.TabIDChanged(this, m_id, value); m_id = value; } } } public Panel Panel => m_panel; public int Index { get { return m_panel.GetTabIndex(this); } set { m_panel.AddTab(this, value); } } public RectTransform Content { get; private set; } public Vector2 MinSize { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_minSize; } set { //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_000f: 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) if (m_minSize != value) { m_minSize = value; m_panel.Internal.RecalculateMinSize(); } } } public Sprite Icon { get { if (!((Object)(object)iconHolder != (Object)null)) { return null; } return iconHolder.sprite; } set { if ((Object)(object)iconHolder != (Object)null) { ((Component)iconHolder).gameObject.SetActive((Object)(object)value != (Object)null); iconHolder.sprite = value; } } } public string Label { get { if (!((Object)(object)nameHolder != (Object)null)) { return null; } return nameHolder.text; } set { if ((Object)(object)nameHolder != (Object)null && value != null) { nameHolder.text = value; } } } private void Awake() { //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_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown m_minSize = new Vector2(100f, 100f); Internal = new InternalSettings(this); iconHolder.preserveAspect = true; ((UnityEvent)closeButton.onClick).AddListener((UnityAction)delegate { PanelNotificationCenter.Internal.TabClosed(this); }); } private void Start() { if (string.IsNullOrEmpty(m_id)) { ID = Guid.NewGuid().ToString(); } } private void OnEnable() { pointerId = -98765; } private void OnDestroy() { PanelNotificationCenter.Internal.TabIDChanged(this, m_id, null); } public void AttachTo(Panel panel, int tabIndex = -1) { panel.AddTab(Content, tabIndex); } public Panel Detach() { return m_panel.DetachTab(this); } public void Destroy() { m_panel.RemoveTab(this); } private void SetActive(bool activeState) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)Content)) { m_panel.Internal.RemoveTab(m_panel.GetTabIndex(this), destroyTabObject: true); return; } if (activeState) { ((Graphic)background).color = m_panel.TabSelectedColor; ((Graphic)nameHolder).color = m_panel.TabSelectedTextColor; } else { ((Graphic)background).color = m_panel.TabNormalColor; ((Graphic)nameHolder).color = m_panel.TabNormalTextColor; } ((Component)Content).gameObject.SetActive(activeState); } void IPointerClickHandler.OnPointerClick(PointerEventData eventData) { if (!Object.op_Implicit((Object)(object)Content)) { m_panel.Internal.RemoveTab(m_panel.GetTabIndex(this), destroyTabObject: true); } else { m_panel.ActiveTab = m_panel.GetTabIndex(this); } } void IBeginDragHandler.OnBeginDrag(PointerEventData eventData) { //IL_002e: 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) if (!PanelManager.Instance.OnBeginPanelTabTranslate(this, eventData)) { eventData.pointerDrag = null; return; } pointerId = eventData.pointerId; ((Graphic)background).color = m_panel.TabDetachingColor; ((Graphic)nameHolder).color = m_panel.TabDetachingTextColor; PanelNotificationCenter.Internal.TabDragStateChanged(this, isDragging: true); } void IDragHandler.OnDrag(PointerEventData eventData) { if (eventData.pointerId != pointerId) { eventData.pointerDrag = null; } else { PanelManager.Instance.OnPanelTabTranslate(this, eventData); } } void IEndDragHandler.OnEndDrag(PointerEventData eventData) { if (eventData.pointerId == pointerId) { pointerId = -98765; ResetBackgroundColor(); PanelManager.Instance.OnEndPanelTabTranslate(this, eventData); PanelNotificationCenter.Internal.TabDragStateChanged(this, isDragging: false); } } private void ResetBackgroundColor() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_003b: Unknown result type (might be due to invalid IL or missing references) if (m_panel.ActiveTab == m_panel.GetTabIndex(this)) { ((Graphic)background).color = m_panel.TabSelectedColor; ((Graphic)nameHolder).color = m_panel.TabSelectedTextColor; } else { ((Graphic)background).color = m_panel.TabNormalColor; ((Graphic)nameHolder).color = m_panel.TabNormalTextColor; } } } public static class PanelUtils { internal static class Internal { public static Panel CreatePanel(RectTransform content, DynamicPanelsCanvas canvas) { //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown res
plugins/RuntimeInspector/RIRPlugin.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using BepInEx.Configuration; using DynamicPanels; using RuntimeInspectorNamespace; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] namespace PassivePicasso.RuntimeInspectorPlugin; [BepInPlugin("com.PassivePicasso.RuntimeInspectorPlugin", "RuntimeInspectorPlugin", "4.0.1")] public class RuntimeInspectorPlugin : BaseUnityPlugin { private static FieldInfo m_typeField = typeof(VariableSet).GetField("m_type", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo m_variablesField = typeof(VariableSet).GetField("m_variables", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo m_hiddenVariablesField = typeof(RuntimeInspectorSettings).GetField("m_hiddenVariables", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo m_exposedVariablesField = typeof(RuntimeInspectorSettings).GetField("m_exposedVariables", BindingFlags.Instance | BindingFlags.NonPublic); private VariableSet[] hiddenVariables; private VariableSet[] exposedVariables; private Panel inspetorPanel; private Panel hierarchyPanel; private PanelTab inspectorTab; private PanelTab hierarchyTab; private AssetBundle sceneBundle; private AssetBundle inspectorBundle; private string inspectorScenePath; private RuntimeInspector inspector; private RuntimeHierarchy hierarchy; private RuntimeInspectorSettings settings; private Canvas canvas; private DynamicPanelsCanvas dynamicPanelCanvas; private bool initialized; public ConfigEntry<KeyCode> ShowInspectorKey { get; set; } public ConfigEntry<float> DefaultInspectorWidth { get; set; } public ConfigEntry<float> DefaultHierarchyWidth { get; set; } private void Awake() { ShowInspectorKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Key Bindings", "ShowInspector", (KeyCode)105, "Keycode needed to press for runtime inspector window to appear"); DefaultInspectorWidth = ((BaseUnityPlugin)this).Config.Bind<float>("Dock Settings", "DefaultInspectorWidth", 300f, "Default width of the Inspector Panels"); DefaultHierarchyWidth = ((BaseUnityPlugin)this).Config.Bind<float>("Dock Settings", "DefaultHierarchyWidth", 300f, "Default width of the Hierarchy Panels"); } private void Start() { string? directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string text = Path.Combine(directoryName, "RIRSceneBundle"); string text2 = Path.Combine(directoryName, "RuntimeInspector"); inspectorBundle = AssetBundle.LoadFromFile(text2); InitializeSettings(); IEnumerable<GameObject> allGameObjects = inspectorBundle.LoadAllAssets().OfType<GameObject>(); RuntimeInspectorUtils.LoadObjRefPicker = () => Retrieve<ObjectReferencePicker>(allGameObjects, "ObjectReferencePicker"); RuntimeInspectorUtils.LoadColorPicker = () => Retrieve<ColorPicker>(allGameObjects, "ColorPicker"); RuntimeInspectorUtils.LoadDraggedReferenceItem = () => Retrieve<DraggedReferenceItem>(allGameObjects, "DraggedReferenceItem"); RuntimeInspectorUtils.LoadTooltip = () => Retrieve<Tooltip>(allGameObjects, "Tooltip"); PanelUtils.LoadPanel = () => Retrieve<Panel>(allGameObjects, "DynamicPanel"); PanelUtils.LoadTab = () => Retrieve<PanelTab>(allGameObjects, "DynamicPanelTab"); PanelUtils.LoadPanelPreview = () => Retrieve<RectTransform>(allGameObjects, "DynamicPanelPreview"); sceneBundle = AssetBundle.LoadFromFile(text); inspectorScenePath = sceneBundle.GetAllScenePaths()[0]; SceneManager.sceneLoaded += SceneManager_sceneLoaded; SceneManager.LoadScene(inspectorScenePath, (LoadSceneMode)1); } private void Update() { //IL_008a: 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) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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) if (Object.op_Implicit((Object)(object)canvas) && ((Component)canvas).gameObject.activeSelf && !initialized) { Panel obj = inspetorPanel; float value = DefaultInspectorWidth.Value; Resolution currentResolution = Screen.currentResolution; obj.ResizeTo(new Vector2(value, (float)((Resolution)(ref currentResolution)).height), (Direction)2, (Direction)3); Panel obj2 = hierarchyPanel; float value2 = DefaultHierarchyWidth.Value; currentResolution = Screen.currentResolution; obj2.ResizeTo(new Vector2(value2, (float)((Resolution)(ref currentResolution)).height), (Direction)2, (Direction)3); initialized = true; } if (Input.GetKeyDown(ShowInspectorKey.Value) && Object.op_Implicit((Object)(object)canvas)) { if (!((Component)canvas).GetComponentsInChildren<InputField>().Any((InputField input) => input.isFocused)) { ((Component)canvas).gameObject.SetActive(!((Component)canvas).gameObject.activeSelf); } if (!Object.op_Implicit((Object)(object)inspetorPanel)) { inspetorPanel = ConfigureTab(((Component)inspector).gameObject, (Direction)2, "Inspector", out inspectorTab); } if (!Object.op_Implicit((Object)(object)hierarchyPanel)) { hierarchyPanel = ConfigureTab(((Component)hierarchy).gameObject, (Direction)0, "Hierarchy", out hierarchyTab); } } } private T Retrieve<T>(IEnumerable<GameObject> gameObjects, string name) where T : Component { GameObject? obj = gameObjects.FirstOrDefault((Func<GameObject, bool>)((GameObject asset) => ((Object)asset).name == name && Object.op_Implicit((Object)(object)asset.GetComponent<T>()))); if (obj == null) { return default(T); } return obj.GetComponent<T>(); } private IEnumerable<VariableSet> GetVariableSet(params (Type type, string[] variables)[] setData) { for (int i = 0; i < setData.Length; i++) { (Type, string[]) tuple = setData[i]; VariableSet val = new VariableSet(); m_typeField.SetValue(val, tuple.Item1.AssemblyQualifiedName); m_variablesField.SetValue(val, tuple.Item2); yield return val; } } private void InitializeSettings() { settings = inspectorBundle.LoadAllAssets<RuntimeInspectorSettings>().FirstOrDefault() ?? ScriptableObject.CreateInstance<RuntimeInspectorSettings>(); if (settings.HiddenVariables == null) { hiddenVariables = GetVariableSet((typeof(Object), new string[6] { "hideFlags", "useGUILayout", "runInEditMode", "m_CachedPtr", "m_InstanceID", "m_UnityRuntimeErrorString" }), (typeof(Renderer), new string[2] { "material", "materials" }), (typeof(MeshFilter), new string[1] { "mesh" }), (typeof(Transform), new string[1] { "*" }), (typeof(Component), new string[2] { "name", "tag" }), (typeof(Collider), new string[1] { "material" }), (typeof(Collider2D), new string[1] { "material" }), (typeof(CanvasRenderer), new string[1] { "*" }), (typeof(Animator), new string[3] { "bodyPosition", "bodyRotation", "playbackTime" })).ToArray(); m_hiddenVariablesField.SetValue(settings, hiddenVariables); } if (settings.ExposedVariables == null) { exposedVariables = GetVariableSet((typeof(Transform), new string[3] { "localPosition", "localEulerAngles", "localScale" })).ToArray(); m_exposedVariablesField.SetValue(settings, exposedVariables); } } private void SceneManager_sceneLoaded(Scene loadedScene, LoadSceneMode arg1) { //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) if (!(((Scene)(ref loadedScene)).path != inspectorScenePath)) { SceneManager.sceneLoaded -= SceneManager_sceneLoaded; inspector = ((Scene)(ref loadedScene)).GetRootGameObjects().SelectMany((GameObject rgo) => rgo.GetComponentsInChildren<RuntimeInspector>()).First(); hierarchy = ((Scene)(ref loadedScene)).GetRootGameObjects().SelectMany((GameObject rgo) => rgo.GetComponentsInChildren<RuntimeHierarchy>()).First(); canvas = ((Scene)(ref loadedScene)).GetRootGameObjects().SelectMany((GameObject rgo) => rgo.GetComponentsInChildren<Canvas>()).First(); dynamicPanelCanvas = ((Component)canvas).GetComponent<DynamicPanelsCanvas>(); inspetorPanel = ConfigureTab(((Component)inspector).gameObject, (Direction)2, "Inspector", out inspectorTab); Panel obj = inspetorPanel; float value = DefaultInspectorWidth.Value; Resolution currentResolution = Screen.currentResolution; obj.ResizeTo(new Vector2(value, (float)((Resolution)(ref currentResolution)).height), (Direction)2, (Direction)3); hierarchyPanel = ConfigureTab(((Component)hierarchy).gameObject, (Direction)0, "Hierarchy", out hierarchyTab); Panel obj2 = hierarchyPanel; float value2 = DefaultHierarchyWidth.Value; currentResolution = Screen.currentResolution; obj2.ResizeTo(new Vector2(value2, (float)((Resolution)(ref currentResolution)).height), (Direction)2, (Direction)3); Object.DontDestroyOnLoad((Object)(object)canvas); InitializeSettings(); hierarchy.Refresh(); ((Component)canvas).gameObject.SetActive(false); } } private Panel ConfigureTab(GameObject target, Direction direction, string title, out PanelTab tab) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) Panel val = PanelUtils.CreatePanelFor(target.GetComponent<RectTransform>(), dynamicPanelCanvas); val.DockToRoot(direction); tab = val.GetTab(target.GetComponent<RectTransform>()); tab.Label = title; return val; } private void OnDoubleClickedEntry(Transform selection) { GameObject val = Object.Instantiate<GameObject>(inspectorBundle.LoadAsset<GameObject>("RuntimeInspector")); val.GetComponent<RuntimeInspector>().Inspect((object)selection); ConfigureTab(val, (Direction)2, ((Object)((Component)selection).gameObject).name, out var _); } private void OnPanelClosed(Panel panel) { if (!((Object)(object)panel == (Object)(object)hierarchyPanel) && !((Object)(object)panel == (Object)(object)inspetorPanel)) { panel.Detach(); Object.Destroy((Object)(object)((Component)panel).gameObject); } } private void OnTabClosed(PanelTab tab) { if ((Object)(object)tab == (Object)(object)inspectorTab || (Object)(object)tab == (Object)(object)hierarchyTab) { return; } if (tab.Panel.NumberOfTabs == 1) { if (!((Object)(object)tab.Panel == (Object)(object)inspetorPanel) && !((Object)(object)tab.Panel == (Object)(object)hierarchyPanel)) { Object.Destroy((Object)(object)((Component)tab.Panel).gameObject); } } else { Object.Destroy((Object)(object)((Component)tab).gameObject); } } }
plugins/RuntimeInspector/RuntimeInspector.Runtime.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.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Text; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.Scripting; using UnityEngine.Serialization; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] namespace RuntimeInspectorNamespace; public class ColorWheelControl : MonoBehaviour, IPointerDownHandler, IEventSystemHandler, IDragHandler, IPointerUpHandler { public delegate void OnColorChangedDelegate(Color32 color); private const float RGB_CONST = 2f / (float)Math.PI; private const float G_CONST = (float)Math.PI * 2f / 3f; private const float B_CONST = 4.1887903f; private Color m_color; private RectTransform rectTransform; [SerializeField] private RectTransform SelectorOut; [SerializeField] private RectTransform SelectorIn; [SerializeField] private WindowDragHandler colorPickerWindow; private float outer; private Vector2 inner; private Material mat; private bool draggingOuter; private bool draggingInner; private float halfSize; private float halfSizeSqr; private float outerCirclePaddingSqr; private float innerSquareHalfSize; private int pointerId = -98765; public Color Color { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_color; } private set { //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_000f: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) if (m_color != value) { m_color = value; m_color.a = Alpha; if (this.OnColorChanged != null) { this.OnColorChanged(Color32.op_Implicit(m_color)); } } } } public float Alpha { get; set; } public event OnColorChangedDelegate OnColorChanged; private void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown rectTransform = (RectTransform)((Component)this).transform; Image component = ((Component)this).GetComponent<Image>(); mat = new Material(((Graphic)component).material); ((Graphic)component).material = mat; UpdateProperties(); } private void OnRectTransformDimensionsChange() { if (!((Object)(object)rectTransform == (Object)null)) { UpdateProperties(); UpdateSelectors(); } } private void UpdateProperties() { //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_000f: Unknown result type (might be due to invalid IL or missing references) Rect rect = rectTransform.rect; halfSize = ((Rect)(ref rect)).size.x * 0.5f; halfSizeSqr = halfSize * halfSize; outerCirclePaddingSqr = halfSizeSqr * 0.75f * 0.75f; innerSquareHalfSize = halfSize * 0.5f; } public void PickColor(Color c) { //IL_0001: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) Alpha = c.a; float num = default(float); float num2 = default(float); float num3 = default(float); Color.RGBToHSV(c, ref num, ref num2, ref num3); outer = num * 2f * (float)Math.PI; inner.x = 1f - num2; inner.y = 1f - num3; UpdateSelectors(); Color = c; mat.SetColor("_Color", GetCurrentBaseColor()); } public void OnPointerDown(PointerEventData eventData) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, ref val)) { return; } float sqrMagnitude = ((Vector2)(ref val)).sqrMagnitude; if (sqrMagnitude <= halfSizeSqr && sqrMagnitude >= outerCirclePaddingSqr) { draggingOuter = true; } else { if (!(Mathf.Abs(val.x) <= innerSquareHalfSize) || !(Mathf.Abs(val.y) <= innerSquareHalfSize)) { return; } draggingInner = true; } GetSelectedColor(val); pointerId = eventData.pointerId; } public void OnDrag(PointerEventData eventData) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (pointerId != eventData.pointerId) { eventData.pointerDrag = ((Component)colorPickerWindow).gameObject; colorPickerWindow.OnBeginDrag(eventData); } else { Vector2 pointerPos = default(Vector2); RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, ref pointerPos); GetSelectedColor(pointerPos); } } public void OnPointerUp(PointerEventData eventData) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (pointerId == eventData.pointerId) { Vector2 pointerPos = default(Vector2); RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, eventData.position, eventData.pressEventCamera, ref pointerPos); GetSelectedColor(pointerPos); draggingOuter = false; draggingInner = false; pointerId = -98765; } } private void GetSelectedColor(Vector2 pointerPos) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //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_0016: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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) //IL_0047: 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_0092: 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) if (draggingOuter) { Vector2 val = -((Vector2)(ref pointerPos)).normalized; outer = Mathf.Atan2(0f - val.x, 0f - val.y); UpdateColor(); } else if (draggingInner) { Vector2 val2 = -pointerPos; val2.x = Mathf.Clamp(val2.x, 0f - innerSquareHalfSize, innerSquareHalfSize) + innerSquareHalfSize; val2.y = Mathf.Clamp(val2.y, 0f - innerSquareHalfSize, innerSquareHalfSize) + innerSquareHalfSize; inner = val2 / halfSize; UpdateColor(); } UpdateSelectors(); } private void UpdateColor() { //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_0012: 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_0019: 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) //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) //IL_0030: 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_0047: Unknown result type (might be due to invalid IL or missing references) Color currentBaseColor = GetCurrentBaseColor(); mat.SetColor("_Color", currentBaseColor); currentBaseColor = Color.Lerp(currentBaseColor, Color.white, inner.x); currentBaseColor = Color.Lerp(currentBaseColor, Color.black, inner.y); Color = currentBaseColor; } private Color GetCurrentBaseColor() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) Color white = Color.white; white.r = Mathf.Clamp(2f / (float)Math.PI * Mathf.Asin(Mathf.Cos(outer)) * 1.5f + 0.5f, 0f, 1f); white.g = Mathf.Clamp(2f / (float)Math.PI * Mathf.Asin(Mathf.Cos((float)Math.PI * 2f / 3f - outer)) * 1.5f + 0.5f, 0f, 1f); white.b = Mathf.Clamp(2f / (float)Math.PI * Mathf.Asin(Mathf.Cos(4.1887903f - outer)) * 1.5f + 0.5f, 0f, 1f); return white; } private void UpdateSelectors() { //IL_0036: 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) SelectorOut.anchoredPosition = new Vector2(Mathf.Sin(outer) * halfSize * 0.85f, Mathf.Cos(outer) * halfSize * 0.85f); SelectorIn.anchoredPosition = new Vector2(innerSquareHalfSize - inner.x * halfSize, innerSquareHalfSize - inner.y * halfSize); } } public class RuntimeHierarchy : SkinnedWindow, IListViewAdapter, ITooltipManager { [Flags] public enum SelectOptions { None = 0, Additive = 1, FocusOnSelection = 2, ForceRevealSelection = 4 } public enum LongPressAction { None, CreateDraggedReferenceItem, ShowMultiSelectionToggles, ShowMultiSelectionTogglesThenCreateDraggedReferenceItem } public delegate void SelectionChangedDelegate(ReadOnlyCollection<Transform> selection); public delegate void DoubleClickDelegate(HierarchyData clickedItem); public delegate bool GameObjectFilterDelegate(Transform transform); [SerializeField] private float m_refreshInterval; [SerializeField] private float m_objectNamesRefreshInterval = 10f; [SerializeField] private float m_searchRefreshInterval = 5f; private float nextHierarchyRefreshTime = -1f; private float nextObjectNamesRefreshTime = -1f; private float nextSearchRefreshTime = -1f; [Space] [SerializeField] private bool m_allowMultiSelection = true; private bool m_multiSelectionToggleSelectionMode; private bool justActivatedMultiSelectionToggleSelectionMode; [Space] [SerializeField] private bool m_exposeUnityScenes = true; [SerializeField] [FormerlySerializedAs("exposedScenes")] private string[] exposedUnityScenesSubset; [SerializeField] private bool m_exposeDontDestroyOnLoadScene = true; [SerializeField] private string[] pseudoScenesOrder; [Space] [SerializeField] private LongPressAction m_pointerLongPressAction = LongPressAction.CreateDraggedReferenceItem; [SerializeField] [FormerlySerializedAs("m_draggedReferenceHoldTime")] private float m_pointerLongPressDuration = 0.4f; [SerializeField] private float m_doubleClickThreshold = 0.5f; [Space] [SerializeField] private bool m_canReorganizeItems; [SerializeField] private bool m_canDropDraggedParentOnChild; [SerializeField] private bool m_canDropDraggedObjectsToPseudoScenes; [Space] [SerializeField] private bool m_showTooltips; [SerializeField] private float m_tooltipDelay = 0.5f; [Space] [SerializeField] private bool m_showHorizontalScrollbar; private bool m_isInSearchMode; [SerializeField] private RuntimeInspector m_connectedInspector; private bool m_isLocked; [Header("Internal Variables")] [SerializeField] private ScrollRect scrollView; [SerializeField] private RectTransform drawArea; [SerializeField] private RecycledListView listView; [SerializeField] private Image background; [SerializeField] private Image verticalScrollbar; [SerializeField] private Image horizontalScrollbar; [SerializeField] private InputField searchInputField; [SerializeField] private Image searchIcon; [SerializeField] private Image searchInputFieldBackground; [SerializeField] private LayoutElement searchBarLayoutElement; [SerializeField] private Button deselectAllButton; [SerializeField] private LayoutElement deselectAllLayoutElement; [SerializeField] private Text deselectAllLabel; [SerializeField] private Image selectedPathBackground; [SerializeField] private Text selectedPathText; [SerializeField] private HierarchyDragDropListener dragDropListener; [SerializeField] private HierarchyField drawerPrefab; [SerializeField] private Sprite m_sceneDrawerBackground; [SerializeField] private Sprite m_transformDrawerBackground; private static int aliveHierarchies; private bool initialized; private readonly List<HierarchyField> drawers = new List<HierarchyField>(32); private readonly List<HierarchyDataRoot> sceneData = new List<HierarchyDataRoot>(8); private readonly List<HierarchyDataRoot> searchSceneData = new List<HierarchyDataRoot>(8); private readonly Dictionary<string, HierarchyDataRootPseudoScene> pseudoSceneDataLookup = new Dictionary<string, HierarchyDataRootPseudoScene>(); private readonly List<Transform> m_currentSelection = new List<Transform>(16); private readonly HashSet<int> currentSelectionSet = new HashSet<int>(); private readonly HashSet<int> newSelectionSet = new HashSet<int>(); private Transform multiSelectionPivotTransform; private HierarchyDataRoot multiSelectionPivotSceneData; private readonly List<int> multiSelectionPivotSiblingIndexTraversalList = new List<int>(8); private readonly Transform[] singleTransformSelection = (Transform[])(object)new Transform[1]; private int totalItemCount; private bool selectLock; private bool isListViewDirty = true; private bool shouldRecalculateContentWidth; private float lastClickTime; private HierarchyField lastClickedDrawer; private HierarchyField currentlyPressedDrawer; private float pressedDrawerDraggedReferenceCreateTime; private PointerEventData pressedDrawerActivePointer; private Canvas m_canvas; private float m_autoScrollSpeed; private PointerEventData nullPointerEventData; public SelectionChangedDelegate OnSelectionChanged; public DoubleClickDelegate OnItemDoubleClicked; private GameObjectFilterDelegate m_gameObjectDelegate; public float RefreshInterval { get { return m_refreshInterval; } set { m_refreshInterval = value; } } public float ObjectNamesRefreshInterval { get { return m_objectNamesRefreshInterval; } set { m_objectNamesRefreshInterval = value; } } public float SearchRefreshInterval { get { return m_searchRefreshInterval; } set { m_searchRefreshInterval = value; } } public bool AllowMultiSelection { get { return m_allowMultiSelection; } set { if (m_allowMultiSelection == value) { return; } m_allowMultiSelection = value; if (value) { return; } MultiSelectionToggleSelectionMode = false; if (m_currentSelection.Count <= 1) { return; } for (int num = m_currentSelection.Count - 1; num >= 0; num--) { if (Object.op_Implicit((Object)(object)m_currentSelection[num])) { singleTransformSelection[0] = m_currentSelection[num]; SelectInternal(singleTransformSelection); return; } } DeselectInternal(null); } } public bool MultiSelectionToggleSelectionMode { get { return m_multiSelectionToggleSelectionMode; } set { if (!m_allowMultiSelection) { value = false; } if (m_multiSelectionToggleSelectionMode == value) { return; } m_multiSelectionToggleSelectionMode = value; shouldRecalculateContentWidth = true; for (int num = drawers.Count - 1; num >= 0; num--) { if (((Component)drawers[num]).gameObject.activeSelf) { drawers[num].MultiSelectionToggleVisible = value; } } ((Component)deselectAllButton).gameObject.SetActive(value); if (!value) { EnsureScrollViewIsWithinBounds(); } } } public bool ExposeUnityScenes { get { return m_exposeUnityScenes; } set { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) if (m_exposeUnityScenes == value) { return; } m_exposeUnityScenes = value; for (int i = 0; i < SceneManager.sceneCount; i++) { if (value) { OnSceneLoaded(SceneManager.GetSceneAt(i), (LoadSceneMode)0); } else { OnSceneUnloaded(SceneManager.GetSceneAt(i)); } } } } public bool ExposeDontDestroyOnLoadScene { get { return m_exposeDontDestroyOnLoadScene; } set { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (m_exposeDontDestroyOnLoadScene != value) { m_exposeDontDestroyOnLoadScene = value; if (value) { OnSceneLoaded(GetDontDestroyOnLoadScene(), (LoadSceneMode)0); } else { OnSceneUnloaded(GetDontDestroyOnLoadScene()); } } } } public LongPressAction PointerLongPressAction { get { return m_pointerLongPressAction; } set { m_pointerLongPressAction = value; } } public float PointerLongPressDuration { get { return m_pointerLongPressDuration; } set { m_pointerLongPressDuration = value; } } public float DoubleClickThreshold { get { return m_doubleClickThreshold; } set { m_doubleClickThreshold = value; } } public bool CanReorganizeItems { get { return m_canReorganizeItems; } set { m_canReorganizeItems = value; } } public bool CanDropDraggedParentOnChild { get { return m_canDropDraggedParentOnChild; } set { m_canDropDraggedParentOnChild = value; } } public bool CanDropDraggedObjectsToPseudoScenes { get { return m_canDropDraggedObjectsToPseudoScenes; } set { m_canDropDraggedObjectsToPseudoScenes = value; } } public bool ShowTooltips => m_showTooltips; public float TooltipDelay { get { return m_tooltipDelay; } set { m_tooltipDelay = value; } } internal TooltipListener TooltipListener { get; private set; } public bool ShowHorizontalScrollbar { get { return m_showHorizontalScrollbar; } set { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) if (m_showHorizontalScrollbar == value) { return; } m_showHorizontalScrollbar = value; if (!value) { scrollView.content.sizeDelta = new Vector2(0f, scrollView.content.sizeDelta.y); scrollView.horizontalNormalizedPosition = 0f; } else { for (int num = drawers.Count - 1; num >= 0; num--) { if (((Component)drawers[num]).gameObject.activeSelf) { drawers[num].RefreshName(); } } shouldRecalculateContentWidth = true; } scrollView.horizontal = value; } } public string SearchTerm { get { return searchInputField.text; } set { searchInputField.text = value; } } public bool IsInSearchMode => m_isInSearchMode; public RuntimeInspector ConnectedInspector { get { return m_connectedInspector; } set { if (!((Object)(object)m_connectedInspector != (Object)(object)value)) { return; } m_connectedInspector = value; for (int num = m_currentSelection.Count - 1; num >= 0; num--) { if (Object.op_Implicit((Object)(object)m_currentSelection[num])) { m_connectedInspector.Inspect(((Component)m_currentSelection[num]).gameObject); break; } } } } public bool IsLocked { get { return m_isLocked; } set { m_isLocked = value; } } internal Sprite SceneDrawerBackground => m_sceneDrawerBackground; internal Sprite TransformDrawerBackground => m_transformDrawerBackground; public ReadOnlyCollection<Transform> CurrentSelection => m_currentSelection.AsReadOnly(); internal int ItemCount => totalItemCount; public Canvas Canvas => m_canvas; internal float AutoScrollSpeed { set { m_autoScrollSpeed = value; } } public GameObjectFilterDelegate GameObjectFilter { get { return m_gameObjectDelegate; } set { m_gameObjectDelegate = value; for (int i = 0; i < sceneData.Count; i++) { if (sceneData[i].IsExpanded) { sceneData[i].IsExpanded = false; sceneData[i].IsExpanded = true; } } if (!m_isInSearchMode) { return; } for (int j = 0; j < searchSceneData.Count; j++) { if (searchSceneData[j].IsExpanded) { searchSceneData[j].IsExpanded = false; searchSceneData[j].IsExpanded = true; } } } } int IListViewAdapter.Count => totalItemCount; float IListViewAdapter.ItemHeight => base.Skin.LineHeight; protected override void Awake() { base.Awake(); Initialize(); } private void Initialize() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown if (!initialized) { initialized = true; listView.SetAdapter(this); aliveHierarchies++; m_canvas = ((Component)this).GetComponentInParent<Canvas>(); nullPointerEventData = new PointerEventData((EventSystem)null); ((UnityEvent<string>)(object)searchInputField.onValueChanged).AddListener((UnityAction<string>)OnSearchTermChanged); ((UnityEvent)deselectAllButton.onClick).AddListener((UnityAction)delegate { DeselectInternal(null); MultiSelectionToggleSelectionMode = false; }); m_showHorizontalScrollbar = !m_showHorizontalScrollbar; ShowHorizontalScrollbar = !m_showHorizontalScrollbar; if (m_showTooltips) { TooltipListener = ((Component)this).gameObject.AddComponent<TooltipListener>(); TooltipListener.Initialize(this); } RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Add((Transform)(object)drawArea); } } private void Start() { //IL_0051: 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) SceneManager.sceneLoaded += OnSceneLoaded; SceneManager.sceneUnloaded += OnSceneUnloaded; if (ExposeUnityScenes) { for (int i = 0; i < SceneManager.sceneCount; i++) { OnSceneLoaded(SceneManager.GetSceneAt(i), (LoadSceneMode)0); } } if (ExposeDontDestroyOnLoadScene) { OnSceneLoaded(GetDontDestroyOnLoadScene(), (LoadSceneMode)0); } } private void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; SceneManager.sceneUnloaded -= OnSceneUnloaded; if (--aliveHierarchies == 0) { HierarchyData.ClearPool(); } RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Remove((Transform)(object)drawArea); } private void OnRectTransformDimensionsChange() { shouldRecalculateContentWidth = true; } private void OnTransformParentChanged() { m_canvas = ((Component)this).GetComponentInParent<Canvas>(); } protected override void Update() { //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) base.Update(); float realtimeSinceStartup = Time.realtimeSinceStartup; if (realtimeSinceStartup > nextHierarchyRefreshTime) { Refresh(); } if (m_isInSearchMode && realtimeSinceStartup > nextSearchRefreshTime) { RefreshSearchResults(); } if (isListViewDirty) { RefreshListView(); } if (realtimeSinceStartup > nextObjectNamesRefreshTime) { nextObjectNamesRefreshTime = realtimeSinceStartup + m_objectNamesRefreshInterval; for (int num = sceneData.Count - 1; num >= 0; num--) { sceneData[num].ResetCachedNames(); } for (int num2 = searchSceneData.Count - 1; num2 >= 0; num2--) { searchSceneData[num2].ResetCachedNames(); } for (int num3 = drawers.Count - 1; num3 >= 0; num3--) { if (((Component)drawers[num3]).gameObject.activeSelf) { drawers[num3].RefreshName(); } } shouldRecalculateContentWidth = true; } if (m_showHorizontalScrollbar && shouldRecalculateContentWidth) { shouldRecalculateContentWidth = false; float num4 = 0f; for (int num5 = drawers.Count - 1; num5 >= 0; num5--) { if (((Component)drawers[num5]).gameObject.activeSelf) { float preferredWidth = drawers[num5].PreferredWidth; if (preferredWidth > num4) { num4 = preferredWidth; } } } if (m_multiSelectionToggleSelectionMode && drawers.Count > 0) { num4 += (float)base.Skin.LineHeight; } float num6 = listView.ViewportWidth + scrollView.verticalScrollbarSpacing; if (num4 > num6) { scrollView.content.sizeDelta = new Vector2(num4 - num6, scrollView.content.sizeDelta.y); } else { scrollView.content.sizeDelta = new Vector2(0f, scrollView.content.sizeDelta.y); } EnsureScrollViewIsWithinBounds(); } if (m_pointerLongPressAction != 0 && Object.op_Implicit((Object)(object)currentlyPressedDrawer) && realtimeSinceStartup > pressedDrawerDraggedReferenceCreateTime) { if (((Component)currentlyPressedDrawer).gameObject.activeSelf && Object.op_Implicit((Object)(object)currentlyPressedDrawer.Data.BoundTransform)) { if (m_pointerLongPressAction == LongPressAction.CreateDraggedReferenceItem || (m_pointerLongPressAction == LongPressAction.ShowMultiSelectionTogglesThenCreateDraggedReferenceItem && (!m_allowMultiSelection || m_multiSelectionToggleSelectionMode))) { Transform[] array = (Transform[])(currentlyPressedDrawer.IsSelected ? ((Array)m_currentSelection.ToArray()) : ((Array)new Transform[1] { currentlyPressedDrawer.Data.BoundTransform })); if (array.Length > 1) { int num7 = Array.IndexOf(array, currentlyPressedDrawer.Data.BoundTransform); if (num7 > 0) { for (int num8 = num7; num8 > 0; num8--) { array[num8] = array[num8 - 1]; } array[0] = currentlyPressedDrawer.Data.BoundTransform; } } Object[] references = (Object[])(object)array; if (Object.op_Implicit((Object)(object)RuntimeInspectorUtils.CreateDraggedReferenceItem(references, pressedDrawerActivePointer, base.Skin, m_canvas))) { ((IPointerEnterHandler)dragDropListener).OnPointerEnter(pressedDrawerActivePointer); } } else if (m_allowMultiSelection && !m_multiSelectionToggleSelectionMode) { if (currentSelectionSet.Add(((object)currentlyPressedDrawer.Data.BoundTransform).GetHashCode())) { m_currentSelection.Add(currentlyPressedDrawer.Data.BoundTransform); currentlyPressedDrawer.IsSelected = true; OnCurrentSelectionChanged(); } MultiSelectionToggleSelectionMode = true; justActivatedMultiSelectionToggleSelectionMode = true; if (Object.op_Implicit((Object)(object)TooltipListener)) { TooltipListener.OnDrawerHovered(null, null, isHovering: false); } } } currentlyPressedDrawer = null; pressedDrawerActivePointer = null; } if (m_autoScrollSpeed != 0f) { scrollView.verticalNormalizedPosition = Mathf.Clamp01(scrollView.verticalNormalizedPosition + m_autoScrollSpeed * Time.unscaledDeltaTime / (float)totalItemCount); } } public void Refresh() { nextHierarchyRefreshTime = Time.realtimeSinceStartup + m_refreshInterval; bool flag = false; for (int i = 0; i < sceneData.Count; i++) { flag |= sceneData[i].Refresh(); } if (flag) { isListViewDirty = true; return; } for (int num = drawers.Count - 1; num >= 0; num--) { if (((Component)drawers[num]).gameObject.activeSelf) { drawers[num].Refresh(); } } } private void RefreshListView() { isListViewDirty = false; totalItemCount = 0; if (!m_isInSearchMode) { for (int num = sceneData.Count - 1; num >= 0; num--) { totalItemCount += sceneData[num].Height; } } else { for (int num2 = searchSceneData.Count - 1; num2 >= 0; num2--) { totalItemCount += searchSceneData[num2].Height; } } listView.UpdateList(resetContentPosition: false); EnsureScrollViewIsWithinBounds(); } internal void SetListViewDirty() { isListViewDirty = true; } public void RefreshSearchResults() { if (!m_isInSearchMode) { return; } nextSearchRefreshTime = Time.realtimeSinceStartup + m_searchRefreshInterval; for (int i = 0; i < searchSceneData.Count; i++) { HierarchyDataRootSearch hierarchyDataRootSearch = (HierarchyDataRootSearch)searchSceneData[i]; bool canExpand = hierarchyDataRootSearch.CanExpand; hierarchyDataRootSearch.Refresh(); if (hierarchyDataRootSearch.CanExpand && !canExpand) { hierarchyDataRootSearch.IsExpanded = true; } isListViewDirty = true; } } public void RefreshNameOf(Transform target) { //IL_0011: 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_0047: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)target)) { return; } Scene scene = ((Component)target).gameObject.scene; for (int num = sceneData.Count - 1; num >= 0; num--) { HierarchyDataRoot hierarchyDataRoot = sceneData[num]; if (hierarchyDataRoot is HierarchyDataRootPseudoScene || ((HierarchyDataRootScene)hierarchyDataRoot).Scene == scene) { sceneData[num].RefreshNameOf(target); } } if (m_isInSearchMode) { RefreshSearchResults(); for (int num2 = searchSceneData.Count - 1; num2 >= 0; num2--) { searchSceneData[num2].RefreshNameOf(target); } } for (int num3 = drawers.Count - 1; num3 >= 0; num3--) { if (((Component)drawers[num3]).gameObject.activeSelf && (Object)(object)drawers[num3].Data.BoundTransform == (Object)(object)target) { drawers[num3].RefreshName(); } } shouldRecalculateContentWidth = true; } protected override void RefreshSkin() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: 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_0134: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) ((Graphic)background).color = base.Skin.BackgroundColor; ((Graphic)verticalScrollbar).color = base.Skin.ScrollbarColor; ((Graphic)horizontalScrollbar).color = base.Skin.ScrollbarColor; searchInputField.textComponent.SetSkinInputFieldText(base.Skin); ((Graphic)searchInputFieldBackground).color = base.Skin.InputFieldNormalBackgroundColor.Tint(0.08f); ((Graphic)searchIcon).color = base.Skin.ButtonTextColor; searchBarLayoutElement.SetHeight(base.Skin.LineHeight); deselectAllLayoutElement.SetHeight(base.Skin.LineHeight); ((Selectable)deselectAllButton).targetGraphic.color = base.Skin.InputFieldInvalidBackgroundColor; deselectAllLabel.SetSkinInputFieldText(base.Skin); ((Graphic)selectedPathBackground).color = base.Skin.BackgroundColor.Tint(0.1f); selectedPathText.SetSkinButtonText(base.Skin); Graphic placeholder = searchInputField.placeholder; Text val = (Text)(object)((placeholder is Text) ? placeholder : null); if ((Object)(object)val != (Object)null) { float a = ((Graphic)val).color.a; val.SetSkinInputFieldText(base.Skin); Color color = ((Graphic)val).color; color.a = a; ((Graphic)val).color = color; } LayoutRebuilder.ForceRebuildLayoutImmediate(drawArea); listView.ResetList(); } private void EnsureScrollViewIsWithinBounds() { if (scrollView.verticalNormalizedPosition <= Mathf.Epsilon) { scrollView.verticalNormalizedPosition = 0.0001f; } scrollView.OnScroll(nullPointerEventData); } void IListViewAdapter.SetItemContent(RecycledListItem item) { if (isListViewDirty) { RefreshListView(); } HierarchyField hierarchyField = (HierarchyField)item; HierarchyData dataAt = GetDataAt(hierarchyField.Position); if (dataAt != null) { hierarchyField.Skin = base.Skin; hierarchyField.SetContent(dataAt); hierarchyField.IsSelected = Object.op_Implicit((Object)(object)dataAt.BoundTransform) && currentSelectionSet.Contains(((object)dataAt.BoundTransform).GetHashCode()); hierarchyField.MultiSelectionToggleVisible = m_multiSelectionToggleSelectionMode; hierarchyField.Refresh(); shouldRecalculateContentWidth = true; } } void IListViewAdapter.OnItemClicked(RecycledListItem item) { HierarchyField hierarchyField = (HierarchyField)item; if (OnItemDoubleClicked != null && (Object)(object)hierarchyField == (Object)(object)lastClickedDrawer && Time.realtimeSinceStartup - lastClickTime <= m_doubleClickThreshold) { lastClickTime = 0f; OnItemDoubleClicked(lastClickedDrawer.Data); return; } lastClickTime = Time.realtimeSinceStartup; lastClickedDrawer = hierarchyField; bool flag = false; Transform boundTransform = hierarchyField.Data.BoundTransform; int item2 = (Object.op_Implicit((Object)(object)boundTransform) ? ((object)boundTransform).GetHashCode() : (-1)); if (m_allowMultiSelection && FindMultiSelectionPivotAbsoluteIndex(out var pivotAbsoluteIndex) && (Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303))) { newSelectionSet.Clear(); if (Object.op_Implicit((Object)(object)boundTransform)) { newSelectionSet.Add(item2); if (currentSelectionSet.Add(item2)) { m_currentSelection.Add(boundTransform); flag = true; } } int i = pivotAbsoluteIndex; int position = hierarchyField.Position; for (int num = ((pivotAbsoluteIndex < position) ? 1 : (-1)); i != position; i += num) { Transform boundTransform2 = GetDataAt(i).BoundTransform; if (Object.op_Implicit((Object)(object)boundTransform2)) { int hashCode = ((object)boundTransform2).GetHashCode(); newSelectionSet.Add(hashCode); if (currentSelectionSet.Add(hashCode)) { m_currentSelection.Add(boundTransform2); flag = true; } } } for (int num2 = m_currentSelection.Count - 1; num2 >= 0; num2--) { Transform val = m_currentSelection[num2]; if (Object.op_Implicit((Object)(object)val)) { int hashCode2 = ((object)val).GetHashCode(); if (!newSelectionSet.Contains(hashCode2)) { m_currentSelection.RemoveAt(num2); currentSelectionSet.Remove(hashCode2); flag = true; } } } } else { multiSelectionPivotTransform = boundTransform; multiSelectionPivotSceneData = hierarchyField.Data.Root; hierarchyField.Data.GetSiblingIndexTraversalList(multiSelectionPivotSiblingIndexTraversalList); if (m_allowMultiSelection && (m_multiSelectionToggleSelectionMode || Input.GetKey((KeyCode)306) || Input.GetKey((KeyCode)305))) { if (Object.op_Implicit((Object)(object)boundTransform)) { if (currentSelectionSet.Add(item2)) { m_currentSelection.Add(boundTransform); } else { m_currentSelection.Remove(boundTransform); currentSelectionSet.Remove(item2); if (m_currentSelection.Count == 0) { MultiSelectionToggleSelectionMode = false; } } flag = true; } } else if (Object.op_Implicit((Object)(object)boundTransform)) { if (m_currentSelection.Count != 1 || (Object)(object)m_currentSelection[0] != (Object)(object)boundTransform) { m_currentSelection.Clear(); currentSelectionSet.Clear(); m_currentSelection.Add(boundTransform); currentSelectionSet.Add(item2); flag = true; } } else if (m_currentSelection.Count > 0) { m_currentSelection.Clear(); currentSelectionSet.Clear(); flag = true; } } if (flag) { for (int num3 = drawers.Count - 1; num3 >= 0; num3--) { if (((Component)drawers[num3]).gameObject.activeSelf) { Transform boundTransform3 = drawers[num3].Data.BoundTransform; if (Object.op_Implicit((Object)(object)boundTransform3)) { if (drawers[num3].IsSelected != currentSelectionSet.Contains(((object)boundTransform3).GetHashCode())) { drawers[num3].IsSelected = !drawers[num3].IsSelected; } } else if (drawers[num3].IsSelected) { drawers[num3].IsSelected = false; } } } OnCurrentSelectionChanged(); } if (!m_isInSearchMode) { return; } bool flag2 = false; for (int num4 = m_currentSelection.Count - 1; num4 >= 0; num4--) { Transform val2 = m_currentSelection[num4]; if (Object.op_Implicit((Object)(object)val2)) { StringBuilder stringBuilder = RuntimeInspectorUtils.stringBuilder; stringBuilder.Length = 0; stringBuilder.AppendLine("Path:"); while (Object.op_Implicit((Object)(object)val2)) { stringBuilder.Append(" ").AppendLine(((Object)val2).name); val2 = val2.parent; } selectedPathText.text = stringBuilder.Append(" ").Append(hierarchyField.Data.Root.Name).ToString(); flag2 = true; break; } } if (((Component)selectedPathBackground).gameObject.activeSelf != flag2) { ((Component)selectedPathBackground).gameObject.SetActive(flag2); } } private bool FindMultiSelectionPivotAbsoluteIndex(out int pivotAbsoluteIndex) { pivotAbsoluteIndex = 0; if (multiSelectionPivotSceneData == null) { return false; } bool flag = false; List<HierarchyDataRoot> list = (m_isInSearchMode ? searchSceneData : sceneData); for (int i = 0; i < list.Count; i++) { if (list[i] != multiSelectionPivotSceneData) { pivotAbsoluteIndex += list[i].Height; continue; } flag = true; break; } if (!flag) { return false; } if (multiSelectionPivotSiblingIndexTraversalList.Count == 0) { return true; } if (!Object.op_Implicit((Object)(object)multiSelectionPivotTransform)) { return false; } HierarchyData hierarchyData = multiSelectionPivotSceneData.TraverseSiblingIndexList(multiSelectionPivotSiblingIndexTraversalList); if (hierarchyData != null && (Object)(object)hierarchyData.BoundTransform == (Object)(object)multiSelectionPivotTransform) { pivotAbsoluteIndex += hierarchyData.AbsoluteIndex; return true; } hierarchyData = multiSelectionPivotSceneData.FindTransformInVisibleChildren(multiSelectionPivotTransform, (multiSelectionPivotSceneData is HierarchyDataRootPseudoScene) ? multiSelectionPivotSiblingIndexTraversalList.Count : (-1)); if (hierarchyData != null) { pivotAbsoluteIndex += hierarchyData.AbsoluteIndex; return true; } if (multiSelectionPivotSceneData is HierarchyDataRootPseudoScene) { hierarchyData = multiSelectionPivotSceneData.FindTransformInVisibleChildren(multiSelectionPivotTransform); if (hierarchyData != null) { pivotAbsoluteIndex += hierarchyData.AbsoluteIndex; return true; } } return false; } internal HierarchyData GetDataAt(int index) { List<HierarchyDataRoot> list = ((!m_isInSearchMode) ? sceneData : searchSceneData); for (int i = 0; i < list.Count; i++) { if (list[i].Depth < 0) { continue; } if (index < list[i].Height) { if (index <= 0) { return list[i]; } return list[i].FindDataAtIndex(index - 1); } index -= list[i].Height; } return null; } public void OnDrawerPointerEvent(HierarchyField drawer, PointerEventData eventData, bool isPointerDown) { if (!isPointerDown) { currentlyPressedDrawer = null; pressedDrawerActivePointer = null; if (justActivatedMultiSelectionToggleSelectionMode) { justActivatedMultiSelectionToggleSelectionMode = false; eventData.eligibleForClick = false; } } else if (m_pointerLongPressAction != 0) { currentlyPressedDrawer = drawer; pressedDrawerActivePointer = eventData; pressedDrawerDraggedReferenceCreateTime = Time.realtimeSinceStartup + m_pointerLongPressDuration; } } public bool Select(Transform selection, SelectOptions selectOptions = SelectOptions.None) { singleTransformSelection[0] = selection; return Select((IList<Transform>)singleTransformSelection, selectOptions); } public bool Select(IList<Transform> selection, SelectOptions selectOptions = SelectOptions.None) { if (!m_isLocked) { return SelectInternal(selection, selectOptions); } return false; } internal bool SelectInternal(IList<Transform> selection, SelectOptions selectOptions = SelectOptions.None) { //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020c: 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_02d3: Expected O, but got Unknown //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) if (selectLock) { return false; } if (selection.IsEmpty()) { DeselectInternal(null); return true; } Initialize(); bool flag = (selectOptions & SelectOptions.Additive) == SelectOptions.Additive; if (!m_allowMultiSelection) { flag = false; if (selection.Count > 1) { for (int num = selection.Count - 1; num >= 0; num--) { if (CanSelectTransform(selection[num])) { singleTransformSelection[0] = selection[num]; selection = singleTransformSelection; break; } } } } bool flag2 = false; if (flag) { for (int i = 0; i < selection.Count; i++) { Transform val = selection[i]; if (CanSelectTransform(val) && currentSelectionSet.Add(((object)val).GetHashCode())) { m_currentSelection.Add(val); flag2 = true; } } } else { newSelectionSet.Clear(); for (int j = 0; j < selection.Count; j++) { Transform val2 = selection[j]; if (CanSelectTransform(val2)) { int hashCode = ((object)val2).GetHashCode(); newSelectionSet.Add(hashCode); if (currentSelectionSet.Add(hashCode)) { m_currentSelection.Add(val2); flag2 = true; } } } for (int num2 = m_currentSelection.Count - 1; num2 >= 0; num2--) { Transform val3 = m_currentSelection[num2]; if (Object.op_Implicit((Object)(object)val3)) { int hashCode2 = ((object)val3).GetHashCode(); if (!newSelectionSet.Contains(hashCode2)) { m_currentSelection.RemoveAt(num2); currentSelectionSet.Remove(hashCode2); flag2 = true; } } } } if (!flag2 && (selectOptions & SelectOptions.ForceRevealSelection) != SelectOptions.ForceRevealSelection) { return true; } if (flag2) { OnCurrentSelectionChanged(); } Refresh(); RefreshSearchResults(); HierarchyDataTransform hierarchyDataTransform = null; int num3 = 0; List<HierarchyDataRoot> list = (m_isInSearchMode ? searchSceneData : sceneData); for (int k = 0; k < m_currentSelection.Count; k++) { Transform val4 = m_currentSelection[k]; if (!Object.op_Implicit((Object)(object)val4)) { continue; } Scene scene = ((Component)val4).gameObject.scene; for (int l = 0; l < list.Count; l++) { HierarchyDataRoot hierarchyDataRoot = list[l]; if (m_isInSearchMode || hierarchyDataRoot is HierarchyDataRootPseudoScene || ((HierarchyDataRootScene)hierarchyDataRoot).Scene == scene) { HierarchyDataTransform hierarchyDataTransform2 = hierarchyDataRoot.FindTransform(val4); if (hierarchyDataTransform2 != null) { hierarchyDataTransform = hierarchyDataTransform2; num3 = l; } } } } RefreshListView(); if (hierarchyDataTransform != null) { if ((selectOptions & SelectOptions.FocusOnSelection) == SelectOptions.FocusOnSelection) { int num4 = hierarchyDataTransform.AbsoluteIndex; for (int m = 0; m < num3; m++) { num4 += list[m].Height; } LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)((Component)this).transform); Rect rect = drawArea.rect; float height = ((Rect)(ref rect)).height; rect = ((RectTransform)((Transform)drawArea).parent).rect; float height2 = ((Rect)(ref rect)).height; if (height > height2) { float num5 = (float)num4 / (float)totalItemCount * height + (float)base.Skin.LineHeight * 0.5f; scrollView.verticalNormalizedPosition = 1f - Mathf.Clamp01((num5 - height2 * 0.5f) / (height - height2)); } } return true; } return false; } public void Deselect() { Deselect((IList<Transform>)null); } public void Deselect(Transform deselection) { singleTransformSelection[0] = deselection; Deselect((IList<Transform>)singleTransformSelection); } public void Deselect(IList<Transform> deselection) { if (!m_isLocked) { DeselectInternal(deselection); } } internal void DeselectInternal(IList<Transform> deselection) { if (selectLock || m_currentSelection.Count == 0) { return; } Initialize(); bool flag = false; if (deselection == null) { m_currentSelection.Clear(); currentSelectionSet.Clear(); flag = true; } else { for (int num = deselection.Count - 1; num >= 0; num--) { Transform val = deselection[num]; if (Object.op_Implicit((Object)(object)val) && currentSelectionSet.Remove(((object)val).GetHashCode())) { m_currentSelection.Remove(val); flag = true; } } } if (!flag) { return; } for (int num2 = drawers.Count - 1; num2 >= 0; num2--) { if (((Component)drawers[num2]).gameObject.activeSelf && drawers[num2].IsSelected) { drawers[num2].IsSelected = false; } } OnCurrentSelectionChanged(); } public bool IsSelected(Transform transform) { if (Object.op_Implicit((Object)(object)transform)) { return currentSelectionSet.Contains(((object)transform).GetHashCode()); } return false; } private bool CanSelectTransform(Transform transform) { if (!Object.op_Implicit((Object)(object)transform)) { return false; } if (RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Contains(transform) || (m_gameObjectDelegate != null && !m_gameObjectDelegate(transform))) { return false; } Transform val = null; for (int i = 0; i < sceneData.Count; i++) { Transform nearestRootOf = sceneData[i].GetNearestRootOf(transform); if (Object.op_Implicit((Object)(object)nearestRootOf) && (!Object.op_Implicit((Object)(object)val) || nearestRootOf.IsChildOf(val))) { val = nearestRootOf; } } if (!Object.op_Implicit((Object)(object)val)) { return false; } if ((Object)(object)val != (Object)(object)transform) { Transform parent = transform.parent; while (Object.op_Implicit((Object)(object)parent) && (Object)(object)parent != (Object)(object)val) { if (RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Contains(parent) || (m_gameObjectDelegate != null && !m_gameObjectDelegate(parent))) { return false; } parent = parent.parent; } } return true; } private void OnCurrentSelectionChanged() { selectLock = true; try { if (Object.op_Implicit((Object)(object)m_connectedInspector)) { for (int num = m_currentSelection.Count - 1; num >= 0; num--) { if (Object.op_Implicit((Object)(object)m_currentSelection[num])) { m_connectedInspector.Inspect(((Component)m_currentSelection[num]).gameObject); break; } } } if (OnSelectionChanged != null) { OnSelectionChanged(m_currentSelection.AsReadOnly()); } } catch (Exception ex) { Debug.LogException(ex); } finally { selectLock = false; } } private void OnSearchTermChanged(string search) { if (search != null) { search = search.Trim(); } if (string.IsNullOrEmpty(search)) { if (m_isInSearchMode) { for (int i = 0; i < searchSceneData.Count; i++) { searchSceneData[i].IsExpanded = false; } scrollView.verticalNormalizedPosition = 1f; ((Component)selectedPathBackground).gameObject.SetActive(false); isListViewDirty = true; m_isInSearchMode = false; if (m_currentSelection.Count > 0) { SelectInternal(m_currentSelection, SelectOptions.FocusOnSelection | SelectOptions.ForceRevealSelection); } } } else if (!m_isInSearchMode) { scrollView.verticalNormalizedPosition = 1f; nextSearchRefreshTime = Time.realtimeSinceStartup + m_searchRefreshInterval; isListViewDirty = true; m_isInSearchMode = true; RefreshSearchResults(); for (int j = 0; j < searchSceneData.Count; j++) { searchSceneData[j].IsExpanded = true; } } else { RefreshSearchResults(); } } private void OnSceneLoaded(Scene arg0, LoadSceneMode arg1) { //IL_008c: 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_0070: Unknown result type (might be due to invalid IL or missing references) if (!ExposeUnityScenes || (((Scene)(ref arg0)).buildIndex >= 0 && exposedUnityScenesSubset != null && exposedUnityScenesSubset.Length != 0 && Array.IndexOf(exposedUnityScenesSubset, ((Scene)(ref arg0)).name) == -1) || !((Scene)(ref arg0)).IsValid()) { return; } for (int i = 0; i < sceneData.Count; i++) { if (sceneData[i] is HierarchyDataRootScene && ((HierarchyDataRootScene)sceneData[i]).Scene == arg0) { return; } } HierarchyDataRootScene hierarchyDataRootScene = new HierarchyDataRootScene(this, arg0); hierarchyDataRootScene.Refresh(); int index = sceneData.Count - pseudoSceneDataLookup.Count; sceneData.Insert(index, hierarchyDataRootScene); searchSceneData.Insert(index, new HierarchyDataRootSearch(this, hierarchyDataRootScene)); isListViewDirty = true; } private void OnSceneUnloaded(Scene arg0) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < sceneData.Count; i++) { if (sceneData[i] is HierarchyDataRootScene && ((HierarchyDataRootScene)sceneData[i]).Scene == arg0) { sceneData[i].IsExpanded = false; sceneData.RemoveAt(i); searchSceneData[i].IsExpanded = false; searchSceneData.RemoveAt(i); isListViewDirty = true; break; } } } private Scene GetDontDestroyOnLoadScene() { //IL_0028: 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) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //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_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) GameObject val = null; try { val = new GameObject(); Object.DontDestroyOnLoad((Object)(object)val); Scene scene = val.scene; Object.DestroyImmediate((Object)(object)val); val = null; return scene; } catch (Exception ex) { Debug.LogException(ex); return default(Scene); } finally { if ((Object)(object)val != (Object)null) { Object.DestroyImmediate((Object)(object)val); } } } public void AddToPseudoScene(string scene, Transform transform) { GetPseudoScene(scene, createIfNotExists: true).AddChild(transform); } public void AddToPseudoScene(string scene, IEnumerable<Transform> transforms) { HierarchyDataRootPseudoScene pseudoScene = GetPseudoScene(scene, createIfNotExists: true); foreach (Transform transform in transforms) { pseudoScene.AddChild(transform); } } public void RemoveFromPseudoScene(string scene, Transform transform, bool deleteSceneIfEmpty) { HierarchyDataRootPseudoScene pseudoScene = GetPseudoScene(scene, createIfNotExists: false); if (pseudoScene != null) { pseudoScene.RemoveChild(transform); if (deleteSceneIfEmpty && pseudoScene.ChildCount == 0) { DeletePseudoScene(scene); } } } public void RemoveFromPseudoScene(string scene, IEnumerable<Transform> transforms, bool deleteSceneIfEmpty) { HierarchyDataRootPseudoScene pseudoScene = GetPseudoScene(scene, createIfNotExists: false); if (pseudoScene == null) { return; } foreach (Transform transform in transforms) { pseudoScene.RemoveChild(transform); } if (deleteSceneIfEmpty && pseudoScene.ChildCount == 0) { DeletePseudoScene(scene); } } private HierarchyDataRootPseudoScene GetPseudoScene(string scene, bool createIfNotExists) { if (pseudoSceneDataLookup.TryGetValue(scene, out var value)) { return value; } if (createIfNotExists) { return CreatePseudoSceneInternal(scene); } return null; } public void CreatePseudoScene(string scene) { if (!pseudoSceneDataLookup.ContainsKey(scene)) { CreatePseudoSceneInternal(scene); } } private HierarchyDataRootPseudoScene CreatePseudoSceneInternal(string scene) { int num = 0; if (pseudoScenesOrder.Length != 0) { for (int i = 0; i < pseudoScenesOrder.Length && !(pseudoScenesOrder[i] == scene); i++) { if (pseudoSceneDataLookup.ContainsKey(pseudoScenesOrder[i])) { num++; } } } else { num = pseudoSceneDataLookup.Count; } HierarchyDataRootPseudoScene hierarchyDataRootPseudoScene = new HierarchyDataRootPseudoScene(this, scene); num += sceneData.Count - pseudoSceneDataLookup.Count; sceneData.Insert(num, hierarchyDataRootPseudoScene); searchSceneData.Insert(num, new HierarchyDataRootSearch(this, hierarchyDataRootPseudoScene)); pseudoSceneDataLookup[scene] = hierarchyDataRootPseudoScene; isListViewDirty = true; return hierarchyDataRootPseudoScene; } public void DeleteAllPseudoScenes() { for (int num = sceneData.Count - 1; num >= 0; num--) { if (sceneData[num] is HierarchyDataRootPseudoScene) { sceneData[num].IsExpanded = false; sceneData.RemoveAt(num); searchSceneData[num].IsExpanded = false; searchSceneData.RemoveAt(num); } } pseudoSceneDataLookup.Clear(); isListViewDirty = true; } public void DeletePseudoScene(string scene) { for (int i = 0; i < sceneData.Count; i++) { if (sceneData[i] is HierarchyDataRootPseudoScene hierarchyDataRootPseudoScene && hierarchyDataRootPseudoScene.Name == scene) { pseudoSceneDataLookup.Remove(hierarchyDataRootPseudoScene.Name); sceneData[i].IsExpanded = false; sceneData.RemoveAt(i); searchSceneData[i].IsExpanded = false; searchSceneData.RemoveAt(i); isListViewDirty = true; break; } } } RecycledListItem IListViewAdapter.CreateItem(Transform parent) { HierarchyField hierarchyField = Object.Instantiate<HierarchyField>(drawerPrefab, parent, false); hierarchyField.Initialize(this); hierarchyField.Skin = base.Skin; drawers.Add(hierarchyField); return hierarchyField; } } public class HierarchyDragDropListener : MonoBehaviour, IDropHandler, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler { private const float POINTER_VALIDATE_INTERVAL = 5f; [SerializeField] private float siblingIndexModificationArea = 5f; [SerializeField] private float scrollableArea = 75f; private float _1OverScrollableArea; [SerializeField] private float scrollSpeed = 75f; [Header("Internal Variables")] [SerializeField] private RuntimeHierarchy hierarchy; [SerializeField] private RectTransform content; [SerializeField] private Image dragDropTargetVisualization; private Canvas canvas; private RectTransform rectTransform; private float height; private PointerEventData pointer; private Camera worldCamera; private float pointerLastYPos; private float nextPointerValidation; private void Start() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown rectTransform = (RectTransform)((Component)this).transform; canvas = ((Component)hierarchy).GetComponentInParent<Canvas>(); _1OverScrollableArea = 1f / scrollableArea; } private void OnRectTransformDimensionsChange() { height = 0f; } private void Update() { //IL_0054: 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_007d: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) if (pointer == null) { return; } nextPointerValidation -= Time.unscaledDeltaTime; if (nextPointerValidation <= 0f) { nextPointerValidation = 5f; if (!pointer.IsPointerValid()) { pointer = null; return; } } Vector2 val = default(Vector2); if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, pointer.position, worldCamera, ref val) || val.y == pointerLastYPos) { return; } pointerLastYPos = 0f - val.y; if (height <= 0f) { Rect rect = rectTransform.rect; height = ((Rect)(ref rect)).height; } float num = 0f; float num2 = pointerLastYPos; if (pointerLastYPos < scrollableArea) { num = (scrollableArea - pointerLastYPos) * _1OverScrollableArea; } else if (pointerLastYPos > height - scrollableArea) { num = (height - scrollableArea - num2) * _1OverScrollableArea; } float num3 = pointerLastYPos + content.anchoredPosition.y; if (num3 < 0f) { if (((Component)dragDropTargetVisualization).gameObject.activeSelf) { ((Component)dragDropTargetVisualization).gameObject.SetActive(false); } hierarchy.AutoScrollSpeed = 0f; return; } if (num3 < (float)(hierarchy.ItemCount * hierarchy.Skin.LineHeight)) { if (!((Component)dragDropTargetVisualization).gameObject.activeSelf) { ((Transform)((Graphic)dragDropTargetVisualization).rectTransform).SetAsLastSibling(); ((Component)dragDropTargetVisualization).gameObject.SetActive(true); } float num4 = num3 % (float)hierarchy.Skin.LineHeight; float num5 = 0f - num3 + num4; if (num4 < siblingIndexModificationArea) { ((Graphic)dragDropTargetVisualization).rectTransform.anchoredPosition = new Vector2(0f, num5 + 2f); ((Graphic)dragDropTargetVisualization).rectTransform.sizeDelta = new Vector2(20f, 4f); } else if (num4 > (float)hierarchy.Skin.LineHeight - siblingIndexModificationArea) { ((Graphic)dragDropTargetVisualization).rectTransform.anchoredPosition = new Vector2(0f, num5 - (float)hierarchy.Skin.LineHeight + 2f); ((Graphic)dragDropTargetVisualization).rectTransform.sizeDelta = new Vector2(20f, 4f); } else { ((Graphic)dragDropTargetVisualization).rectTransform.anchoredPosition = new Vector2(0f, num5); ((Graphic)dragDropTargetVisualization).rectTransform.sizeDelta = new Vector2(20f, (float)hierarchy.Skin.LineHeight); } } else if (((Component)dragDropTargetVisualization).gameObject.activeSelf) { ((Component)dragDropTargetVisualization).gameObject.SetActive(false); } hierarchy.AutoScrollSpeed = num * scrollSpeed; } void IDropHandler.OnDrop(PointerEventData eventData) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) ((IPointerExitHandler)this).OnPointerExit(eventData); if (!hierarchy.CanReorganizeItems || hierarchy.IsInSearchMode) { return; } Transform[] assignableObjectsFromDraggedReferenceItem = RuntimeInspectorUtils.GetAssignableObjectsFromDraggedReferenceItem<Transform>(eventData); if (assignableObjectsFromDraggedReferenceItem == null || assignableObjectsFromDraggedReferenceItem.Length == 0) { return; } if (assignableObjectsFromDraggedReferenceItem.Length > 1) { Array.Sort(assignableObjectsFromDraggedReferenceItem, (Transform transform1, Transform transform2) => CompareHierarchySiblingIndices(transform1, transform2)); } bool flag = false; float num = pointerLastYPos + content.anchoredPosition.y; int num2 = (int)num / hierarchy.Skin.LineHeight; HierarchyData hierarchyData = hierarchy.GetDataAt(num2); if (hierarchyData == null) { for (int i = 0; i < assignableObjectsFromDraggedReferenceItem.Length; i++) { if ((Object)(object)assignableObjectsFromDraggedReferenceItem[i].parent != (Object)null) { assignableObjectsFromDraggedReferenceItem[i].SetParent((Transform)null, true); flag = true; } } if (!flag) { return; } } else { float num3 = num % (float)hierarchy.Skin.LineHeight; int num4 = ((num3 < siblingIndexModificationArea) ? (-1) : ((num3 > (float)hierarchy.Skin.LineHeight - siblingIndexModificationArea) ? 1 : 0)); if (num4 != 0 && !(hierarchyData is HierarchyDataTransform)) { if (num4 < 0 && num2 > 0) { HierarchyData dataAt = hierarchy.GetDataAt(num2 - 1); if (dataAt != null) { hierarchyData = dataAt; num4 = 1; } } else if (num4 > 0 && num2 < hierarchy.ItemCount - 1) { HierarchyData dataAt2 = hierarchy.GetDataAt(num2 + 1); if (dataAt2 != null && dataAt2 is HierarchyDataTransform) { hierarchyData = dataAt2; num4 = -1; } } } HierarchyDataRoot newScene = null; Transform val = null; int num5 = -1; if (!(hierarchyData is HierarchyDataTransform)) { newScene = (HierarchyDataRoot)hierarchyData; } else { val = ((HierarchyDataTransform)hierarchyData).BoundTransform; if (!Object.op_Implicit((Object)(object)val)) { return; } if (num4 != 0) { if (num4 > 0 && hierarchyData.Height > 1) { num5 = 0; } else if (hierarchyData.Depth == 1 && hierarchyData.Root is HierarchyDataRootPseudoScene) { num5 = ((num4 >= 0) ? (((HierarchyDataRootPseudoScene)hierarchyData.Root).IndexOf(val) + 1) : ((HierarchyDataRootPseudoScene)hierarchyData.Root).IndexOf(val)); val = null; } else { num5 = ((num4 >= 0) ? (val.GetSiblingIndex() + 1) : val.GetSiblingIndex()); val = val.parent; } } if (!Object.op_Implicit((Object)(object)val)) { newScene = hierarchyData.Root; } } int num6 = 0; for (int j = 0; j < assignableObjectsFromDraggedReferenceItem.Length; j++) { if (DropTransformOnto(assignableObjectsFromDraggedReferenceItem[j], hierarchyData, newScene, val, (num5 >= 0) ? (num5 + num6) : num5, out var decrementSiblingIndex, out var shouldFocusObjectInHierarchy)) { num6++; flag = flag || shouldFocusObjectInHierarchy; if (decrementSiblingIndex) { num5--; } } } if (num6 == 0) { return; } } if (flag) { hierarchy.SelectInternal(assignableObjectsFromDraggedReferenceItem, RuntimeHierarchy.SelectOptions.FocusOnSelection | RuntimeHierarchy.SelectOptions.ForceRevealSelection); } else { hierarchy.Refresh(); } } private bool DropTransformOnto(Transform droppedTransform, HierarchyData target, HierarchyDataRoot newScene, Transform newParent, int newSiblingIndex, out bool decrementSiblingIndex, out bool shouldFocusObjectInHierarchy) { //IL_002e: 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_01a6: 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_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) shouldFocusObjectInHierarchy = false; decrementSiblingIndex = false; if ((Object)(object)droppedTransform.parent == (Object)(object)newParent) { if (Object.op_Implicit((Object)(object)newParent) || (newScene is HierarchyDataRootScene && ((HierarchyDataRootScene)newScene).Scene == ((Component)droppedTransform).gameObject.scene)) { if (newSiblingIndex > droppedTransform.GetSiblingIndex()) { newSiblingIndex--; decrementSiblingIndex = true; } } else if (newScene is HierarchyDataRootPseudoScene) { int num = newScene.IndexOf(droppedTransform); if (num >= 0 && newSiblingIndex > num) { newSiblingIndex--; decrementSiblingIndex = true; } } } if (Object.op_Implicit((Object)(object)newParent)) { if (!hierarchy.CanDropDraggedParentOnChild) { if (newParent.IsChildOf(droppedTransform)) { return false; } } else { Transform val = newParent; while ((Object)(object)val.parent != (Object)null && (Object)(object)val.parent != (Object)(object)droppedTransform) { val = val.parent; } if ((Object)(object)val.parent == (Object)(object)droppedTransform) { int index; if (target.Root is HierarchyDataRootPseudoScene hierarchyDataRootPseudoScene && (index = hierarchyDataRootPseudoScene.IndexOf(droppedTransform)) >= 0 && hierarchy.CanDropDraggedObjectsToPseudoScenes) { hierarchyDataRootPseudoScene.InsertChild(index, val); hierarchyDataRootPseudoScene.RemoveChild(droppedTransform); } int siblingIndex = droppedTransform.GetSiblingIndex(); val.SetParent(droppedTransform.parent, true); val.SetSiblingIndex(siblingIndex); shouldFocusObjectInHierarchy = true; } } droppedTransform.SetParent(newParent, true); } else if (newScene is HierarchyDataRootPseudoScene) { if (!hierarchy.CanDropDraggedObjectsToPseudoScenes) { return false; } if (newSiblingIndex < 0) { ((HierarchyDataRootPseudoScene)newScene).AddChild(droppedTransform); } else { ((HierarchyDataRootPseudoScene)newScene).InsertChild(newSiblingIndex, droppedTransform); newSiblingIndex = -1; target = newScene; } } else if (newScene is HierarchyDataRootScene) { if ((Object)(object)droppedTransform.parent != (Object)null) { droppedTransform.SetParent((Transform)null, true); } Scene scene = ((HierarchyDataRootScene)newScene).Scene; if (((Component)droppedTransform).gameObject.scene != scene) { SceneManager.MoveGameObjectToScene(((Component)droppedTransform).gameObject, scene); } if (newSiblingIndex < 0) { newSiblingIndex = ((Scene)(ref scene)).rootCount + 1; shouldFocusObjectInHierarchy = true; } } if (newSiblingIndex >= 0) { droppedTransform.SetSiblingIndex(newSiblingIndex); } shouldFocusObjectInHierarchy |= newSiblingIndex < 0 && !target.IsExpanded; return true; } private int CompareHierarchySiblingIndices(Transform t1, Transform t2) { Transform parent = t1.parent; Transform parent2 = t2.parent; if ((Object)(object)parent == (Object)(object)parent2) { return t1.GetSiblingIndex() - t2.GetSiblingIndex(); } int i = 0; while (Object.op_Implicit((Object)(object)parent)) { i++; parent = parent.parent; } while (Object.op_Implicit((Object)(object)parent2)) { i--; parent2 = parent2.parent; } while (i > 0) { t1 = t1.parent; if ((Object)(object)t1 == (Object)(object)t2) { return 1; } i--; } for (; i < 0; i++) { t2 = t2.parent; if ((Object)(object)t1 == (Object)(object)t2) { return -1; } } while ((Object)(object)t1.parent != (Object)(object)t2.parent) { t1 = t1.parent; t2 = t2.parent; } return t1.GetSiblingIndex() - t2.GetSiblingIndex(); } void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) { //IL_004c: 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_005f: Invalid comparison between Unknown and I4 if (hierarchy.CanReorganizeItems && !hierarchy.IsInSearchMode && Object.op_Implicit((Object)(object)RuntimeInspectorUtils.GetAssignableObjectFromDraggedReferenceItem<Transform>(eventData))) { pointer = eventData; pointerLastYPos = -1f; nextPointerValidation = 5f; if ((int)canvas.renderMode == 0 || ((int)canvas.renderMode == 1 && !Object.op_Implicit((Object)(object)canvas.worldCamera))) { worldCamera = null; } else { worldCamera = (Object.op_Implicit((Object)(object)canvas.worldCamera) ? canvas.worldCamera : Camera.main); } Update(); } } void IPointerExitHandler.OnPointerExit(PointerEventData eventData) { pointer = null; worldCamera = null; if (((Component)dragDropTargetVisualization).gameObject.activeSelf) { ((Component)dragDropTargetVisualization).gameObject.SetActive(false); } hierarchy.AutoScrollSpeed = 0f; } } public class PseudoSceneSourceTransform : MonoBehaviour { [SerializeField] private RuntimeHierarchy m_hierarchy; [SerializeField] private string m_sceneName; [SerializeField] private bool m_hideOnDisable; private HashSet<Transform> childrenCurrent = new HashSet<Transform>(); private HashSet<Transform> childrenNew = new HashSet<Transform>(); private bool updateChildren; private bool isEnabled = true; private bool isQuitting; public RuntimeHierarchy Hierarchy { get { return m_hierarchy; } set { if ((Object)(object)m_hierarchy != (Object)(object)value) { RemoveChildrenFromScene(); m_hierarchy = value; AddChildrenToScene(); } } } public string SceneName { get { return m_sceneName; } set { if (m_sceneName != value) { RemoveChildrenFromScene(); m_sceneName = value; AddChildrenToScene(); } } } public bool HideOnDisable { get { return m_hideOnDisable; } set { if (m_hideOnDisable == value) { return; } m_hideOnDisable = value; if (!isEnabled) { if (value) { RemoveChildrenFromScene(); } else { AddChildrenToScene(); } } } } private bool ShouldUpdateChildren { get { if ((isEnabled || !m_hideOnDisable) && Object.op_Implicit((Object)(object)Hierarchy)) { return !string.IsNullOrEmpty(m_sceneName); } return false; } } private void OnEnable() { isEnabled = true; updateChildren = true; } private void OnDisable() { if (!isQuitting) { isEnabled = false; if (m_hideOnDisable) { RemoveChildrenFromScene(); } } } private void OnApplicationQuit() { isQuitting = true; } private void OnTransformChildrenChanged() { updateChildren = true; } private void Update() { if (!updateChildren) { return; } updateChildren = false; if (!ShouldUpdateChildren) { return; } for (int i = 0; i < ((Component)this).transform.childCount; i++) { Transform child = ((Component)this).transform.GetChild(i); childrenNew.Add(child); if (!childrenCurrent.Remove(child)) { Hierarchy.AddToPseudoScene(m_sceneName, child); } } RemoveChildrenFromScene(); HashSet<Transform> hashSet = childrenCurrent; childrenCurrent = childrenNew; childrenNew = hashSet; } private void AddChildrenToScene() { if (!ShouldUpdateChildren) { return; } for (int i = 0; i < ((Component)this).transform.childCount; i++) { Transform child = ((Component)this).transform.GetChild(i); if (childrenCurrent.Add(child)) { Hierarchy.AddToPseudoScene(m_sceneName, child); } } } private void RemoveChildrenFromScene() { if (!Object.op_Implicit((Object)(object)Hierarchy) || string.IsNullOrEmpty(m_sceneName)) { return; } foreach (Transform item in childrenCurrent) { if (Object.op_Implicit((Object)(object)item)) { Hierarchy.RemoveFromPseudoScene(m_sceneName, item, deleteSceneIfEmpty: true); } } childrenCurrent.Clear(); } } public abstract class HierarchyData { private static readonly List<HierarchyDataTransform> transformDataPool = new List<HierarchyDataTransform>(32); private static readonly List<List<HierarchyDataTransform>> childrenListPool = new List<List<HierarchyDataTransform>>(32); protected List<HierarchyDataTransform> children; protected HierarchyData parent; protected int m_index; protected int m_height = 1; protected int m_depth; public abstract string Name { get; } public abstract bool IsActive { get; } public abstract int ChildCount { get; } public abstract Transform BoundTransform { get; } public HierarchyDataRoot Root { get { HierarchyData hierarchyData = this; while (hierarchyData.parent != null) { hierarchyData = hierarchyData.parent; } return (HierarchyDataRoot)hierarchyData; } } public int Index => m_index; public int AbsoluteIndex { get { int num = m_index; for (HierarchyData hierarchyData = parent; hierarchyData != null; hierarchyData = hierarchyData.parent) { num += hierarchyData.m_index + 1; } return num; } } public int Height => m_height; public int Depth => m_depth; public bool CanExpand => ChildCount > 0; public bool IsExpanded { get { return children != null; } set { if (IsExpanded == value) { return; } if (value) { if (ChildCount == 0) { return; } PopChildrenList(); } else { PoolChildrenList(); } int height = m_height; Refresh(); int num = m_height - height; if (num == 0) { return; } if (parent != null) { HierarchyData hierarchyData = this; for (HierarchyData hierarchyData2 = parent; hierarchyData2 != null; hierarchyData2 = hierarchyData2.parent) { List<HierarchyDataTransform> list = hierarchyData2.children; int i = list.IndexOf((HierarchyDataTransform)hierarchyData) + 1; for (int count = list.Count; i < count; i++) { list[i].m_index += num; } hierarchyData2.m_height += num; hierarchyData = hierarchyData2; } } Root?.Hierarchy.SetListViewDirty(); } } public virtual bool Refresh() { if (m_depth < 0) { return false; } m_height = 1; bool flag = false; int childCount = ChildCount; if (IsExpanded) { if (childCount != children.Count) { flag = true; } RuntimeHierarchy runtimeHierarchy = null; for (int i = 0; i < childCount; i++) { Transform child = GetChild(i); if (children.Count <= i) { if ((Object)(object)runtimeHierarchy == (Object)null) { runtimeHierarchy = Root.Hierarchy; } GenerateChildItem(child, i, runtimeHierarchy); } else if ((Object)(object)children[i].BoundTransform != (Object)(object)child) { int j; for (j = 0; j < children.Count && !((Object)(object)children[j].BoundTransform == (Object)(object)child); j++) { } if (j == children.Count) { if ((Object)(object)runtimeHierarchy == (Object)null) { runtimeHierarchy = Root.Hierarchy; } GenerateChildItem(child, i, runtimeHierarchy); } else { HierarchyDataTransform item = children[j]; children.RemoveAt(j); children.Insert(i, item); } flag = true; } flag |= children[i].Refresh(); children[i].m_index = m_height - 1; m_height += children[i].m_height; } for (int num = children.Count - 1; num >= childCount; num--) { RemoveChildItem(num); } } return flag; } public HierarchyData FindDataAtIndex(int index) { int num = children.Count - 1; if (index <= num && children[index].m_index == index) { int i; for (i = index; i < num && index == children[i + 1].m_index; i++) { } return children[i]; } int num2 = 0; int j = num; while (num2 <= j) { int k = (num2 + j) / 2; int index2 = children[k].m_index; if (index == index2) { for (; k < num && index == children[k + 1].m_index; k++) { } return children[k]; } if (index < index2) { j = k - 1; } else { num2 = k + 1; } } if (j < 0) { j = 0; } for (; j < num && index >= children[j + 1].m_index; j++) { } return children[j].FindDataAtIndex(index - 1 - children[j].m_index); } public HierarchyDataTransform FindTransform(Transform target, Transform nextInPath = null) { if (m_depth < 0) { return null; } bool flag = (Object)(object)nextInPath == (Object)null; if (flag) { nextInPath = ((this is HierarchyDataRootSearch) ? target : target.root); } int num = IndexOf(nextInPath); if (num < 0) { if (!flag || !(this is HierarchyDataRootPseudoScene)) { return null; } nextInPath = target; num = IndexOf(nextInPath); while (num < 0 && (Object)(object)nextInPath != (Object)null) { nextInPath = nextInPath.parent; num = IndexOf(nextInPath); } if (num < 0) { return null; } } if (!CanExpand) { return null; } bool isExpanded = IsExpanded; if (!isExpanded) { IsExpanded = true; } HierarchyDataTransform hierarchyDataTransform = children[num]; if ((Object)(object)hierarchyDataTransform.BoundTransform == (Object)(object)target) { return hierarchyDataTransform; } HierarchyDataTransform hierarchyDataTransform2 = null; if ((Object)(object)hierarchyDataTransform.BoundTransform == (Object)(object)nextInPath) { Transform val = target; Transform val2 = val.parent; while ((Object)(object)val2 != (Object)null && (Object)(object)val2 != (Object)(object)nextInPath) { val = val2; val2 = val.parent; } if ((Object)(object)val2 != (Object)null) { hierarchyDataTransform2 = hierarchyDataTransform.FindTransform(target, val); } } if (hierarchyDataTransform2 != null && hierarchyDataTransform2.m_depth < 0) { hierarchyDataTransform2 = null; } if (hierarchyDataTransform2 == null && !isExpanded) { IsExpanded = false; } return hierarchyDataTransform2; } public virtual HierarchyDataTransform FindTransformInVisibleChildren(Transform target, int targetDepth = -1) { for (int i = 0; i < children.Count; i++) { HierarchyDataTransform hierarchyDataTransform = children[i]; if (hierarchyDataTransform.m_depth < 0) { continue; } if (hierarchyDataTransform.BoundTransform == target) { if (targetDepth <= 0 || hierarchyDataTransform.m_depth == targetDepth) { return hierarchyDataTransform; } } else if ((targetDepth <= 0 || hierarchyDataTransform.m_depth < targetDepth) && hierarchyDataTransform.IsExpanded && Object.op_Implicit((Object)(object)hierarchyDataTransform.BoundTransform) && target.IsChildOf(hierarchyDataTransform.BoundTransform)) { hierarchyDataTransform = hierarchyDataTransform.FindTransformInVisibleChildren(target, targetDepth); if (hierarchyDataTransform != null) { return hierarchyDataTransform; } } } return null; } public abstract Transform GetChild(int index); public int IndexOf(Transform transform) { for (int num = ChildCount - 1; num >= 0; num--) { if (GetChild(num) == transform) { return num; } } return -1; } public void GetSiblingIndexTraversalList(List<int> traversalList) { traversalList.Clear(); HierarchyData hierarchyData = this; while (hierarchyData.parent != null) { traversalList.Add(hierarchyData.parent.children.IndexOf((HierarchyDataTransform)hierarchyData)); hierarchyData = hierarchyData.parent; } } public HierarchyData TraverseSiblingIndexList(List<int> traversalList) { HierarchyData hierarchyData = this; for (int num = traversalList.Count - 1; num >= 0; num--) { int num2 = traversalList[num]; if (hierarchyData.children == null || num2 >= hierarchyData.children.Count) { return null; } hierarchyData = hierarchyData.children[num2]; } return hierarchyData; } private void GenerateChildItem(Transform child, int index, RuntimeHierarchy hierarchy) { bool flag = !RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Contains(child); if (flag && hierarchy.GameObjectFilter != null) { flag = hierarchy.GameObjectFilter(child); } int num = transformDataPool.Count - 1; HierarchyDataTransform hierarchyDataTransform; if (num >= 0) { hierarchyDataTransform = transformDataPool[num]; transformDataPool.RemoveAt(num); } else { hierarchyDataTransform = new HierarchyDataTransform(); } hierarchyDataTransform.Initialize(child, this is HierarchyDataRootSearch); hierarchyDataTransform.parent = this; if (flag) { hierarchyDataTransform.m_depth = m_depth + 1; hierarchyDataTransform.m_height = 1; } else { hierarchyDataTransform.m_depth = -1; hierarchyDataTransform.m_height = 0; } children.Insert(index, hierarchyDataTransform); } private void RemoveChildItem(int index) { children[index].PoolData(); transformDataPool.Add(children[index]); children.RemoveAt(index); } protected void PoolChildrenList() { if (children != null) { for (int num = children.Count - 1; num >= 0; num--) { children[num].PoolData(); transformDataPool.Add(children[num]); } children.Clear(); childrenListPool.Add(children); children = null; } } protected void PopChildrenList() { int childCount = ChildCount; int num = -1; int num2 = int.MaxValue; for (int num3 = childrenListPool.Count - 1; num3 >= 0; num3--) { int num4 = childrenListPool[num3].Capacity - childCount; if (num4 < 0) { num4 = -num4; } if (num4 < num2) { num2 = num4; num = num3; } } if (num >= 0) { children = childrenListPool[num]; childrenListPool.RemoveAt(num); } else { children = new List<HierarchyDataTransform>(ChildCount); } } public static void ClearPool() { childrenListPool.Clear(); transformDataPool.Clear(); if (childrenListPool.Capacity > 128) { childrenListPool.Capacity = 128; } if (transformDataPool.Capacity > 128) { transformDataPool.Capacity = 128; } } } public abstract class HierarchyDataRoot : HierarchyData { public override Transform BoundTransform => null; public override bool IsActive => true; public RuntimeHierarchy Hierarchy { get; private set; } protected HierarchyDataRoot(RuntimeHierarchy hierarchy) { Hierarchy = hierarchy; PopChildrenList(); } public abstract Transform GetNearestRootOf(Transform target); public abstract void RefreshContent(); public override bool Refresh() { RefreshContent(); return base.Refresh(); } public override HierarchyDataTransform FindTransformInVisibleChildren(Transform target, int targetDepth = -1) { if (m_depth < 0 || !base.IsExpanded) { return null; } return base.FindTransformInVisibleChildren(target, targetDepth); } public void ResetCachedNames() { if (children != null) { for (int num = children.Count - 1; num >= 0; num--) { children[num].ResetCachedName(); } } } public void RefreshNameOf(Transform target) { if (children != null) { for (int num = children.Count - 1; num >= 0; num--) { children[num].RefreshNameOf(target); } } } } public class HierarchyDataRootPseudoScene : HierarchyDataRoot { private readonly string name; private readonly List<Transform> rootObjects = new List<Transform>(); public override string Name => name; public override int ChildCount => rootObjects.Count; public HierarchyDataRootPseudoScene(RuntimeHierarchy hierarchy, string name) : base(hierarchy) { this.name = name; } public void AddChild(Transform child) { if (!rootObjects.Contains(child)) { rootObjects.Add(child); } } public void InsertChild(int index, Transform child) { index = Mathf.Clamp(index, 0, rootObjects.Count); rootObjects.Insert(index, child); for (int num = rootObjects.Count - 1; num >= 0; num--) { if (num != index && (Object)(object)rootObjects[num] == (Object)(object)child) { rootObjects.RemoveAt(num); break; } } } public void RemoveChild(Transform child) { rootObjects.Remove(child); } public override void RefreshContent() { for (int num = rootObjects.Count - 1; num >= 0; num--) { if (!Object.op_Implicit((Object)(object)rootObjects[num])) { rootObjects.RemoveAt(num); } } } public override Transform GetChild(int index) { return rootObjects[index]; } public override Transform GetNearestRootOf(Transform target) { Transform val = null; for (int num = rootObjects.Count - 1; num >= 0; num--) { Transform val2 = rootObjects[num]; if (Object.op_Implicit((Object)(object)val2) && target.IsChildOf(val2) && (!Object.op_Implicit((Object)(object)val) || val2.IsChildOf(val))) { val = val2; } } return val; } } public class HierarchyDataRootScene : HierarchyDataRoot { private readonly List<GameObject> rootObjects = new List<GameObject>(); public override string Name { get { //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) Scene scene = Scene; return ((Scene)(ref scene)).name; } } public override int ChildCount => rootObjects.Count; public Scene Scene { get; private set; } public HierarchyDataRootScene(RuntimeHierarchy hierarchy, Scene target) : base(hierarchy) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) Scene = target; } public override void RefreshContent() { //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) //IL_001c: 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) rootObjects.Clear(); Scene scene = Scene; if (((Scene)(ref scene)).isLoaded) { scene = Scene; ((Scene)(ref scene)).GetRootGameObjects(rootObjects); } } public override Transform GetChild(int index) { return rootObjects[index].transform; } public override Transform GetNearestRootOf(Transform target) { //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) if (!(((Component)target).gameObject.scene == Scene)) { return null; } return target.root; } } public class HierarchyDataRootSearch : HierarchyDataRoot { private readonly List<Transform> searchResult = new List<Transform>(); private readonly HierarchyDataRoot reference; private string searchTerm; public override string Name => reference.Name; public override int ChildCount => searchResult.Count; public HierarchyDataRootSearch(RuntimeHierarchy hierarchy, HierarchyDataRoot reference) : base(hierarchy) { this.reference = reference; } public override void RefreshContent() { if (!base.Hierarchy.IsInSearchMode) { return; } searchResult.Clear(); searchTerm = base.Hierarchy.SearchTerm; int childCount = reference.ChildCount; for (int i = 0; i < childCount; i++) { Transform child = reference.GetChild(i); if (Object.op_Implicit((Object)(object)child) && !RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Contains(((Component)child).transform)) { if (((Object)child).name.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase) >= 0) { searchResult.Add(child); } SearchTransformRecursively(((Component)child).transform); } } } public override bool Refresh() { m_depth = 0; bool result = base.Refresh(); if (searchResult.Count == 0) { m_height = 0; m_depth = -1; } return result; } public override HierarchyDataTransform FindTransformInVisibleChildren(Transform target, int targetDepth = -1) { if (m_depth < 0 || targetDepth > 1 || !base.IsExpanded) { return null; } for (int num = children.Count - 1; num >= 0; num--) { if (children[num].BoundTransform == target) { return children[num]; } } return null; } private void SearchTransformRecursively(Transform obj) { for (int i = 0; i < obj.childCount; i++) { Transform child = obj.GetChild(i); if (!RuntimeInspectorUtils.IgnoredTransformsInHierarchy.Contains(child)) { if (((Object)child).name.IndexOf(searchTerm, StringComparison.OrdinalIgnoreCase) >= 0) { searchResult.Add(child); } SearchTransformRecursively(child); } } } public override Transform GetChild(int index) { return searchResult[index]; } public override Transform GetNearestRootOf(Transform target) { if (!searchResult.Contains(target)) { return null; } return target; } } public class HierarchyDataTransform : HierarchyData { private string cachedName; private Transform transform; private bool isSearchEntry; public override string Name { get { if (cachedName == null) { cachedName = (Object.op_Implicit((Object)(object)transform) ? ((Object)transform).name : "<destroyed>"); } return cachedName; } } public override int ChildCount { get { if (isSearchEntry || !Object.op_Implicit((Object)(object)transform)) { return 0; } return transform.childCount; } } public override Transform BoundTransform => transform; public override bool IsActive { get { if (!Object.op_Implicit((Object)(object)transform)) { return true; } return ((Component)transform).gameObject.activeInHierarchy; } } public void Initialize(Transform transform, bool isSearchEntry) { this.transform = transform; this.isSearchEntry = isSearchEntry; } public override Transform GetChild(int index) { return transform.GetChild(index); } public void ResetCachedName() { cachedName = null; if (children != null) { for (int num = children.Count - 1; num >= 0; num--) { children[num].ResetCachedName(); } } } public void RefreshNameOf(Transform target) { if (transform == target) { cachedName = ((Object)target).name; } else if (children != null) { for (int num = children.Count - 1; num >= 0; num--) { children[num].RefreshNameOf(target); } } } public void PoolData() { parent = null; cachedName = null; m_depth = 0; m_height = 0; PoolChildrenList(); } } public class HierarchyField : RecycledListItem, ITooltipContent { private enum ExpandedState { Collapsed, Expanded, ArrowHidden } private const float INACTIVE_ITEM_TEXT_ALPHA = 0.57f; private const float TEXT_X_OFFSET = 35f; [SerializeField] private RectTransform contentTransform; [SerializeField] private Text nameText; [SerializeField] private PointerEventListener clickListener; [SerializeField] private PointerEventListener expandToggle; [SerializeField] private Image expandArrow; [SerializeField] private Toggle multiSelectionToggle; [SerializeField] private Image multiSelectionToggleBackground; private RectTransform rectTransform; private Image background; private int m_skinVersion; private UISkin m_skin; private bool m_isSelected; private bool m_isActive; private ExpandedState m_isExpanded; public UISkin Skin { get { return m_skin; } set { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_013d: 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) if ((Object)(object)m_skin != (Object)(object)value || m_skinVersion != m_skin.Version) { m_skin = value; m_skinVersion = m_skin.Version; rectTransform.sizeDelta = new Vector2(0f, (float)Skin.LineHeight); nameText.SetSkinText(Skin); ((Graphic)expandArrow).color = Skin.ExpandArrowColor; ((Graphic)nameText).rectTransform.anchoredPosition = new Vector2(Skin.ExpandArrowSpacing + (float)Skin.LineHeight * 0.75f, 0f); ((RectTransform)((Component)expandToggle).transform).sizeDelta = new Vector2((float)Skin.LineHeight, (float)Skin.LineHeight); ((RectTransform)((Component)multiSelectionToggle).transform).sizeDelta = new Vector2((float)Skin.LineHeight * 0.8f, (float)Skin.LineHeight * 0.8f); multiSelectionToggle.graphic.color = Skin.ToggleCheckmarkColor; ((Graphic)multiSelectionToggleBackground).color = Skin.InputFieldNormalBackgroundColor; } } } public bool IsSelected { get { return m_isSelected; } set { //IL_001b: 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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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_0094: Unknown result type (might be due to invalid IL or missing references) m_isSelected = value; Color color; if (m_isSelected) { ((Graphic)background).color = Skin.SelectedItemBackgroundColor; color = Skin.SelectedItemTextColor; } else { ((Graphic)background).color = ((Data.Depth == 0) ? Skin.BackgroundColor.Tint(0.075f) : Color.clear); color = Skin.TextColor; } color.a = (m_isActive ? 1f : 0.57f); ((Graphic)nameText).color = color; multiSelectionToggle.isOn = m_isSelected; } } private bool IsActive { get { return m_isActive; } set { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) if (m_isActive != value) { m_isActive = value; Color color = ((Graphic)nameText).color; color.a = (m_isActive ? 1f : 0.57f); ((Graphic)nameText).color = color; } } } public bool MultiSelectionToggleVisible { get { return ((Component)multiSelectionToggle).gameObject.activeSelf; } set { //IL_007d: Unknown result type (might be due to invalid IL or missing references) if (Data == null || Data.Depth <= 0) { value = false; } if (((Component)multiSelectionToggle).gameObject.activeSelf != value) { ((Component)multiSelectionToggle).gameObject.SetActive(value); contentTransform.anchoredPosition = new Vector2((float)(Skin.IndentAmount * Data.Depth) + (value ? ((float)Skin.LineHeight * 0.8f) : 0f), 0f); } } } private ExpandedState IsExpanded { get { return m_isExpanded; } set { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) if (m_isExpanded != value) { m_isExpanded = value; if (m_isExpanded == ExpandedState.ArrowHidden) { ((Component)expandToggle).gameObject.SetActive(false); return; } ((Component)expandToggle).gameObject.SetActive(true); ((Transform)((Graphic)expandArrow).rectTransform).localEulerAngles = (Vector3)((m_isExpanded == ExpandedState.Expanded) ? new Vector3(0f, 0f, -90f) : Vector3.zero); } } } bool ITooltipContent.IsActive { get { if (Object.op_Implicit((Object)(object)this)) { return ((Component)this).gameObject.activeSelf; } return false; } } string ITooltipContent.TooltipText => Data.Name; public float PreferredWidth { get; private set; } public RuntimeHierarchy Hierarchy { get; private set; } public HierarchyData Data { get; private set; } public void Initialize(RuntimeHierarchy hierarchy) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown Hierarchy = hierarchy; rectTransform = (RectTransform)((Component)this).transform; background = ((Component)clickListener).GetComponent<Image>(); if (hierarchy.ShowTooltips) { ((Component)clickListener).gameObject.AddComponent<TooltipArea>().Initialize(hierarchy.TooltipListener, this); } expandToggle.PointerClick += delegate { ToggleExpandedState(); }; clickListener.PointerClick += delegate { OnClick(); }; clickListener.PointerDown += OnPointerDown; clickListener.PointerUp += OnPointerUp; } public void SetContent(HierarchyData data) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) Data = data; contentTransform.anchoredPosition = new Vector2((float)(Skin.IndentAmount * data.Depth) + (MultiSelectionToggleVisible ? ((float)Skin.LineHeight * 0.8f) : 0f), 0f); background.sprite = ((data.Depth == 0) ? Hierarchy.SceneDrawerBackground : Hierarchy.TransformDrawerBackground); RefreshName(); } private void ToggleExpandedState() { Data.IsExpanded = !Data.IsExpanded; } public void Refresh() { IsActive = Data.IsActive; IsExpanded = ((!Data.CanExpand) ? ExpandedState.ArrowHidden : (Data.IsExpanded ? ExpandedState.Expanded : ExpandedState.Collapsed)); } public void RefreshName() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) nameText.text = Data.Name; if (Hierarchy.ShowHorizontalScrollbar) { LayoutRebuilder.ForceRebuildLayoutImmediate(((Graphic)nameText).rectTransform); PreferredWidth = (float)(Data.Depth * m_skin.IndentAmount) + 35f + ((Graphic)nameText).rectTransform.sizeDelta.x; } } private void OnPointerDown(PointerEventData eventData) { Hierarchy.OnDrawerPointerEvent(this, eventData, isPointerDown: true); } priv