IEnumerator unloadMicrogamesRecursiveAsync(Queue <MicrogameInstance> queue) { MicrogameInstance instance = queue.Dequeue(); instance.asyncOperation.allowSceneActivation = true; while (!instance.asyncOperation.isDone) { yield return(null); } instance.isBeingUnloaded = true; instance.asyncOperation = SceneManager.UnloadSceneAsync(instance.microgame.microgameId + instance.difficulty.ToString()); while (instance.asyncOperation == null) { yield return(null); } while (!instance.asyncOperation.isDone) { yield return(null); } if (queue.Count > 0) { StartCoroutine(unloadMicrogamesRecursiveAsync(queue)); } //instance.asyncOperation.priority = int.MaxValue - (microgameCount + microgameQueue.Count); //Is this too much? //while (!instance.asyncOperation.isDone) //{ // //yield return null; //} }
void endMicrogame() { if (!getVictoryDetermined()) { voicePlayer.playClip(microgameVictoryStatus, 0f); } //getMicrogameVictory() ? MicrogameController.instance.getTraits().victoryVoiceDelay : MicrogameController.instance.getTraits().failureVoiceDelay); else { voicePlayer.forcePlay(); } MicrogameController.instance.shutDownMicrogame(); SceneManager.SetActiveScene(gameObject.scene); stageCamera.tag = "MainCamera"; CameraController.instance = Camera.main.GetComponent <CameraController>(); microgameMusicSource.Stop(); Cursor.visible = false; MicrogameTimer.instance.beatsLeft = 0f; MicrogameTimer.instance.gameObject.SetActive(false); stage.onMicrogameEnd(microgameCount, microgameVictoryStatus); finishedMicrogame = microgameQueue.Dequeue(); MicrogameController.instance = null; //sceneLoader.removeMicrogame(microgamePool[microgameIndex]); }
IEnumerator loadMicrogameAsync(MicrogameInstance instance) { instance.asyncOperation = SceneManager.LoadSceneAsync(instance.microgame.microgameId + instance.difficulty.ToString() , LoadSceneMode.Additive); instance.asyncOperation.allowSceneActivation = false; instance.asyncOperation.priority = int.MaxValue - (microgameCount + microgameQueue.Count); //Is this too much? yield return(null); float holdSpeed = 0f; while (instance.asyncOperation.progress < .9f) { if (!instance.isBeingUnloaded && holdSpeed == 0f && instance.asyncOperation.allowSceneActivation) { holdSpeed = Time.timeScale; Time.timeScale = 0f; Application.backgroundLoadingPriority = ThreadPriority.High; } yield return(null); } if (holdSpeed > 0f) { Time.timeScale = holdSpeed; Application.backgroundLoadingPriority = sceneLoadPriority; } }
void endMicrogame() { if (!getVictoryDetermined()) { voicePlayer.playClip(microgameVictoryStatus, 0f); } else { voicePlayer.forcePlay(); } MicrogameController.instance.shutDownMicrogame(); SceneManager.SetActiveScene(gameObject.scene); stageCamera.tag = "MainCamera"; CameraController.instance = Camera.main.GetComponent <CameraController>(); microgameMusicSource.Stop(); Cursor.visible = false; Cursor.lockState = GameController.DefaultCursorMode; stageCamera.GetComponent <AudioListener>().enabled = true; MicrogameTimer.instance.beatsLeft = 0f; MicrogameTimer.instance.gameObject.SetActive(false); stage.onMicrogameEnd(microgameCount, microgameVictoryStatus); finishedMicrogame = microgameQueue.Dequeue(); MicrogameController.instance = null; }
IEnumerator unloadMicrogamesRecursiveAsync(Queue <MicrogameInstance> queue) { MicrogameInstance instance = queue.Dequeue(); instance.asyncOperation.allowSceneActivation = true; while (!instance.asyncOperation.isDone) { yield return(null); } instance.isBeingUnloaded = true; instance.asyncOperation = SceneManager.UnloadSceneAsync(instance.microgame.microgameId + instance.difficulty.ToString()); while (instance.asyncOperation == null) { yield return(null); } while (!instance.asyncOperation.isDone) { yield return(null); } if (queue.Count > 0) { StartCoroutine(unloadMicrogamesRecursiveAsync(queue)); } }
void updateMicrogameTraits() { if (microgameQueue.Count <= 0) { return; } MicrogameInstance instance = getCurrentMicrogameInstance(); microgameTraits = instance.microgame.difficultyTraits[instance.difficulty - 1]; microgameTraits.onAccessInStage(instance.microgame.microgameId, instance.difficulty); }
void updateMicrogameQueue(int maxQueueSize) { //Queue all available, unqueued microgames, make sure at least one is queued int index = microgameCount + microgameQueue.Count; while (microgameQueue.Count == 0 || (microgameQueue.Count < maxQueueSize && stage.isMicrogameDetermined(index))) { MicrogameInstance newInstance = new MicrogameInstance(); Stage.Microgame stageMicrogame = stage.getMicrogame(index); newInstance.microgame = GameController.instance.microgameCollection.findMicrogame(stageMicrogame.microgameId); newInstance.difficulty = stage.getMicrogameDifficulty(stageMicrogame, index); StartCoroutine(loadMicrogameAsync(newInstance)); microgameQueue.Enqueue(newInstance); index++; } }