public void RenderMenu(MenuProperties props) { string outputString = ""; string menuBorderTopBottom = GetMenuHeaderFooter(props.Level.SubmenuList, props.Level.LevelDescription); List <string> submenuList = props.Level.SubmenuList; outputString += menuBorderTopBottom + "\n"; if (props.Level.LevelDescription != "") { outputString += $"{_menuBorderLeftRight} " + DataUtils.Default + props.Level.LevelDescription + DataUtils.Menu + $"{new string(' ', _menuLength - 3 - props.Level.LevelDescription.Length)}" + _menuBorderLeftRight + "\n"; } for (int i = 0; i < submenuList.Count; i++) { string emptySpace = new string(' ', _menuLength - 3 - submenuList[i].Length); if (props.Level.SubmenuList[i] == "Back") { outputString += _menuBorderLeftRight + new string('—', _menuLength - 2) + _menuBorderLeftRight + "\n"; } if (i == props.SelectedRow) { outputString += _menuBorderLeftRight + $"{Color.BlueBackground + Color.WhiteText} {submenuList[i] + emptySpace}" + DataUtils.Menu + _menuBorderLeftRight + "\n"; continue; } outputString += _menuBorderLeftRight + $" {submenuList[i] + emptySpace}" + _menuBorderLeftRight + "\n"; } outputString += menuBorderTopBottom + "\n"; RenderScreen(outputString); }
public string EventListener(MenuProperties props, string[] options, string message, int selectedRow) { while (true) { ConsoleKeyInfo key = Console.ReadKey(true); switch (key.Key) { case ConsoleKey.UpArrow when selectedRow - 1 >= 0: props.Renderer.RenderSettingsSetup(options, message, --selectedRow); break; case ConsoleKey.DownArrow when selectedRow + 1 < options.Length: props.Renderer.RenderSettingsSetup(options, message, ++selectedRow); break; case ConsoleKey.Enter: return(options[selectedRow]); case ConsoleKey.Backspace: return("Return to settings menu"); case ConsoleKey.Escape: Console.Clear(); Environment.Exit(0); break; } } }
public void AddCustomShip(MenuProperties props) { Settings newSettings = UserSettings.DeepClone(); // Data.DeepClone(obj) if (SetNewShipSize(props, newSettings)) { string name = SetNewShipName(props); newSettings.ShipCount = newSettings.ShipCount.Add(0); // Data.Add(item) newSettings.ShipNames = newSettings.ShipNames.Add(name); // Data.Add(item) SaveUserSettings(newSettings); } props.Renderer.PreviousFrame = ""; props.Renderer.RenderMenu(props); }
public void SetBattlefieldSize(MenuProperties props) { Settings newSettings = UserSettings.DeepClone(); // Data.DeepClone(obj) if (SetBattlefieldHeight(props, newSettings)) { if (SetBattlefieldWidth(props, newSettings)) { SaveUserSettings(newSettings); } } props.Renderer.PreviousFrame = ""; props.Renderer.RenderMenu(props); }
private bool SetNewShipSize(MenuProperties props, Settings settings) { string[] options = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Return to settings menu" }; const string message = "Enter new ship size"; props.Renderer.RenderSettingsSetup(options, message, 0); string value = props.SettingsEventListener.EventListener(props, options, message, 0); if (value == "Return to settings menu") { return(false); } settings.ShipSettings = settings.ShipSettings.Add(int.Parse(value)); // Data.Add(item) return(true); }
public void SetShipSettings(MenuProperties props, string shipName) { int index = GetShipIndex(UserSettings.ShipNames, shipName); Settings newSettings = UserSettings.DeepClone(); // Data.DeepClone(obj) if (SetShipSettingsCount(props, newSettings, shipName, index)) { if (SetShipSettingsSize(props, newSettings, shipName, index)) { SetShipSettingsName(props, newSettings, shipName, index); SaveUserSettings(newSettings); } } props.Renderer.RenderMenu(props); }
private bool SetBattlefieldWidth(MenuProperties props, Settings settings) { string[] options = GetBattlefieldOptions(settings, settings.BattlefieldSize[0]); string currentValue = UserSettings.BattlefieldSize[1].ToString(); string message = $"Please enter available battlefield width [Current: {currentValue}]"; props.Renderer.RenderSettingsSetup(options, message, 0); string value = props.SettingsEventListener.EventListener(props, options, message, 0); if (value == "Return to settings menu") { return(false); } settings.BattlefieldSize[1] = int.Parse(value); return(true); }
private bool SetShipSettingsSize(MenuProperties props, Settings settings, string shipName, int index) { string[] options = GetShipSizeOptions(settings, index); string currentValue = UserSettings.ShipSettings[index].ToString(); string message = $"Please enter {shipName} size [current: {currentValue}]"; props.Renderer.RenderSettingsSetup(options, message, 0); string value = props.SettingsEventListener.EventListener(props, options, message, 0); if (value == "Return to settings menu") { return(false); } settings.ShipSettings[index] = int.Parse(value); return(true); }
public void Start() { _props = new MenuProperties { Manager = this, SettingsManager = new SettingsManager() }; _props.SettingsManager.LoadSettings(); MenuDataContainer.UserSettings = _props.SettingsManager.UserSettings; _props.Level = new MenuLevel("Main Menu", MenuDataContainer.GetSubmenuList("Main Menu")); _props.Level.LevelDescription = MenuDataContainer.GetLevelDescription(_props.Level.LevelTitle); _props.Renderer = new MenuRenderer { PreviousFrame = "Empty frame" }; _props.EventListener = new MenuEventListener(); _props.SettingsEventListener = new SettingsEventListener(); _props.SelectedRow = 0; _props.Renderer.RenderMenu(_props); _props.EventListener.EventListener(_props); }
public void SetShipArrangement(MenuProperties props) { Settings newSettings = UserSettings.DeepClone(); // Data.DeepClone(obj) string[] options = GetArrangementOptions(); string currentValue = UserSettings.ShipArrangement.ToString(); string message = $"Please enter available ship arrangement value [current: {currentValue}]"; props.Renderer.RenderSettingsSetup(options, message, 0); string value = props.SettingsEventListener.EventListener(props, options, message, 0); if (value != "Return to settings menu") { newSettings.ShipArrangement = bool.Parse(value); if (currentValue != value) { SaveUserSettings(newSettings); } } props.Renderer.PreviousFrame = ""; props.Renderer.RenderMenu(props); }
public void EventListener(MenuProperties props) { while (true) { ConsoleKeyInfo key = Console.ReadKey(true); switch (key.Key) { case ConsoleKey.UpArrow when props.SelectedRow - 1 >= 0: props.SelectedRow--; props.Renderer.RenderMenu(props); break; case ConsoleKey.DownArrow when props.SelectedRow + 1 < props.Level.SubmenuList.Count: props.SelectedRow++; props.Renderer.RenderMenu(props); break; case ConsoleKey.Enter: props.Manager.EventEnter(props); break; case ConsoleKey.Backspace: props.SelectedRow = 0; if (props.Level.LevelTitle != "Main Menu") { props.Manager.SwitchParametersToPreviousMenu(props.Level); } props.Renderer.RenderMenu(props); break; case ConsoleKey.Escape: Console.Clear(); Environment.Exit(0); break; } } }
private string SetNewShipName(MenuProperties props) { Console.Clear(); Console.CursorVisible = true; string name; Console.WriteLine("Please enter name for new ship: "); while (true) { name = Console.ReadLine(); if (StringValidator.ValidateShipName(name) && !UserSettings.ShipNames.Contains(name)) { break; } Console.WriteLine(UserSettings.ShipNames.Contains(name) ? "Please enter valid name for new ship [Do not duplicate your ship names!]: " : "Please enter valid name for new ship [Ship name must be with length from 1 to 20 chars and" + " do not use menu names for ships!]: "); } //props.Level.SubmenuList.Add(name); Console.CursorVisible = false; return(name); }
private void SetShipSettingsName(MenuProperties props, Settings settings, string shipName, int index) { string[] options = { "Yes", "No", "Return to settings menu" }; string message = $"Do you want to rename {shipName}?"; props.Renderer.RenderSettingsSetup(options, message, 0); string value = props.SettingsEventListener.EventListener(props, options, message, 0); if (value == "No" || value == "Return to settings menu") { return; } Console.Clear(); Console.CursorVisible = true; Console.WriteLine($"Please enter new name for ship [Previous: {shipName}]: "); string newName = Console.ReadLine(); settings.ShipNames[index] = newName; props.Level.SubmenuList[index] = newName; Console.CursorVisible = false; props.Renderer.PreviousFrame = "Empty frame"; }
public void EventEnter(MenuProperties props) { string selectedMenu = props.Level.SubmenuList[props.SelectedRow]; switch (selectedMenu) { case "Exit": Console.Clear(); Environment.Exit(0); break; case "Back": GetBack(props); break; case "Fast Game": props.GameMode = "Fast Game"; GameManager fastGame = new GameManager(); fastGame.Start(props.GameMode, props.SettingsManager.DefaultSettings); break; case "Player vs Player": case "Player vs AI": case "AI vs AI": GameModeSettings(props); break; case "Default settings": GameManager defaultGame = new GameManager(); defaultGame.Start(props.GameMode, props.SettingsManager.DefaultSettings); break; case "User settings": GameManager userGame = new GameManager(); userGame.Start(props.GameMode, props.SettingsManager.UserSettings); break; case "Load": LoadSavedGame(props.Level.LevelTitle); break; case "Delete": Save saveForDelete = SaveManager.GetSaveReference(props.Level.LevelTitle); SaveManager.DeleteSavedGame(saveForDelete); GetBack(props); break; case "Reset user settings to default": props.SettingsManager.ResetSettingsToDefault(); GetBack(props); break; case "Ship arrangement": props.SettingsManager.SetShipArrangement(props); break; case "Battlefield size": props.SettingsManager.SetBattlefieldSize(props); break; case "Add custom ship": props.SettingsManager.AddCustomShip(props); break; case "Carrier": case "Battleship": case "Submarine": case "Cruiser": case "Patrol": props.SettingsManager.SetShipSettings(props, selectedMenu); break; default: { if (props.SettingsManager.UserSettings.ShipNames.Contains(selectedMenu)) { props.SettingsManager.SetShipSettings(props, selectedMenu); } DefaultStatement(props); break; } } }