public static bool GetPreviousLevel(ref LevelPack levelPack, ref Level.LevelInfo levelInfo) { if (!levelPack.Levels.Contains(levelInfo)) { throw new Exception($"Level [{levelInfo.ID}] is not part of Level Pack [{levelPack.ID}]"); } var levelIndex = levelInfo.Index; if (levelIndex - 1 >= 0 && levelIndex < levelPack.TotalLevelCount) { // Previous Level in current pack var prevLevel = levelPack.Levels[levelIndex - 1]; levelInfo = prevLevel; return(true); } if (levelIndex - 1 < 0) { // Previous Level in previous pack var prevPack = GetPreviousPack(levelPack); if (prevPack == null) { return(false); // No more levels } levelPack = prevPack; levelInfo = prevPack.Levels[prevPack.Levels.Count - 1]; return(true); } return(false); }
public static bool GetNextLevel(ref LevelPack levelPack, ref Level.LevelInfo levelInfo) { if (!levelPack.Levels.Contains(levelInfo)) { throw new Exception($"Level [{levelInfo.ID}] is not part of Level Pack [{levelPack.ID}]"); } var levelIndex = levelInfo.Index; if (levelIndex >= 0 && levelIndex + 1 < levelPack.TotalLevelCount) { // Next Level in current pack var nextLevel = levelPack.Levels[levelIndex + 1]; levelInfo = nextLevel; return(true); } if (levelIndex + 1 >= levelPack.TotalLevelCount) { // Next Level in next pack var nextPack = GetNextPack(levelPack); if (nextPack == null) { return(false); // No more levels } levelPack = nextPack; levelInfo = nextPack.Levels[0]; return(true); } return(false); }
// TODO: Write testing around the following four methods public static bool HasNextLevel(LevelPack levelPack, Level.LevelInfo levelInfo, ref bool isUnlocked) { if (GetNextLevel(ref levelPack, ref levelInfo)) { isUnlocked = levelInfo.Status != Level.LevelInfo.LevelInfoStatus.Locked; return(true); } return(false); }
private static void UnlockNextLevel(LevelPack levelPack, Level.LevelInfo level) { var levelIndex = level.Index; if (levelIndex >= 0 && levelIndex + 1 < levelPack.TotalLevelCount) { // Next Level in current pack var nextLevel = levelPack.Levels[levelIndex + 1]; nextLevel.SetStatus(Level.LevelInfo.LevelInfoStatus.Unsolved); levelPack.SaveProgressForPack(); } else if (levelIndex + 1 >= levelPack.TotalLevelCount) { // Next Level in next pack var nextPack = GetNextPack(levelPack); nextPack?.UnlockFirstLevel(); } }
private static Level.LevelInfo ParseLevelInfo(JToken levelInfoJSON, int index) { var levelID = levelInfoJSON.Value <string>("ID"); if (string.IsNullOrWhiteSpace(levelID)) { throw new InvalidSerializedLevelPackException($"Level ID was not valid [{levelID}]"); } var displayName = levelInfoJSON.Value <string>("DisplayName"); if (string.IsNullOrWhiteSpace(displayName)) { throw new InvalidSerializedLevelPackException($"Level display name was not valid [{displayName}]"); } var levelInfo = new Level.LevelInfo(levelID, displayName, index); return(levelInfo); }
public static bool HasPreviousLevel(LevelPack levelPack, Level.LevelInfo levelInfo) => GetPreviousLevel(ref levelPack, ref levelInfo);