コード例 #1
0
    void CreateRoadPattern()
    {
        path.GenerateStartPoints(stepDistance, startOffset * playerSpeed);
        for (int i = 0; i < musicStructure.Length - startOffset * 2; i++)
        {
            musicStructure[i + startOffset].Drum    = musicPatternSegments[i % 16].Drum;
            musicStructure[i + startOffset].Kick    = musicPatternSegments[i % 16].Kick;
            musicStructure[i + startOffset].Bass    = musicPatternSegments[i % 16].Bass;
            musicStructure[i + startOffset].hasNote = musicPatternSegments[i % 16].hasNote;
        }
        int nrOfNotesPlaced = 2;
        int lastnote        = -10;
        int typeNote        = 0;

        while (nrOfNotesPlaced < musicStructure.Length - 1 - startOffset * 2)
        {
            do
            {
                typeNote = Random.Range(-3, 4);
            } while (typeNote == lastnote);

            int noteDuration = 0;

            switch (typeNote)
            {
            case -3:
                noteDuration = Random.Range(minNoteDuration, maxNoteDuration);
                typeNote     = 0;
                break;

            case -2:
                noteDuration = Random.Range(minNoteDuration, maxNoteDuration);
                typeNote     = 2;
                break;

            case -1:
                noteDuration = Random.Range(4, maxNoteDuration);
                typeNote     = -1;
                break;

            case 0:
                noteDuration = Random.Range(4, maxNoteDuration);
                typeNote     = -1;
                break;

            case 1:
                noteDuration = Random.Range(4, maxNoteDuration);
                typeNote     = -1;
                break;

            case 2:
                noteDuration = Random.Range(4, maxNoteDuration);
                typeNote     = 4;
                break;

            case 3:
                noteDuration = Random.Range(minNoteDuration, maxNoteDuration);
                typeNote     = 5;
                break;

            default:
                break;
            }
            if (noteDuration + nrOfNotesPlaced > musicStructure.Length - 1 - startOffset * 2)
            {
                noteDuration = musicStructure.Length - 1 - startOffset * 2 - nrOfNotesPlaced;
            }

            for (int i = 0; i < noteDuration; i++)
            {
                musicStructure[nrOfNotesPlaced + i + startOffset].Guitar = typeNote;
            }
            path.AddSegment(stepDistance, noteDuration * playerSpeed, typeNote, roadSideOffset);
            nrOfNotesPlaced += noteDuration;
            //Debug.Log(typeNote + " " + noteDuration + " " + nrOfNotesPlaced);
        }

        path.AddStraight(stepDistance, startOffset * playerSpeed, true);
        terrainGeneration.UpdateRoad(stepDistance);
        foreach (CurveNoteGeneration curve in curveNoteGeneration)
        {
            curve.UpdateRoad(stepDistance);
        }

        Debug.Log(path.points.Count + " " + nrOfNotesPlaced);
    }