public static List <string> GetAllPlayableLevelNames() { List <string> playableLevelNames = new List <string>(); MazeLevelNamesData levelNamesData = new JsonMazeLevelListFileReader().ReadData <MazeLevelNamesData>(); if (levelNamesData == null) { return(playableLevelNames); } for (int i = 0; i < levelNamesData.LevelNames.Count; i++) { MazeLevelNameData levelNameData = levelNamesData.LevelNames[i]; if (!levelNameData.IsPlayable) { continue; } if (levelNameData.LevelName == MazeLevelGameplayManager.Instance?.Level?.Name) { continue; } playableLevelNames.Add(levelNameData.LevelName); } if (playableLevelNames.Count == 0) { Logger.Warning("Found 0 playable levels!"); } return(playableLevelNames); }
public void Initialise(MazeLevelNameData levelNameData) { _levelNameData = levelNameData; gameObject.name = $"{_levelNameData.LevelName}Toggle"; _levelNameToggleLabel.text = _levelNameData.LevelName; Toggle.isOn = levelNameData.IsPlayable; }
public bool LevelNameExists(string levelName) { MazeLevelNameData levelNameData = LevelNames.FirstOrDefault(l => l.LevelName == levelName); if (levelNameData == null) { return(false); } return(true); }
private MazeLevelNameData GetMazeLevelNameData(string sanatisedLevelName) { MazeLevelNamesData mazeLevelNamesData = MazeLevelLoader.GetAllMazeLevelNamesData(); MazeLevelNameData mazeLevelName = mazeLevelNamesData.LevelNames.FirstOrDefault(level => level.LevelName == sanatisedLevelName); if (mazeLevelName == null) { string message = $"Could not find a maze level with the name '<color={sanatisedLevelName}>info maze</color>' in the level list.\n"; throw new MazeLevelNameNotFoundConsoleException(message); } return(mazeLevelName); }
public MazeLevelNamesData AddLevelName(string mazeLevelName) { if (LevelNameExists(mazeLevelName)) { Logger.Log($"A level with the name {mazeLevelName} was already registered. Not adding it to the maze name list"); return(this); } MazeLevelNameData mazeLevelNameData = new MazeLevelNameData(mazeLevelName); LevelNames.Add(mazeLevelNameData); return(this); }
private void ToggleLevelPlayability(string levelName, List <string> arguments) { if (arguments.Count < 1) { string message = "The command '<color=" + ConsoleConfiguration.HighlightColour + ">configure maze playable</color>' needs an additional argument saying 'true' or 'false'."; throw new NotEnoughArgumentsConsoleException(message); } MazeLevelNamesData levelNamesData = new JsonMazeLevelListFileReader().ReadData <MazeLevelNamesData>(); string sanatisedLevelName = levelName.ToLower().Replace(" ", "-"); int levelNameIndex = levelNamesData.LevelNames.FindIndex(l => l.LevelName == sanatisedLevelName); if (levelNameIndex == -1) { string message = $"Could not find the maze level '<color={sanatisedLevelName}>info maze</color>' in the list with known maze levels."; throw new MazeLevelNameNotFoundConsoleException(message); } MazeLevelNameData levelNameData = levelNamesData.LevelNames.ElementAt(levelNameIndex); if (levelNameData == null) { string message = $"Could not find the maze level '<color={sanatisedLevelName}>info maze</color>' in the list with known maze levels."; throw new MazeLevelNameNotFoundConsoleException(message); } switch (arguments[0]) { case "true": levelNameData.IsPlayable = true; break; case "false": levelNameData.IsPlayable = false; break; default: string message = $"The command '<color={ConsoleConfiguration.HighlightColour}>configure maze {levelName} playable</color>' needs a last argument saying 'true' or 'false'."; throw new UnknownArgumentConsoleException(message); } levelNamesData.LevelNames[levelNameIndex] = levelNameData; JsonMazeLevelListFileWriter jsonMazeLevelListFileWriter = new JsonMazeLevelListFileWriter(); jsonMazeLevelListFileWriter.SerialiseData(levelNamesData); }
//Save changes to which levels are playable to the levels.json file public void SaveChanges() { JsonMazeLevelListFileWriter jsonMazeLevelListFileWriter = new JsonMazeLevelListFileWriter(); MazeLevelNamesData levelNamesData = new MazeLevelNamesData(); foreach (KeyValuePair <PlayableMazeLevelNameToggle, MazeLevelNameData> mazeLevelNameToggleData in LevelNameToggleData) { MazeLevelNameData levelNameData = new MazeLevelNameData() .WithName(mazeLevelNameToggleData.Value.LevelName) .WithPlayability(mazeLevelNameToggleData.Key.Toggle.isOn); levelNamesData.LevelNames.Add(levelNameData); } jsonMazeLevelListFileWriter.SerialiseData(levelNamesData); Logger.Log("Playable level selection changes were saved."); ClosePanel(); }
public void OnEnable() { MazeLevelNamesData levelNamesData = new JsonMazeLevelListFileReader().ReadData <MazeLevelNamesData>(); LevelNameToggleData.Clear(); for (int i = 0; i < levelNamesData.LevelNames.Count; i++) { MazeLevelNameData levelNameData = levelNamesData.LevelNames[i]; GameObject levelNameToggleGO = Instantiate(PlayableLevelNameTogglePrefab, PlayableLevelListContainer); PlayableMazeLevelNameToggle playableLevelNameToggle = levelNameToggleGO.GetComponent <PlayableMazeLevelNameToggle>(); playableLevelNameToggle.Initialise(levelNameData); LevelNameToggleData.Add(playableLevelNameToggle, levelNameData); } IsOpen = true; }
public string GetInfo(List <string> arguments) { try { if (arguments.Count < 1) { string message = "The command '<color=" + ConsoleConfiguration.HighlightColour + ">info maze</color>' needs an additional argument with the name of the maze level you want info on."; Logger.Warning(message); throw new NotEnoughArgumentsConsoleException(message); } string sanatisedLevelName = arguments[0].ToLower().Replace(" ", "-"); MazeLevelData mazeLevelData = GetMazeLevelData(sanatisedLevelName); MazeLevelNameData mazeLevelName = GetMazeLevelNameData(sanatisedLevelName); bool isPlayable = GetIsPlayable(mazeLevelName); GridLocation mazeLevelBounds = GetMazeLevelBounds(mazeLevelData); string infoMessage = "--\n"; infoMessage += $"Information for maze level {arguments[0]}\n"; infoMessage += "--\n\n"; infoMessage += $"Name: {sanatisedLevelName}\n"; infoMessage += $"Playable: {isPlayable}\n"; infoMessage += $"Rows: {mazeLevelBounds.X + 1}\n"; infoMessage += $"Columns: {mazeLevelBounds.Y + 1}\n"; infoMessage += "\n\n"; return(infoMessage); } catch (System.Exception) { return(null); } }
private bool GetIsPlayable(MazeLevelNameData mazeLevelName) { bool isPlayable = mazeLevelName.IsPlayable; return(isPlayable); }