private void ResetNearMissCountOnLevelFailed() { string levelName = gameObject.scene.name; string[] levelIdentity = levelName.Split('.'); int currentChapterIndex = int.Parse(levelIdentity[0]); int currentLevelIndex = int.Parse(levelIdentity[1]); PlayerStatistics.Level currentLevel = playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex]; if (!currentLevel.IsPlayed) { currentLevel.numTimesLevelFailed += 1; currentLevel.numTimesNearMiss = 0; playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex] = currentLevel; } }
private void UpdateAndUnlockNextLevel(int currentChapterIndex, int currentLevelIndex, float timeTaken) { playerStats.playerCoins += currentCoinsAcquired; PlayerStatistics.Level currentLevelObj = playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex]; currentLevelObj.IsPlayed = true; currentLevelObj.IsPlaying = false; currentLevelObj.PersonalBestTime = Mathf.Min(currentLevelObj.PersonalBestTime, timeTaken); currentLevelObj.CoinsInLevel = coinsInScene; currentLevelObj.CoinsAcquiredInLevel = currentCoinsAcquired; playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex] = currentLevelObj; if (currentLevelIndex == playerStats.chaptersList[currentChapterIndex].LevelsInChapter.Count - 1) { if (currentChapterIndex == playerStats.chaptersList.Count - 1) { } else { PlayerStatistics.Chapter nextChapterObj = playerStats.chaptersList[currentChapterIndex + 1]; nextChapterObj.IsLocked = false; playerStats.chaptersList[currentChapterIndex + 1] = nextChapterObj; PlayerStatistics.Level nextLevelObj = playerStats.chaptersList[currentChapterIndex + 1].LevelsInChapter[0]; playerStats.highestChapter = PersistentInformation.CurrentChapter = currentChapterIndex + 1; playerStats.highestLevel = 0; if (!nextLevelObj.IsPlayed) { nextLevelObj.IsPlaying = true; } nextLevelObj.IsLocked = false; playerStats.chaptersList[currentChapterIndex + 1].LevelsInChapter[0] = nextLevelObj; } } else { PlayerStatistics.Level nextLevelObj = playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex + 1]; nextLevelObj.IsPlaying = true; nextLevelObj.IsLocked = false; playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex + 1] = nextLevelObj; playerStats.highestLevel = currentLevelIndex + 1; } }
// real time updation will be done by mainmenuhandler or levelcontroller // level needs to be completed for updating the task // after level complete levelTask will be completed fully or not at all // after level complete gameTask can be completed partially. public void UpdateLevelTaskState(ObjectsDescription objectType, TaskTypes taskType, TaskCategory taskCategory, List <string> metaData) { if (UpdateCameFromLevel() && !IsLevelEligibleToExecuteTask()) { return; } bool objTypeMatchesFirstTask = Array.Exists(firstTask.AssociatedWith, element => element == objectType); bool objTypeMatchesSecondTask = Array.Exists(secondTask.AssociatedWith, element => element == objectType); if (taskCategory == TaskCategory.CountingTask) { if (objTypeMatchesFirstTask && firstTask.CurrTaskType == taskType && firstTask.CurrTaskCategory == taskCategory) { if (firstTask.CurrentCount < firstTask.CountLimit) { firstTask.CurrentCount += 1; } if (firstTask.CurrentCount == firstTask.CountLimit) { firstTask.IsCompleted = true; } } if (objTypeMatchesSecondTask && secondTask.CurrTaskType == taskType && secondTask.CurrTaskCategory == taskCategory) { if (secondTask.CurrentCount < secondTask.CountLimit) { secondTask.CurrentCount += 1; } if (secondTask.CurrentCount == secondTask.CountLimit) { secondTask.IsCompleted = true; } } if (taskType == TaskTypes.NearMiss) { Debug.Log("Near miss registered..."); PlayerStatistics.Level levelData = playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex]; levelData.numTimesNearMiss += 1; playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex] = levelData; } } else if (taskCategory == TaskCategory.ImmediateActionTask) { if (taskType == TaskTypes.CollectAllCoinsInLevel) { if (objTypeMatchesFirstTask && firstTask.CurrTaskType == taskType && firstTask.CurrTaskCategory == taskCategory) { if (int.Parse(metaData[0]) == int.Parse(metaData[1])) { firstTask.IsCompleted = true; } } if (objTypeMatchesSecondTask && secondTask.CurrTaskType == taskType && secondTask.CurrTaskCategory == taskCategory) { if (int.Parse(metaData[0]) == int.Parse(metaData[1])) { secondTask.IsCompleted = true; } } } else if (taskType == TaskTypes.Hover || taskType == TaskTypes.NoHit) { if (objTypeMatchesFirstTask && firstTask.CurrTaskType == taskType && firstTask.CurrTaskCategory == taskCategory) { firstTask.IsCompleted = bool.Parse(metaData[0]); } if (objTypeMatchesSecondTask && secondTask.CurrTaskType == taskType && secondTask.CurrTaskCategory == taskCategory) { secondTask.IsCompleted = bool.Parse(metaData[0]); } } else if (taskType == TaskTypes.NoNearMiss) { if (objTypeMatchesFirstTask && firstTask.CurrTaskType == taskType && firstTask.CurrTaskCategory == taskCategory) { firstTask.IsCompleted = (playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex].numTimesNearMiss == 0); } if (objTypeMatchesSecondTask && secondTask.CurrTaskType == taskType && secondTask.CurrTaskCategory == taskCategory) { secondTask.IsCompleted = (playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex].numTimesNearMiss == 0); } } else if (taskType == TaskTypes.UpdateSkin) { if (objTypeMatchesFirstTask && firstTask.CurrTaskType == taskType && firstTask.CurrTaskCategory == taskCategory) { firstTask.IsCompleted = (firstTask.CountLimit <= int.Parse(metaData[0])); } if (objTypeMatchesSecondTask && secondTask.CurrTaskType == taskType && secondTask.CurrTaskCategory == taskCategory) { secondTask.IsCompleted = (secondTask.CountLimit <= int.Parse(metaData[0])); } FinalizeTasks(); } } }
private bool IsLevelEligibleToExecuteTask() { PlayerStatistics.Level levelData = playerStats.chaptersList[currentChapterIndex].LevelsInChapter[currentLevelIndex]; return(!levelData.IsPlayed); }