using System; using System.Reflection; using UnityEngine; using UnityExplorer.Helpers; using UnityExplorer.UI; using UnityEngine.UI; namespace UnityExplorer.Inspectors.Reflection { public enum MemberScopes { All, Instance, Static } public class InstanceInspector : ReflectionInspector { public override string TabLabel => $" [R] {base.TabLabel}"; internal MemberScopes m_scopeFilter; internal Button m_lastActiveScopeButton; public InstanceInspector(object target) : base(target) { } private void OnScopeFilterClicked(MemberScopes type, Button button) { if (m_lastActiveScopeButton) { var lastColors = m_lastActiveScopeButton.colors; lastColors.normalColor = new Color(0.2f, 0.2f, 0.2f); m_lastActiveScopeButton.colors = lastColors; } m_scopeFilter = type; m_lastActiveScopeButton = button; var colors = m_lastActiveScopeButton.colors; colors.normalColor = new Color(0.2f, 0.6f, 0.2f); m_lastActiveScopeButton.colors = colors; FilterMembers(null, true); m_sliderScroller.m_slider.value = 1f; } public void ConstructInstanceHelpers() { if (!typeof(Component).IsAssignableFrom(m_targetType) && !typeof(UnityEngine.Object).IsAssignableFrom(m_targetType)) return; var rowObj = UIFactory.CreateHorizontalGroup(Content, new Color(0.1f, 0.1f, 0.1f)); var rowGroup = rowObj.GetComponent(); rowGroup.childForceExpandWidth = true; rowGroup.childControlWidth = true; rowGroup.spacing = 5; rowGroup.padding.top = 2; rowGroup.padding.bottom = 2; rowGroup.padding.right = 2; rowGroup.padding.left = 2; var rowLayout = rowObj.AddComponent(); rowLayout.minHeight = 25; rowLayout.flexibleWidth = 5000; if (typeof(Component).IsAssignableFrom(m_targetType)) { ConstructCompHelper(rowObj); } ConstructUObjHelper(rowObj); // WIP //if (m_targetType == typeof(Texture2D)) // ConstructTextureHelper(); } internal void ConstructCompHelper(GameObject rowObj) { var labelObj = UIFactory.CreateLabel(rowObj, TextAnchor.MiddleLeft); var labelLayout = labelObj.AddComponent(); labelLayout.minWidth = 90; labelLayout.minHeight = 25; labelLayout.flexibleWidth = 0; var labelText = labelObj.GetComponent(); labelText.text = "GameObject:"; #if MONO var comp = Target as Component; #else var comp = (Target as Il2CppSystem.Object).TryCast(); #endif var goBtnObj = UIFactory.CreateButton(rowObj, new Color(0.2f, 0.5f, 0.2f)); var goBtnLayout = goBtnObj.AddComponent(); goBtnLayout.minHeight = 25; goBtnLayout.minWidth = 200; goBtnLayout.flexibleWidth = 0; var text = goBtnObj.GetComponentInChildren(); text.text = comp.name; var btn = goBtnObj.GetComponent