コード例 #1
0
        public void Update()
        {
            var hoveredLocal = hoveredComponent;

            if (!DrawDebugInfo || hoveredLocal == null)
            {
                return;
            }

            if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.F))
            {
                var refChain = ReferenceChainBuilder.ForUIComponent(hoveredLocal);

                var sceneExplorer = FindObjectOfType <SceneExplorer>();
                sceneExplorer.Show(refChain);

                if (MainWindow.Instance.Config.DebugRendererAutoTurnOff && sceneExplorer.Visible)
                {
                    DrawDebugInfo = false;
                }
            }

            if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.G) && hoveredComponents.Count > 1 && hoveredComponent != null)
            {
                var index    = hoveredComponents.IndexOf(hoveredComponent);
                var newIndex = (index + hoveredComponents.Count + 1) % hoveredComponents.Count;
                hoveredComponent = hoveredComponents[newIndex];
            }
        }
コード例 #2
0
        private void ShowCitizen(InstanceID instanceId)
        {
            var citizenId = instanceId.GetCitizenId();

            if (citizenId != 0)
            {
                sceneExplorer.Show(ReferenceChainBuilder.ForCitizen(citizenId));
            }
        }
コード例 #3
0
        private void ShowBuilding(InstanceID instanceId)
        {
            var buildingId = instanceId.Building;

            if (buildingId != 0)
            {
                sceneExplorer.Show(ReferenceChainBuilder.ForBuilding(buildingId));
            }
        }
コード例 #4
0
        public static void SetupJumpButton(object value, ReferenceChain refChain)
        {
            if (!GUILayout.Button(">", GUILayout.ExpandWidth(false)))
            {
                return;
            }

            var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();

            if (sceneExplorer == null)
            {
                return;
            }

            sceneExplorer.Show(ReferenceChainBuilder.Optimize(refChain, value));
        }
コード例 #5
0
        private void ShowVehicle(InstanceID instanceId)
        {
            var vehicleId = instanceId.Vehicle;

            if (vehicleId != 0)
            {
                sceneExplorer.Show(ReferenceChainBuilder.ForVehicle(vehicleId));
                return;
            }

            vehicleId = instanceId.ParkedVehicle;
            if (vehicleId != 0)
            {
                sceneExplorer.Show(ReferenceChainBuilder.ForParkedVehicle(vehicleId));
            }
        }
コード例 #6
0
        private void ProcessShowRequest(ShowRequest request)
        {
            if (state.CurrentRefChain != null && request.AddChainToHistory)
            {
                state.RefChainHistory.Add(state.CurrentRefChain);
            }

            if (request.HideUnrelatedSceneRoots)
            {
                sceneTreeScrollPosition = Vector2.zero;
                sceneRoots.Clear();
                ClearExpanded();
            }

            searchDisplayString = request.UpdatedSearchString;
            ReferenceChain currentRefChain = null;
            var            singleRefChain  = request.ReferenceChains.Count == 1;

            foreach (var refChain in request.ReferenceChains)
            {
                var rootGameObject = (GameObject)refChain.GetChainItem(0);
                if (!sceneRoots.ContainsKey(rootGameObject))
                {
                    sceneRoots.Add(rootGameObject, true);
                }

                var expandedRefChain = ReferenceChainBuilder.ForGameObject(rootGameObject);
                if (!state.ExpandedGameObjects.Contains(expandedRefChain.UniqueId))
                {
                    state.ExpandedGameObjects.Add(expandedRefChain.UniqueId);
                }

                if (!singleRefChain)
                {
                    continue;
                }

                for (var i = 1; i < refChain.Length; i++)
                {
                    var breakLoop = false;
                    switch (refChain.GetChainItemType(i))
                    {
                    case ReferenceChain.ReferenceType.GameObject:
                        var go = (GameObject)refChain.GetChainItem(i);
                        expandedRefChain = expandedRefChain.Add(go);
                        if (!state.ExpandedGameObjects.Contains(expandedRefChain.UniqueId))
                        {
                            state.ExpandedGameObjects.Add(expandedRefChain.UniqueId);
                        }

                        break;

                    case ReferenceChain.ReferenceType.Component:
                        var component = (Component)refChain.GetChainItem(i);
                        expandedRefChain = expandedRefChain.Add(component);
                        if (currentRefChain != null)
                        {
                            breakLoop = true;
                        }

                        break;

                    case ReferenceChain.ReferenceType.Field:
                        var field = (FieldInfo)refChain.GetChainItem(i);
                        expandedRefChain = expandedRefChain.Add(field);
                        if (!state.ExpandedObjects.Contains(expandedRefChain.UniqueId))
                        {
                            state.ExpandedObjects.Add(expandedRefChain.UniqueId);
                        }

                        break;

                    case ReferenceChain.ReferenceType.Property:
                        var property = (PropertyInfo)refChain.GetChainItem(i);
                        expandedRefChain = expandedRefChain.Add(property);
                        if (!state.ExpandedObjects.Contains(expandedRefChain.UniqueId))
                        {
                            state.ExpandedObjects.Add(expandedRefChain.UniqueId);
                        }

                        break;

                    case ReferenceChain.ReferenceType.EnumerableItem:
                        var  index = (uint)refChain.GetChainItem(i);
                        uint startIndex;
                        if (state.SelectedArrayStartIndices.TryGetValue(expandedRefChain.UniqueId, out startIndex))
                        {
                            startIndex = Math.Min(index, startIndex);
                        }
                        else if (index > 16)
                        {
                            startIndex = index - 16;
                        }
                        else
                        {
                            startIndex = 0;
                        }

                        uint endIndex;
                        if (state.SelectedArrayEndIndices.TryGetValue(expandedRefChain.UniqueId, out endIndex))
                        {
                            endIndex = Math.Max(index, endIndex);
                        }
                        else
                        {
                            endIndex = startIndex + 31;
                        }

                        state.SelectedArrayStartIndices[expandedRefChain.UniqueId] = startIndex;
                        state.SelectedArrayEndIndices[expandedRefChain.UniqueId]   = endIndex;
                        expandedRefChain = expandedRefChain.Add(index);
                        if (!state.ExpandedObjects.Contains(expandedRefChain.UniqueId))
                        {
                            state.ExpandedObjects.Add(expandedRefChain.UniqueId);
                        }

                        break;
                    }

                    if (breakLoop)
                    {
                        break;
                    }
                }

                if (currentRefChain == null)
                {
                    currentRefChain = refChain.Clone();
                    currentRefChain.IndentationOffset = refChain.Length;
                }
            }
            state.CurrentRefChain = currentRefChain;
        }
コード例 #7
0
        public void DrawComponent()
        {
            componentArea.Begin();

            object value;

            try
            {
                value = state.CurrentRefChain?.Evaluate();
                if (state.CurrentRefChain?.Length > 1)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label("Actions", GUILayout.MinWidth(110f));
                    if (GUILayout.Button("Back") && state.RefChainHistory.Count > 0)
                    {
                        BackToPreviousRefChain();
                    }

                    if (GUILayout.Button("Up", GUILayout.ExpandWidth(false)))
                    {
                        Show(state.CurrentRefChain.SubChain(state.CurrentRefChain.Length - 1), false);
                    }

                    GUIButtons.SetupCommonButtons(state.CurrentRefChain, value, state.CurrentRefChain.LastItem is uint u ? u : 0);
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                }
                else if (state.CurrentRefChain?.LastItem is GameObject gameObject)
                {
                    if (gameObject.transform?.parent?.gameObject != null)
                    {
                        GUILayout.BeginHorizontal();
                        GUILayout.Label("Actions", GUILayout.MinWidth(110f));
                        if (GUILayout.Button("Back") && state.RefChainHistory.Count > 0)
                        {
                            BackToPreviousRefChain();
                        }

                        if (GUILayout.Button("Up", GUILayout.ExpandWidth(false)))
                        {
                            Show(ReferenceChainBuilder.ForGameObject(gameObject.transform?.parent?.gameObject));
                        }

                        GUILayout.FlexibleSpace();
                        GUILayout.EndHorizontal();
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                value = null;
            }

            DrawQuickFilter();

            componentScrollPosition = GUILayout.BeginScrollView(componentScrollPosition);

            if (value != null)
            {
                try
                {
                    GUIReflect.OnSceneTreeReflect(state, state.CurrentRefChain, value, false, TypeUtil.SmartType.Undefined, quickFilter);
                }
                catch (Exception e)
                {
                    Debug.LogException(e);
                    state.CurrentRefChain = null;
                }
            }

            GUILayout.EndScrollView();

            componentArea.End();
        }
コード例 #8
0
        public void DrawSceneTree()
        {
            var gameObjects = sceneRoots.Keys.ToArray();

            if (MainWindow.Instance.Config.SortItemsAlphabetically)
            {
                Array.Sort(gameObjects, (x, y) => string.CompareOrdinal(x?.name, y?.name));
            }

            if (!sceneTreeArea.Begin())
            {
                return;
            }

            GUILayout.BeginHorizontal();

            if (GUILayout.Button("Refresh", GUILayout.ExpandWidth(false)))
            {
                RefreshSceneRoots();
            }

            if (GUILayout.Button("Fold all / Clear", GUILayout.ExpandWidth(false)))
            {
                ClearExpanded();
                RefreshSceneRoots();
                ClearHistory();
            }

            GUILayout.EndHorizontal();

            if (ToolManager.exists && ToolManager.instance?.m_properties?.CurrentTool != null)
            {
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("Show current tool", GUILayout.ExpandWidth(false)))
                {
                    Show(ReferenceChainBuilder.ForCurrentTool());
                }

                GUILayout.EndHorizontal();
            }

            if (ToolManager.exists && ToolManager.instance?.m_properties?.m_editPrefabInfo != null)
            {
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("Show edited prefab", GUILayout.ExpandWidth(false)))
                {
                    Show(ReferenceChainBuilder.ForEditPrefabInfo());
                }

                GUILayout.EndHorizontal();
            }

            if (!string.IsNullOrEmpty(searchDisplayString))
            {
                GUI.contentColor = Color.green;
                GUILayout.Label(searchDisplayString);
                GUI.contentColor = Color.white;
            }

            sceneTreeScrollPosition = GUILayout.BeginScrollView(sceneTreeScrollPosition);

            foreach (var obj in gameObjects)
            {
                GUIRecursiveTree.OnSceneTreeRecursive(gameObject, state, new ReferenceChain().Add(obj), obj);
            }

            GUILayout.EndScrollView();

            sceneTreeArea.End();
        }
コード例 #9
0
        protected override void OnToolGUI(Event e)
        {
            DrawLabel();
            if (m_toolController.IsInsideUI || e.type != EventType.MouseDown)
            {
                base.OnToolGUI(e);
                return;
            }

            if (m_hoverInstance.IsEmpty)
            {
                return;
            }

            var sceneExplorer = FindObjectOfType <SceneExplorer>();

            if (e.button == 0)
            {
                if (m_hoverInstance.NetNode > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForNode(m_hoverInstance.NetNode));
                }
                else if (m_hoverInstance.NetSegment > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForSegment(m_hoverInstance.NetSegment));
                }
                else if (m_hoverInstance.Tree > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForTree(m_hoverInstance.Tree));
                }
                else if (m_hoverInstance.Prop > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForProp(m_hoverInstance.Prop));
                }
                else if (m_hoverInstance.CitizenInstance > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForCitizenInstance(m_hoverInstance.CitizenInstance));
                }
                else if (m_hoverInstance.Building > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForBuilding(m_hoverInstance.Building));
                }
                else if (m_hoverInstance.Vehicle > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForVehicle(m_hoverInstance.Vehicle));
                }
                else if (m_hoverInstance.ParkedVehicle > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForParkedVehicle(m_hoverInstance.ParkedVehicle));
                }
                else if (m_hoverInstance.District > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForDistrict(m_hoverInstance.District));
                }
                else if (m_hoverInstance.Park > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForPark(m_hoverInstance.Park));
                }
                else if (m_hoverInstance.TransportLine > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForTransportLine(m_hoverInstance.TransportLine));
                }
            }
            else if (e.button == 1)
            {
                if (m_hoverInstance.CitizenInstance > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForCitizen(m_hoverInstance.GetCitizenId()));
                }
                else if (m_hoverInstance.NetNode > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForSegment(hoveredSegment));
                }
                else if (m_hoverInstance.NetSegment > 0)
                {
                    sceneExplorer.Show(ReferenceChainBuilder.ForBuilding(hoveredBuilding));
                }
            }
        }
コード例 #10
0
        public static void SetupSmartShowButtons(object value, TypeUtil.SmartType smartType)
        {
            if (smartType == TypeUtil.SmartType.Undefined || value == null || value.GetType().IsArray)
            {
                return;
            }

            try
            {
                switch (smartType)
                {
                case TypeUtil.SmartType.Sprite:
                {
                    if (!(value is string stringValue) || !UIView.GetAView().defaultAtlas.spriteNames.Contains(stringValue))
                    {
                        return;
                    }

                    if (GUILayout.Button("Show sprite"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForSprite(stringValue));
                    }

                    break;
                }

                case TypeUtil.SmartType.ParkedVehicle:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show parked vehicle"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForParkedVehicle(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.Vehicle:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show vehicle"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForVehicle(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.Building:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show building"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForBuilding(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.CitizenUnit:
                {
                    if (Convert.ToUInt32(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show citizen unit"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForCitizenUnit(Convert.ToUInt32(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.Citizen:
                {
                    if (Convert.ToUInt32(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show citizen"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForCitizen(Convert.ToUInt32(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.TransportLine:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show transport line"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForTransportLine(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.PathUnit:
                {
                    if (Convert.ToUInt32(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show path unit"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForPathUnit(Convert.ToUInt32(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.NetNode:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show network node"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForNode(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.NetSegment:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show network segment"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForSegment(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.NetLane:
                {
                    if (Convert.ToUInt32(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show network lane"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForLane(Convert.ToUInt32(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.ParkDistrict:
                {
                    if (Convert.ToByte(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show park district"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForPark(Convert.ToByte(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.District:
                {
                    if (Convert.ToByte(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show district"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForDistrict(Convert.ToByte(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.Tree:
                {
                    if (Convert.ToUInt32(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show tree"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForTree(Convert.ToUInt32(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.Prop:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show prop"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForProp(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.CitizenInstance:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show citizen instance"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForCitizenInstance(Convert.ToUInt16(value)));
                    }

                    break;
                }

                case TypeUtil.SmartType.ZoneBlock:
                {
                    if (Convert.ToUInt16(value) < 1)
                    {
                        return;
                    }

                    if (GUILayout.Button("Show zone block"))
                    {
                        var sceneExplorer = Object.FindObjectOfType <SceneExplorer>();
                        sceneExplorer.Show(ReferenceChainBuilder.ForZoneBlock(Convert.ToUInt16(value)));
                    }

                    break;
                }

                default:
                    return;
                }
            }
            catch
            {
                // suppress
            }
        }