static MenuState ShowRanks() { Refresh("Rank list"); TextMenu menu = new TextMenu(); for (int i = 0; i < RankManager.Ranks.Count; i++) { Rank rank = RankManager.Ranks[i]; TextOption derp = menu.AddOption(i + 1, rank.Name, rank); derp.ForeColor = Color.ToConsoleColor(rank.Color); if (derp.ForeColor == ConsoleColor.Black) { derp.BackColor = ConsoleColor.Gray; } } TextOption optionErase = null, optionRaise = null, optionLower = null; menu.Column = Column.Right; TextOption optionBack = menu.AddOption("B", "Back to sections"); menu.AddSpacer(); TextOption optionAdd = menu.AddOption("A", "Add rank (blank)"); TextOption optionCopy = menu.AddOption("C", "Copy existing rank"); if (RankManager.Ranks.Count > 1) { optionErase = menu.AddOption("E", "Erase rank"); } if (RankManager.Ranks.Count > 1) { menu.AddSpacer(); optionRaise = menu.AddOption("R", "Raise rank in hierarchy"); optionLower = menu.AddOption("L", "Lower rank in hierarchy"); } menu.AddSpacer(); TextOption optionDefaults = menu.AddOption("D", "Use defaults"); TextOption choice = menu.Show(); if (choice == optionBack) { return(MenuState.SectionList); } else if (choice == optionAdd) { Console.Write("Enter new rank name: "); while (true) { string rankName = Console.ReadLine(); if (Rank.IsValidRankName(rankName)) { if (RankManager.FindRank(rankName) != null) { WriteWarning("A rank with this name already exists."); } else { Rank newRank = new Rank(rankName, RankManager.GenerateID()); AddRank(newRank); break; } } else { WriteWarning("Rank names must be between 1 and 16 characters long, " + "and must contain only letters, digits, and underscores."); } } } else if (choice == optionCopy) { int rankToCopyIndex = TextMenu.ShowNumber("Which rank to copy?", 1, RankManager.Ranks.Count); if (rankToCopyIndex != -1) { Console.WriteLine(); Rank rankToCopy = RankManager.Ranks[rankToCopyIndex - 1]; Console.Write("Enter new rank name: "); while (true) { string rankName = Console.ReadLine(); if (Rank.IsValidRankName(rankName)) { if (RankManager.FindRank(rankName) != null) { WriteWarning("A rank with this name already exists."); } else { Rank newRank = new Rank(rankName, RankManager.GenerateID(), rankToCopy); AddRank(newRank); break; } } else { WriteWarning("Rank names must be between 1 and 16 characters long, " + "and must contain only letters, digits, and underscores."); } } } } else if (choice == optionErase) { EraseRank(); } else if (choice == optionRaise) { int rankToRaise = TextMenu.ShowNumber("Which rank to raise?", 2, RankManager.Ranks.Count); if (rankToRaise != -1) { RankManager.RaiseRank(RankManager.Ranks[rankToRaise - 1]); } } else if (choice == optionLower) { int rankToLower = TextMenu.ShowNumber("Which rank to lower?", 1, RankManager.Ranks.Count - 1); if (rankToLower != -1) { RankManager.LowerRank(RankManager.Ranks[rankToLower - 1]); } } else if (choice == optionDefaults) { if (TextMenu.ShowYesNo("Reset all ranks to defaults?")) { RankManager.ResetToDefaults(); } } else { currentRank = (Rank)choice.Tag; return(MenuState.RankDetails); } return(MenuState.Ranks); }