Пример #1
0
    void fakeCreation(Song s)
    {
        var theBPMCounter = 1;
        var theSTOPCounter = 0;
        double mesurecount = 0;
        double prevmesure = 0;
        double timecounter = 0;
        double timeBPM = 0;
        double timestop = 0;
        double timetotal = 0;
        float prec = 0.001f;

        //stepBySecondsAverage
        double timestart = -10f;
        double stoptime = 0;
        int countStep = 0;
        double stepbysecAv = 0f;

        //stepmax
        double maxStepPerSeconds = 0f;
        int numberStepBetweenTwoBeat = 0;
        double timestartMax = -10f;
        //double maxLenght = 0f;

        //longestStream
        double lenghtStream = 0f;
        double maxLenghtStream = 0f;
        double speedOfMaxStream = 0f;
        double previousSpeed = 0f;

        //Footswitch
        int numberOfFootswitch = 0;
        int[] casevalidate = new int[4]; //left down up right
        casevalidate[0] = 0;
        casevalidate[1] = 0;
        casevalidate[2] = 0;
        casevalidate[3] = 0;

        //Cross
        int numberOfCross = 0;
        int[] caseCrossvalidate = new int[4]; //left down up right
        caseCrossvalidate[0] = 0;
        caseCrossvalidate[1] = 0;
        caseCrossvalidate[2] = 0;
        caseCrossvalidate[3] = 0;

        //Hands
        int numberOfHands = 0;

        //freeze
        var freezed = new int[4];
        freezed[0] = 0;
        freezed[1] = 0;
        freezed[2] = 0;
        freezed[3] = 0;

        //graph
        var listNumberStep = new Dictionary<double, double>();

        foreach(var mesure in s.stepchart){

            for(int beat=0;beat<mesure.Count;beat++){

            #region BPMChange
                var bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);
                if(theBPMCounter < s.bpms.Count && theSTOPCounter < s.stops.Count){
                    while((theBPMCounter < s.bpms.Count && theSTOPCounter < s.stops.Count)
                        && (s.mesureBPMS.ElementAt(theBPMCounter) < mesurecount - prec || s.mesureSTOPS.ElementAt(theSTOPCounter) < mesurecount - prec)){

                        if(s.mesureBPMS.ElementAt(theBPMCounter) < s.mesureSTOPS.ElementAt(theSTOPCounter)){
                            timecounter += (s.mesureBPMS.ElementAt(theBPMCounter) - prevmesure)/bps;

                            timeBPM += timecounter;
                            timecounter = 0;
                            prevmesure = s.mesureBPMS.ElementAt(theBPMCounter);
                            theBPMCounter++;
                            bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);
                            //Debug.Log("And bpm change before / bpm");
                        }else if(s.mesureBPMS.ElementAt(theBPMCounter) > s.mesureSTOPS.ElementAt(theSTOPCounter)){
                            timestop += s.stops.ElementAt(theSTOPCounter).Value;
                            theSTOPCounter++;
                            //Debug.Log("And stop change before");
                        }else{
                            timecounter += (s.mesureBPMS.ElementAt(theBPMCounter) - prevmesure)/bps;
                            timeBPM += timecounter;
                            timecounter = 0;
                            prevmesure = s.mesureBPMS.ElementAt(theBPMCounter);
                            theBPMCounter++;
                            bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);

                            timestop += s.stops.ElementAt(theSTOPCounter).Value;
                            theSTOPCounter++;
                            //Debug.Log("And bpm change before");
                            //Debug.Log("And stop change before");
                        }

                    }
                }else if(theBPMCounter < s.bpms.Count){
                    while((theBPMCounter < s.bpms.Count) && s.mesureBPMS.ElementAt(theBPMCounter) < mesurecount - prec){

                        timecounter += (s.mesureBPMS.ElementAt(theBPMCounter) - prevmesure)/bps;

                        timeBPM += timecounter;
                        timecounter = 0;
                        prevmesure = s.mesureBPMS.ElementAt(theBPMCounter);
                        theBPMCounter++;
                        bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);

                    }
                }else if(theSTOPCounter < s.stops.Count){
                    while((theSTOPCounter < s.stops.Count) && s.mesureSTOPS.ElementAt(theSTOPCounter) < mesurecount - prec){

                        timestop += s.stops.ElementAt(theSTOPCounter).Value;
                        theSTOPCounter++;

                    }
                }

                #endregion
                timecounter += (mesurecount - prevmesure)/bps;

                timetotal = timecounter + timeBPM + timestop;

                char[] note = mesure.ElementAt(beat).TrimStart(' ').Trim().ToCharArray();

                if((beat*8f)%(mesure.Count) == 0){
                    var newMax = numberStepBetweenTwoBeat/(timetotal - timestartMax);
                    if(!listNumberStep.ContainsKey(timetotal)){
                        listNumberStep.Add(timetotal, newMax);
                    }else{
                        listNumberStep.Add(timetotal + 0.00001, newMax);
                    }
                    if(maxStepPerSeconds < newMax){
                        maxStepPerSeconds = newMax;
                    }

                    if(Mathf.Abs((float)(newMax - previousSpeed)) < 0.001f && numberStepBetweenTwoBeat > 0 && newMax > 4f){

                        lenghtStream += (timetotal - timestartMax);
                        if(lenghtStream > maxLenghtStream){
                            speedOfMaxStream = newMax;
                            maxLenghtStream = lenghtStream;
                        }
                    }else{
                        lenghtStream = 0;
                    }

                    previousSpeed = newMax;

                    numberStepBetweenTwoBeat = 0;
                    timestartMax = timetotal;
                }
                var barr = false;
                var barrstop = false;
                var iselected = -1;
                var doubleselection = false;
                var tripleselect = 0;

                for(int i =0;i<4; i++){

                    if(note[i] == '1'){
                        if(iselected == -1){
                            iselected = i;
                        }else{
                            doubleselection = true;
                        }
                        tripleselect++;
                        barr = true;

                    }else if(note[i] == '2'){
                        barr = true;
                        if(iselected == -1){
                            iselected = i;
                        }else{
                            doubleselection = true;
                        }
                        freezed[i] = 1;
                    }else if(note[i] == '3'){
                        freezed[i] = 0;
                        barrstop = true;
                    }else if(note[i] == '4'){
                        barr = true;
                        if(iselected == -1){
                            iselected = i;
                        }else{
                            doubleselection = true;
                        }
                        freezed[i] = 1;
                    }else if(note[i] == 'M'){
                        barrstop = true;
                    }

                }

                for(int i=0;i<4;i++){
                    if(freezed[i] == 1) tripleselect++;
                }

                if(tripleselect >= 3f){
                    numberOfHands++;
                }
                if(barr || barrstop){
                    stoptime = timetotal;
                }

                if(barr){

                    if(timestart == -10f) timestart = timetotal;

                    countStep++;
                    numberStepBetweenTwoBeat++;

                    if(!doubleselection){
                        switch(iselected){
                            case 0:
                            //fs
                                if(((casevalidate[1] == 2 && casevalidate[2] == 0) || (casevalidate[2] == 2 && casevalidate[1] == 0)) && casevalidate[0] == 0 && casevalidate[3] == 1){
                                    numberOfFootswitch++;
                                    casevalidate[0] = 1;
                                    casevalidate[1] = 0;
                                    casevalidate[2] = 0;
                                    casevalidate[3] = 0;
                                }else{
                                    casevalidate[0] = 1;
                                    casevalidate[1] = 0;
                                    casevalidate[2] = 0;
                                    casevalidate[3] = 0;
                                }
                            //cross
                                if((caseCrossvalidate[0] == 0 && (((caseCrossvalidate[1] == 1 || caseCrossvalidate[1] == 2) && caseCrossvalidate[2] == 0)
                                || (caseCrossvalidate[1] == 0 && (caseCrossvalidate[2] == 1 || caseCrossvalidate[2] == 2))) && caseCrossvalidate[3] == 1)){
                                    numberOfCross++;
                                    caseCrossvalidate[0] = 1;
                                    caseCrossvalidate[1] = 0;
                                    caseCrossvalidate[2] = 0;
                                    caseCrossvalidate[3] = 0;
                                }else{
                                    caseCrossvalidate[0] = 1;
                                    caseCrossvalidate[1] = 0;
                                    caseCrossvalidate[2] = 0;
                                    caseCrossvalidate[3] = 0;
                                }
                                break;
                            case 1:
                            //fs
                                if(((casevalidate[0] == 0 && casevalidate[3] == 1) || (casevalidate[0] == 1 && casevalidate[3] == 0)) && casevalidate[2] == 0 &&  casevalidate[1] < 2){
                                    casevalidate[1]++;
                                }else{
                                    casevalidate[0] = 0;
                                    casevalidate[1] = 0;
                                    casevalidate[2] = 0;
                                    casevalidate[3] = 0;
                                }
                            //cross
                                if((caseCrossvalidate[0] == 1 || caseCrossvalidate[3] == 1)){
                                    if(caseCrossvalidate[0] == 1 && caseCrossvalidate[1] == 1 && caseCrossvalidate[2] == 2 && caseCrossvalidate[3] == 0){
                                        caseCrossvalidate[2] = 0;
                                    }
                                    if(caseCrossvalidate[0] == 0 && caseCrossvalidate[1] == 1 && caseCrossvalidate[2] == 2 && caseCrossvalidate[3] == 1){
                                        caseCrossvalidate[2] = 0;
                                    }

                                    caseCrossvalidate[1] = 2;
                                    if(caseCrossvalidate[2] == 2) caseCrossvalidate[2] = 1;

                                }else{
                                    caseCrossvalidate[0] = 0;
                                    caseCrossvalidate[1] = 0;
                                    caseCrossvalidate[2] = 0;
                                    caseCrossvalidate[3] = 0;
                                }
                                break;
                            case 2:
                            //fs
                                if(((casevalidate[0] == 0 && casevalidate[3] == 1) || (casevalidate[0] == 1 && casevalidate[3] == 0)) && casevalidate[1] == 0 &&  casevalidate[2] < 2){
                                    casevalidate[2]++;
                                }else{
                                    casevalidate[0] = 0;
                                    casevalidate[1] = 0;
                                    casevalidate[2] = 0;
                                    casevalidate[3] = 0;
                                }
                            //cross
                                if((caseCrossvalidate[0] == 1 || caseCrossvalidate[3] == 1)){
                                    if(caseCrossvalidate[0] == 1 && caseCrossvalidate[1] == 2 && caseCrossvalidate[2] == 1 && caseCrossvalidate[3] == 0){
                                        caseCrossvalidate[1] = 0;
                                    }
                                    if(caseCrossvalidate[0] == 0 && caseCrossvalidate[1] == 2 && caseCrossvalidate[2] == 1 && caseCrossvalidate[3] == 1){
                                        caseCrossvalidate[1] = 0;
                                    }

                                    caseCrossvalidate[2] = 2;
                                    if(caseCrossvalidate[1] == 2) caseCrossvalidate[1] = 1;

                                }else{
                                    caseCrossvalidate[0] = 0;
                                    caseCrossvalidate[1] = 0;
                                    caseCrossvalidate[2] = 0;
                                    caseCrossvalidate[3] = 0;
                                }
                                break;
                            case 3:
                            //fs
                                if(((casevalidate[1] == 2 && casevalidate[2] == 0) || (casevalidate[2] == 2 && casevalidate[1] == 0)) && casevalidate[3] == 0 && casevalidate[0] == 1){
                                    numberOfFootswitch++;
                                    casevalidate[0] = 0;
                                    casevalidate[1] = 0;
                                    casevalidate[2] = 0;
                                    casevalidate[3] = 1;
                                }else{
                                    casevalidate[0] = 0;
                                    casevalidate[1] = 0;
                                    casevalidate[2] = 0;
                                    casevalidate[3] = 1;
                                }
                            //cross
                                if(caseCrossvalidate[0] == 1 && (( caseCrossvalidate[1] == 2 && caseCrossvalidate[2] == 0)
                                    || (caseCrossvalidate[1] == 0 &&  caseCrossvalidate[2] == 2) && caseCrossvalidate[3] == 0)){
                                    numberOfCross++;
                                    caseCrossvalidate[0] = 0;
                                    caseCrossvalidate[1] = 0;
                                    caseCrossvalidate[2] = 0;
                                    caseCrossvalidate[3] = 1;
                                }else{
                                    caseCrossvalidate[0] = 0;
                                    caseCrossvalidate[1] = 0;
                                    caseCrossvalidate[2] = 0;
                                    caseCrossvalidate[3] = 1;
                                }
                                break;
                        }
                    }else{
                        casevalidate[0] = 0;
                        casevalidate[1] = 0;
                        casevalidate[2] = 0;
                        casevalidate[3] = 0;
                        caseCrossvalidate[0] = 0;
                        caseCrossvalidate[1] = 0;
                        caseCrossvalidate[2] = 0;
                        caseCrossvalidate[3] = 0;
                    }
                }

                #region ChangeBPM
                if(theBPMCounter < s.bpms.Count){
                    if(Mathf.Abs((float)(s.mesureBPMS.ElementAt(theBPMCounter) - mesurecount)) < prec){
                            timeBPM += timecounter;
                            timecounter = 0;
                            theBPMCounter++;
                            //Debug.Log("And bpm change");
                    }
                }

                if(theSTOPCounter < s.stops.Count){
                    if(Mathf.Abs((float)(s.mesureSTOPS.ElementAt(theSTOPCounter) - mesurecount)) < prec){
                            timestop += s.stops.ElementAt(theSTOPCounter).Value;
                            theSTOPCounter++;
                            //Debug.Log("And stop");
                    }
                }

                #endregion
                prevmesure = mesurecount;
                mesurecount += (4f/(float)mesure.Count);

            }
        }

        stepbysecAv = (double)countStep/(stoptime - timestart);
        s.duration = stoptime;
        s.stepPerSecondAverage = stepbysecAv;
        s.stepPerSecondMaximum = maxStepPerSeconds;
        //s.timeMaxStep = maxLenght;
        s.stepPerSecondStream = speedOfMaxStream;
        s.longestStream = maxLenghtStream;
        s.numberOfFootswitch = numberOfFootswitch;
        s.numberOfCross = numberOfCross - numberOfFootswitch;
        s.numberOfHands = numberOfHands;

        s.intensityGraph = new float[100];

        var theamountOfTime = s.duration/100f;
        double thetotaltime = 0;
        double themoy = 0;
        double thecountmoy = 0;
        var countintensity = 0;
        double theprevioustimetotal = 0;
        for(int i=0;i<listNumberStep.Count && thetotaltime < s.duration;i++){
            if((thetotaltime - theprevioustimetotal) >= theamountOfTime){
                var thevalue = themoy/thecountmoy;
                s.intensityGraph[countintensity] = (float)thevalue;
                countintensity++;
                thecountmoy = 0;
                themoy = 0;
                theprevioustimetotal = thetotaltime;
            }else{
                themoy += listNumberStep.ElementAt(i).Value;
                thecountmoy++;
                thetotaltime = listNumberStep.ElementAt(i).Key;
            }
        }
    }
Пример #2
0
    //Create the chart
    void createTheChart(Song s)
    {
        var ypos = 0f;
        arrowLeftList = new List<Arrow>();
        arrowUpList = new List<Arrow>();
        arrowDownList = new List<Arrow>();
        arrowRightList = new List<Arrow>();
        mineLeftList = new List<Arrow>();
        mineUpList = new List<Arrow>();
        mineDownList = new List<Arrow>();
        mineRightList = new List<Arrow>();

        var theBPMCounter = 1;
        var theSTOPCounter = 0;
        double mesurecount = 0;
        double prevmesure = 0;
        double timecounter = 0;
        double timeBPM = 0;
        double timestop = 0;
        double timetotal = 0;
        float prec = 0.001f;
        var ArrowFreezed = new Arrow[4];
        Bumps = new List<double>();
        foreach(var mesure in s.stepchart){

            for(int beat=0;beat<mesure.Count;beat++){

                var bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);
                if(theBPMCounter < s.bpms.Count && theSTOPCounter < s.stops.Count){
                    while((theBPMCounter < s.bpms.Count && theSTOPCounter < s.stops.Count)
                        && (s.mesureBPMS.ElementAt(theBPMCounter) < mesurecount - prec || s.mesureSTOPS.ElementAt(theSTOPCounter) < mesurecount - prec)){

                        if(s.mesureBPMS.ElementAt(theBPMCounter) < s.mesureSTOPS.ElementAt(theSTOPCounter)){
                            timecounter += (s.mesureBPMS.ElementAt(theBPMCounter) - prevmesure)/bps;

                            timeBPM += timecounter;
                            timecounter = 0;
                            prevmesure = s.mesureBPMS.ElementAt(theBPMCounter);
                            theBPMCounter++;
                            bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);
                            //Debug.Log("And bpm change before / bpm");
                        }else if(s.mesureBPMS.ElementAt(theBPMCounter) > s.mesureSTOPS.ElementAt(theSTOPCounter)){
                            timestop += s.stops.ElementAt(theSTOPCounter).Value;
                            theSTOPCounter++;
                            //Debug.Log("And stop change before");
                        }else{
                            timecounter += (s.mesureBPMS.ElementAt(theBPMCounter) - prevmesure)/bps;
                            timeBPM += timecounter;
                            timecounter = 0;
                            prevmesure = s.mesureBPMS.ElementAt(theBPMCounter);
                            theBPMCounter++;
                            bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);

                            timestop += s.stops.ElementAt(theSTOPCounter).Value;
                            theSTOPCounter++;
                            //Debug.Log("And bpm change before");
                            //Debug.Log("And stop change before");
                        }

                    }
                }else if(theBPMCounter < s.bpms.Count){
                    while((theBPMCounter < s.bpms.Count) && s.mesureBPMS.ElementAt(theBPMCounter) < mesurecount - prec){

                        timecounter += (s.mesureBPMS.ElementAt(theBPMCounter) - prevmesure)/bps;

                        timeBPM += timecounter;
                        timecounter = 0;
                        prevmesure = s.mesureBPMS.ElementAt(theBPMCounter);
                        theBPMCounter++;
                        bps = s.getBPS(s.bpms.ElementAt(theBPMCounter-1).Value);

                    }
                }else if(theSTOPCounter < s.stops.Count){
                    while((theSTOPCounter < s.stops.Count) && s.mesureSTOPS.ElementAt(theSTOPCounter) < mesurecount - prec){

                        timestop += s.stops.ElementAt(theSTOPCounter).Value;
                        theSTOPCounter++;

                    }
                }

                timecounter += (mesurecount - prevmesure)/bps;

                timetotal = timecounter + timeBPM + timestop;
                if((beat)%(mesure.Count/4) == 0) Bumps.Add(timetotal);

                var previousnote = mesure.ElementAt(beat).Trim();

                //Traitement
                if(displayValue[0]){ //No mine
                    previousnote = previousnote.Replace('M', '0');
                }
                if(displayValue[1]){ //No jump
                    if(previousnote.Where( c => c == '1' || c == '2' || c == '4').Count() == 2){
                        var done = false;
                        for(int i=0; i<4; i++){
                            if(previousnote.ElementAt(i) == '1' || 	previousnote.ElementAt(i) == '2' || previousnote.ElementAt(i) == '4'){
                                if(done){
                                    previousnote = previousnote.Remove(i, 1);
                                    previousnote = previousnote.Insert(i,"0");
                                }else{
                                    done = true;
                                }
                            }
                        }
                    }
                }
                if(displayValue[2]){ //No hands
                    if(previousnote.Where( c => c == '1' || c == '2' || c == '4').Count() >= 3){
                        var done = false;
                        for(int i=0; i<4; i++){
                            if(previousnote.ElementAt(i) == '1' || 	previousnote.ElementAt(i) == '2' || previousnote.ElementAt(i) == '4'){
                                if(done){
                                    previousnote = previousnote.Remove(i, 1);
                                    previousnote = previousnote.Insert(i,"0");
                                }else{
                                    done = true;
                                }
                            }
                        }
                    }
                }

                if(displayValue[3]){ //No freeze
                    previousnote = previousnote.Replace('2', '1');
                    previousnote = previousnote.Replace('4', '1');
                    previousnote = previousnote.Replace('3', '0');
                }

                char[] note = previousnote.ToCharArray();

                var listNeighboors = new List<Arrow>();
                var barr = false;
                for(int i =0;i<4; i++){
                    if(note[i] == '1'){

                        barr = true;
                        var goArrow = (GameObject) Instantiate(arrow, new Vector3(i*2, -ypos, 0f), arrow.transform.rotation);
                        if(DataManager.Instance.skinSelected == 1 || DataManager.Instance.skinSelected == 3){
                            for(int j=0; j<goArrow.transform.childCount;j++){
                                if(goArrow.transform.GetChild(j).name.Contains("Deco")){
                                    goArrow.transform.GetChild(j).renderer.material.color = chooseColor(beat + 1, mesure.Count);
                                }
                            }
                        }else{
                            goArrow.renderer.material.color = chooseColor(beat + 1, mesure.Count);
                        }
                        var theArrow = new Arrow(goArrow, ArrowType.NORMAL, timetotal);

                        switch(i){
                        case 0:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, 90f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, 90f);
                            }
                            theArrow.arrowPos = ArrowPosition.LEFT;
                            arrowLeftList.Add(theArrow);
                            break;
                        case 1:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, 180f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, 180f);
                            }
                            theArrow.arrowPos = ArrowPosition.DOWN;
                            arrowDownList.Add(theArrow);
                            break;
                        case 2:
                            theArrow.arrowPos = ArrowPosition.UP;
                            arrowUpList.Add(theArrow);
                            break;
                        case 3:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, -90f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, -90f);
                            }
                            theArrow.arrowPos = ArrowPosition.RIGHT;
                            arrowRightList.Add(theArrow);
                            break;
                        }
                        listNeighboors.Add(theArrow);
                        goArrow.SetActiveRecursively(false);
                        gameObject.GetComponent<ManageGameObject>().Add(timetotal, goArrow);
                        //barrow = true;
                    }else if(note[i] == '2'){
                        barr = true;
                        var goArrow = (GameObject) Instantiate(arrow, new Vector3(i*2, -ypos, 0f), arrow.transform.rotation);
                        if(DataManager.Instance.skinSelected == 1 || DataManager.Instance.skinSelected == 3){
                            for(int j=0; j<goArrow.transform.childCount;j++){
                                if(goArrow.transform.GetChild(j).name.Contains("Deco")){
                                    goArrow.transform.GetChild(j).renderer.material.color = chooseColor(beat + 1, mesure.Count);
                                }
                            }
                        }else{
                            goArrow.renderer.material.color = chooseColor(beat + 1, mesure.Count);
                        }
                        var theArrow = new Arrow(goArrow, ArrowType.FREEZE, timetotal);
                        ArrowFreezed[i] = theArrow;
                        switch(i){
                        case 0:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, 90f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, 90f);
                            }
                            theArrow.arrowPos = ArrowPosition.LEFT;
                            arrowLeftList.Add(theArrow);
                            break;
                        case 1:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, 180f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, 180f);
                            }
                            theArrow.arrowPos = ArrowPosition.DOWN;
                            arrowDownList.Add(theArrow);
                            break;
                        case 2:
                            theArrow.arrowPos = ArrowPosition.UP;
                            arrowUpList.Add(theArrow);
                            break;
                        case 3:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, -90f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, -90f);
                            }
                            theArrow.arrowPos = ArrowPosition.RIGHT;
                            arrowRightList.Add(theArrow);
                            break;
                        }
                        listNeighboors.Add(theArrow);
                        goArrow.SetActiveRecursively(false);
                        GetComponent<ManageGameObject>().Add(timetotal, goArrow);
                    }else if(note[i] == '3'){
                        barr = true;
                        var theArrow = ArrowFreezed[i];
                        if(ArrowFreezed[i] != null){
                            var goFreeze = (GameObject) Instantiate(freeze, new Vector3(i*2, (theArrow.goArrow.transform.position.y + ((-ypos - theArrow.goArrow.transform.position.y)/2f)) , 1f), freeze.transform.rotation);
                            goFreeze.transform.localScale = new Vector3(1f, -((-ypos - theArrow.goArrow.transform.position.y)/2f), 0.1f);
                            if(DataManager.Instance.skinSelected == 1 || DataManager.Instance.skinSelected == 3){
                            for(int j=0; j<theArrow.goArrow.transform.childCount;j++){
                                if(theArrow.goArrow.transform.GetChild(j).name.Contains("Deco")){
                                    goFreeze.transform.GetChild(0).renderer.material.color = theArrow.goArrow.transform.GetChild(j).renderer.material.color;
                                    j = theArrow.goArrow.transform.childCount;
                                }
                            }
                            }else{
                                goFreeze.transform.GetChild(0).renderer.material.color = theArrow.goArrow.renderer.material.color;
                            }
                            theArrow.setArrowFreeze(timetotal, new Vector3(i*2,-ypos, 0f), goFreeze, null);
                        }

                        ArrowFreezed[i] = null;

                    }else if(note[i] == '4'){
                        barr = true;
                        var goArrow = (GameObject) Instantiate(arrow, new Vector3(i*2, -ypos, 0f), arrow.transform.rotation);
                        if(DataManager.Instance.skinSelected == 1 || DataManager.Instance.skinSelected == 3){
                            for(int j=0; j<goArrow.transform.childCount;j++){
                                if(goArrow.transform.GetChild(j).name.Contains("Deco")){
                                    goArrow.transform.GetChild(j).renderer.material.color = chooseColor(beat + 1, mesure.Count);
                                }
                            }
                        }else{
                            goArrow.renderer.material.color = chooseColor(beat + 1, mesure.Count);
                        }
                        var theArrow = new Arrow(goArrow, ArrowType.ROLL, timetotal);
                        ArrowFreezed[i] = theArrow;
                        switch(i){
                        case 0:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, 90f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, 90f);
                            }
                            theArrow.arrowPos = ArrowPosition.LEFT;
                            arrowLeftList.Add(theArrow);
                            break;
                        case 1:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, 180f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, 180f);
                            }
                            theArrow.arrowPos = ArrowPosition.DOWN;
                            arrowDownList.Add(theArrow);
                            break;
                        case 2:
                            theArrow.arrowPos = ArrowPosition.UP;
                            arrowUpList.Add(theArrow);
                            break;
                        case 3:
                            if(DataManager.Instance.skinSelected == 1){
                                theArrow.goArrow.transform.Rotate(0f, 0f, -90f);
                            }else if(DataManager.Instance.skinSelected == 3){
                                theArrow.goArrow.transform.FindChild("RotationCenter").Rotate(0f, 0f, -90f);
                            }
                            theArrow.arrowPos = ArrowPosition.RIGHT;
                            arrowRightList.Add(theArrow);
                            break;
                        }
                        listNeighboors.Add(theArrow);
                        goArrow.SetActiveRecursively(false);
                        GetComponent<ManageGameObject>().Add(timetotal, goArrow);
                    }else if(note[i] == 'M'){
                        var goArrow = (GameObject) Instantiate(mines, new Vector3(i*2, -ypos, 0f), mines.transform.rotation);
                        var theArrow = new Arrow(goArrow, ArrowType.MINE, timetotal);
                        switch(i){
                        case 0:
                            theArrow.arrowPos = ArrowPosition.LEFT;
                            mineLeftList.Add(theArrow);
                            break;
                        case 1:
                            theArrow.arrowPos = ArrowPosition.DOWN;
                            mineDownList.Add(theArrow);
                            break;
                        case 2:
                            theArrow.arrowPos = ArrowPosition.UP;
                            mineUpList.Add(theArrow);
                            break;
                        case 3:
                            theArrow.arrowPos = ArrowPosition.RIGHT;
                            mineRightList.Add(theArrow);
                            break;
                        }

                    }

                }

                if(barr){
                    if(firstArrow <= 0f) firstArrow = timetotal;
                    lastArrow = timetotal;
                }

                if(listNeighboors.Count > 1){
                    foreach(var el in listNeighboors){
                        el.neighboors = listNeighboors;
                        el.imJump = true;
                    }
                }

                if(theBPMCounter < s.bpms.Count){
                    if(Mathf.Abs((float)(s.mesureBPMS.ElementAt(theBPMCounter) - mesurecount)) < prec){
                            timeBPM += timecounter;
                            timecounter = 0;
                            theBPMCounter++;
                            //Debug.Log("And bpm change");
                    }
                }

                if(theSTOPCounter < s.stops.Count){
                    if(Mathf.Abs((float)(s.mesureSTOPS.ElementAt(theSTOPCounter) - mesurecount)) < prec){
                            timestop += s.stops.ElementAt(theSTOPCounter).Value;
                            theSTOPCounter++;
                            //Debug.Log("And stop");
                    }
                }
                prevmesure = mesurecount;
                mesurecount += (4f/(float)mesure.Count);

                ypos += (4f/(float)mesure.Count)*speedmod;

            }
        }

        //Sort
        arrowUpList = arrowUpList.OrderBy(c => c.time).ToList();
        arrowDownList = arrowDownList.OrderBy(c => c.time).ToList();
        arrowRightList = arrowRightList.OrderBy(c => c.time).ToList();
        arrowLeftList = arrowLeftList.OrderBy(c => c.time).ToList();

        mineUpList = mineUpList.OrderBy(c => c.time).ToList();
        mineDownList = mineDownList.OrderBy(c => c.time).ToList();
        mineRightList = mineRightList.OrderBy(c => c.time).ToList();
        mineLeftList = mineLeftList.OrderBy(c => c.time).ToList();

        GetComponent<ManageGameObject>().DoTheStartSort();
    }