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); }
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]); }
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); }
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); }