コード例 #1
0
        public void OnGUI(UnitEntityData character, bool refresh)
        {
            if (!Main.IsInGame)
            {
                return;
            }
            var activeScene = SceneManager.GetActiveScene().name;

            if (Game.Instance?.Player == null || activeScene == "MainMenu" || activeScene == "Start")
            {
                UI.Label(" * Please start or load the game first.".color(RGBA.yellow));
                return;
            }
            if (_buttonStyle == null)
            {
                _buttonStyle = new GUIStyle(GUI.skin.button)
                {
                    alignment = TextAnchor.MiddleLeft, wordWrap = true
                }
            }
            ;

            try {
                if (character != _selectedCharacter || refresh)
                {
                    _selectedCharacter = character;
                    _featuresTree      = new FeaturesTree(_selectedCharacter.Descriptor.Progression);;
                }
                using (UI.HorizontalScope()) {
                    // features tree
                    if (_featuresTree != null)
                    {
                        using (UI.VerticalScope()) {
                            var expandAll   = false;
                            var collapseAll = false;

                            // draw tool bar
                            using (UI.HorizontalScope()) {
                                UI.ActionButton("Refresh", () => _featuresTree = new FeaturesTree(_selectedCharacter.Descriptor.Progression), UI.Width(200));
                                UI.Button("Expand All", ref expandAll, UI.Width(200));
                                UI.Button("Collapse All", ref collapseAll, UI.Width(200));
                            }

                            UI.Space(10f);

                            // draw tree
                            foreach (var node in _featuresTree.RootNodes)
                            {
                                draw(node);
                            }

                            void draw(FeaturesTree.FeatureNode node)
                            {
                                using (UI.HorizontalScope()) {
                                    var levelText     = node.Level == 0 ? "" : $" {node.Level} - ";
                                    var blueprintName = $"[{node.Blueprint.name}]".color(node.IsMissing ? RGBA.maroon : RGBA.aqua);
                                    var titleText     = $"{levelText}{node.Name.Bold()} {blueprintName}";
                                    if (node.ChildNodes.Count > 0)
                                    {
                                        if (node.Expanded == ToggleState.None)
                                        {
                                            node.Expanded = ToggleState.Off;
                                        }
                                        node.Expanded = expandAll ? ToggleState.On : collapseAll ? ToggleState.Off : node.Expanded;
                                    }
                                    else
                                    {
                                        node.Expanded = ToggleState.None;
                                    }
                                    Mod.Trace($"{node.Expanded} {titleText}");
                                    UI.ToggleButton(ref node.Expanded, titleText, _buttonStyle);
                                    if (node.Expanded.IsOn())
                                    {
                                        using (UI.VerticalScope(UI.ExpandWidth(false))) {
                                            foreach (var child in node.ChildNodes.OrderBy(n => n.Level))
                                            {
                                                draw(child);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        GUILayout.FlexibleSpace();
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e) {
                _selectedCharacter = null;
                _featuresTree      = null;
                Mod.Error(e);
                throw e;
            }
        }