예제 #1
0
    IEnumerator HandleMemorySprites(HitEvent nextHitObject, int playMode)
    {
        if (nextHitObject.getColorArray().Length == 4) // Next hit event contains colorArray information
        {
            colorArray = nextHitObject.getColorArray();
        }

        yield return(new WaitForSecondsRealtime(scrollDelay / 4000f));

        if ((playMode == 1 || playMode == -1) && nextHitObject.IsNote())                                                                  // Memory or inverted memory note, draw sprites
        {
            FlashManager.Instance.TurnOn(spriteLeftBig, spriteLeftBig.GetComponent <Image>().color, colorArray[0], scrollDelay / 20000f); // 1/20th of scrollDelay
            FlashManager.Instance.TurnOn(spriteLeftSmall, spriteLeftSmall.GetComponent <Image>().color, colorArray[1], scrollDelay / 20000f);
            FlashManager.Instance.TurnOn(spriteRightSmall, spriteRightSmall.GetComponent <Image>().color, colorArray[2], scrollDelay / 20000f);
            FlashManager.Instance.TurnOn(spriteRightBig, spriteRightBig.GetComponent <Image>().color, colorArray[3], scrollDelay / 20000f);
        }
        else if (playMode == 0)                                                                                                         // Step note, clear sprites
        {
            FlashManager.Instance.TurnOn(spriteLeftBig, spriteLeftBig.GetComponent <Image>().color, Color.clear, scrollDelay / 10000f); // 1/10th of scrollDelay
            FlashManager.Instance.TurnOn(spriteLeftSmall, spriteLeftSmall.GetComponent <Image>().color, Color.clear, scrollDelay / 10000f);
            FlashManager.Instance.TurnOn(spriteRightSmall, spriteRightSmall.GetComponent <Image>().color, Color.clear, scrollDelay / 10000f);
            FlashManager.Instance.TurnOn(spriteRightBig, spriteRightBig.GetComponent <Image>().color, Color.clear, scrollDelay / 10000f);
        }
        yield return(null);
    }
예제 #2
0
    void FetchCurrentNote()
    {
        while (index < hitEventsList.Count)
        {
            //gets latest timing points
            offsetTime = (AudioSettings.dspTime - startTime) * 1000 + scrollDelay;

            //Debug.Log("OFFSET TIME: " + offsetTime);
            if (timingIndex < timingPointsList.Count && offsetTime >= timingPointsList[timingIndex].getOffset())
            {
                scrollDelay = delayHandler.GetComponent <DelayHandler>().UpdateBPM(timingPointsList[timingIndex].getMsPerBeat());
                if (timingPointsList[timingIndex].getPlaymode() == 0) // step
                {
                    baseScore          = noteBaseScore;
                    memoryMode         = false;
                    invertedMemoryMode = false;
                }
                else
                {
                    baseScore          = memoryBaseScore;
                    memoryMode         = timingPointsList[timingIndex].getPlaymode() == 1 ? true : false;
                    invertedMemoryMode = timingPointsList[timingIndex].getPlaymode() == -1 ? true : false;
                }
                timingIndex++;
            }

            noteOffsetTime  = (AudioSettings.dspTime - startTime) * 1000;
            noteOffsetTime += scrollDelay;
            HitEvent hitObject = hitEventsList[index];

            if (noteOffsetTime >= hitObject.getOffset())
            {
                //Debug.Log("Note " + hitObject.getOffset() + " Spawn time: " + offsetTime + "\nNote offset: " + noteOffsetTime);
                if ((hitObject.IsNote() || hitObject.IsHold()) && !noteFlag)
                {
                    spawnNotes(hitObject);
                }
                noteFlag = true;
                if (hitObject.isFlashYellow() || hitObject.isFlashGreen() || hitObject.isFlashRed() || hitObject.isFlashBlue())
                {
                    HitEvent memoryNote = new HitEvent();
                    memoryNote.setSequenceStart(isSequenceStart);
                    if (hitObject.isFlashYellow())
                    {
                        StartCoroutine(FlashMemoryPrompt("yellow", hitObject.IsflashBlack()));
                        memoryNote.setKey("0");
                        memorySequence.Enqueue(memoryNote);
                    }
                    if (hitObject.isFlashGreen())
                    {
                        StartCoroutine(FlashMemoryPrompt("green", hitObject.IsflashBlack()));
                        memoryNote.setKey("1");
                        memorySequence.Enqueue(memoryNote);
                    }
                    if (hitObject.isFlashRed())
                    {
                        StartCoroutine(FlashMemoryPrompt("red", hitObject.IsflashBlack()));
                        memoryNote.setKey("2");
                        memorySequence.Enqueue(memoryNote);
                    }
                    if (hitObject.isFlashBlue())
                    {
                        StartCoroutine(FlashMemoryPrompt("blue", hitObject.IsflashBlack()));
                        memoryNote.setKey("3");
                        memorySequence.Enqueue(memoryNote);
                    }
                    isSequenceStart = false;
                }
                else
                {
                    isSequenceStart = true;
                }


                if (index + 1 < hitEventsList.Count)
                {
                    HitEvent nextHitObject = hitEventsList[index + 1];
                    int      nextHitMode   = FetchNotePlayMode(nextHitObject);
                    // Check if the next note is a memory input corresponding to the start of memory sequence
                    if (memorySequence.Count > 0)
                    {
                        if (nextHitMode != 0 && nextHitObject.IsNote() && memorySequence.Peek().isSequenceStart())
                        {
                            StopCoroutine(HandleMemoryStart(nextHitObject, nextHitMode));
                            StartCoroutine(HandleMemoryStart(nextHitObject, nextHitMode));
                        }
                    }
                    StopCoroutine(HandleMemorySprites(hitObject, FetchNotePlayMode(hitObject)));
                    StartCoroutine(HandleMemorySprites(hitObject, FetchNotePlayMode(hitObject)));
                }
            }
            else // if next hit object doesn't need to be spawned now
            {
                break;
            }

            noteFlag = false;
            index++;
        }
    }