예제 #1
0
        private void Spawnable(DataObjectCollection collection, string search, IMenuLabel label, string type)
        {
            try
            {
                search     = search.ToLower().Trim();
                label.Text = "";
                DataObject data;

                if (int.TryParse(search, out int index))
                {
                    Logger.Debug("ID found: " + index);
                    data = GetByIndex(collection, index, label, type);
                    if (data == null)
                    {
                        return;
                    }
                }
                else
                {
                    Logger.Debug("Search text found: " + search);
                    data = GetByNameOrGuid(collection, search, label, type);
                    if (data == null)
                    {
                        return;
                    }
                }

                Entity result = null;
                switch (data)
                {
                case ItemData item:
                    result = GameInstance.SpawnRelic(item);
                    break;

                case EntityData enemy:
                    result = GameInstance.SpawnEnemy(enemy);
                    break;

                case AchievementData achievement:
                    GameInstance.Game.AchievementManager.SetCompleted(achievement, !achievement.Completed);
                    label.Text = $"{achievement.name} has been set to: {achievement.Completed}";
                    return;

                default:
                    label.Text = $"Invalid object! Cannot spawn a {data.name} ({data.GetType().Name})!";
                    return;
                }

                if (result == null)
                {
                    label.Text = $"{type} couldn't spawn!";
                    return;
                }
            }
            catch (Exception ex)
            {
                Logger.Error($"Error occurred when spawning {search} ({type}): {ex}");
                label.Text = "Something went wrong";
            }
        }
        public IMenu AddLabel(string text, out IMenuLabel control)
        {
            var item = new MenuLabel(text);

            _items.Add(item);
            control = item;
            return(this);
        }
예제 #3
0
        private DataObject GetByIndex(DataObjectCollection collection, int index, IMenuLabel label, string type)
        {
            index -= 1;

            if (collection.Count <= index || index < 0)
            {
                label.Text = $"Invalid {type} number! It has to be between 1 and {collection.Count}";
                return(null);
            }

            return(collection[index]);
        }
예제 #4
0
        private static void ShowHandsCalibrationMenu(MelonPreferences_Entry <Vector3> entry, Vector3 defaultValue, float moveStep, string label, Action <Vector3, Vector3> apply)
        {
            var menu = ExpansionKitApi.CreateCustomFullMenuPopup(LayoutDescription.QuickMenu4Columns);

            var highPrecisionMoves = true;
            var offset             = entry.Value;
            var prevOffset         = offset;

            void CommitOffset()
            {
                apply(prevOffset, offset);
                prevOffset = offset;
            }

            menu.OnContentRootCreated += go =>
            {
                (go.GetComponent <EnableDisableListener>() ?? go.AddComponent <EnableDisableListener>()).OnDisabled +=
                    () =>
                {
                    MelonDebug.Msg("Menu closed, cleaning up");

                    entry.Value = offset;
                    IkTweaksSettings.Category.SaveToFile();
                };
            };

            IMenuLabel xLabel = null;
            IMenuLabel yLabel = null;
            IMenuLabel zLabel = null;

            void DoMove(Vector3 direction)
            {
                offset += direction * (highPrecisionMoves ? moveStep : moveStep * 10);
                CommitOffset();

                xLabel.SetText($"X:\n{offset.x:F3}");
                yLabel.SetText($"Y:\n{offset.y:F3}");
                zLabel.SetText($"Z:\n{offset.z:F3}");
            }

            menu.AddSimpleButton("+Y", () => DoMove(Vector3.up));
            menu.AddSimpleButton("+Z", () => DoMove(Vector3.forward));
            menu.AddSimpleButton("+X", () => DoMove(Vector3.right));
            menu.AddToggleButton("High precision", b => highPrecisionMoves = b, () => highPrecisionMoves);

            menu.AddSimpleButton("-Y", () => DoMove(Vector3.down));
            menu.AddSimpleButton("-Z", () => DoMove(Vector3.back));
            menu.AddSimpleButton("-X", () => DoMove(Vector3.left));
            menu.AddSpacer();

            menu.AddLabel(label).SetAnchor(TextAnchor.MiddleCenter);
            xLabel = menu.AddLabel($"X:\n{offset.x:F3}").SetAnchor(TextAnchor.MiddleCenter);
            yLabel = menu.AddLabel($"Y:\n{offset.y:F3}").SetAnchor(TextAnchor.MiddleCenter);
            zLabel = menu.AddLabel($"Z:\n{offset.z:F3}").SetAnchor(TextAnchor.MiddleCenter);

            menu.AddSimpleButton("Reset", () =>
            {
                offset = defaultValue;
                DoMove(Vector3.zero);
            });
            menu.AddSpacer();
            menu.AddSpacer();
            menu.AddSimpleButton("Back", menu.Hide);

            menu.Show(true);
        }
예제 #5
0
        private DataObject GetByNameOrGuid(DataObjectCollection collection, string search, IMenuLabel label, string type)
        {
            var entity = collection.FirstOrDefault(t =>
                                                   t.guid.ToLower() == search.ToLower() ||
                                                   t.name.ToLower() == search.ToLower());

            if (entity == null)
            {
                var suggestion = GetSuggestions(collection, search);
                label.Text = suggestion == null ? $"Couldn't find a {type} by that name or guid!" : $"Did you mean: {suggestion}";
                return(null);
            }

            return(entity);
        }