コード例 #1
0
ファイル: StageController.cs プロジェクト: uulltt/NitoriWare
    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;
        //}
    }
コード例 #2
0
ファイル: StageController.cs プロジェクト: uulltt/NitoriWare
    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]);
    }
コード例 #3
0
ファイル: StageController.cs プロジェクト: uulltt/NitoriWare
    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;
        }
    }
コード例 #4
0
ファイル: StageController.cs プロジェクト: Gman8r/NitoriWare
    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;
    }
コード例 #5
0
ファイル: StageController.cs プロジェクト: Gman8r/NitoriWare
    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));
        }
    }
コード例 #6
0
ファイル: StageController.cs プロジェクト: Gman8r/NitoriWare
    void updateMicrogameTraits()
    {
        if (microgameQueue.Count <= 0)
        {
            return;
        }

        MicrogameInstance instance = getCurrentMicrogameInstance();

        microgameTraits = instance.microgame.difficultyTraits[instance.difficulty - 1];
        microgameTraits.onAccessInStage(instance.microgame.microgameId, instance.difficulty);
    }
コード例 #7
0
ファイル: StageController.cs プロジェクト: uulltt/NitoriWare
    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++;
        }
    }