Ejemplo n.º 1
0
        private void CreateLineAt(TimingRaw timingEvent, float timingf)
        {
            Entity lineEntity = em.Instantiate(beatlineEntityPrefab);

            int timing = Mathf.RoundToInt(timingf);

            float floorpos = PlayManager.Conductor.GetFloorPositionFromTiming(timing, 0);

            int t1            = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos - Constants.RenderFloorPositionRange, 0);
            int t2            = PlayManager.Conductor.GetFirstTimingFromFloorPosition(floorpos + Constants.RenderFloorPositionRange, 0);
            int appearTime    = (t1 < t2) ? t1 : t2;
            int disappearTime = (t1 < t2) ? t2 : t1;

            em.SetComponentData(lineEntity, new FloorPosition(floorpos));
            em.SetComponentData(lineEntity, new AppearTime(appearTime));
            em.SetComponentData(lineEntity, new DestroyOnTiming(disappearTime));
        }
Ejemplo n.º 2
0
        public void CreateEntities(IChartParser parser)
        {
            var timings = parser.Timings[0];

            timings.Sort((item1, item2) => { return(item1.timing.CompareTo(item2.timing)); });

            //Extending the first event to before the song's starting point
            {
                TimingRaw firstTiming = timings[0];
                float     start       = -3000 - PlayManager.Conductor.FullOffset;

                float distanceBetweenTwoLine = firstTiming.bpm == 0 ? float.MaxValue :
                                               60000f / math.abs(firstTiming.bpm) * firstTiming.divisor;

                if (distanceBetweenTwoLine != 0)
                {
                    for (float timing = start; timing < 0; timing += distanceBetweenTwoLine)
                    {
                        CreateLineAt(firstTiming, timing);
                    }
                }
            }

            for (int i = 0; i < timings.Count - 1; i++)
            {
                TimingRaw currentTiming = timings[i];
                int       limit         = timings[i + 1].timing;

                float distanceBetweenTwoLine = currentTiming.bpm == 0 ? float.MaxValue :
                                               60000f / math.abs(currentTiming.bpm) * currentTiming.divisor;

                if (distanceBetweenTwoLine == 0)
                {
                    continue;
                }

                for (float timing = currentTiming.timing; timing < limit; timing += distanceBetweenTwoLine)
                {
                    CreateLineAt(currentTiming, timing);
                }
            }

            //Last timing event
            {
                TimingRaw lastTiming = timings[timings.Count - 1];
                uint      limit      = PlayManager.Conductor.songLength;

                float distanceBetweenTwoLine = lastTiming.bpm == 0 ? float.MaxValue :
                                               60000f / math.abs(lastTiming.bpm) * lastTiming.divisor;

                if (distanceBetweenTwoLine == 0)
                {
                    return;
                }

                for (float timing = lastTiming.timing; timing < limit; timing += distanceBetweenTwoLine)
                {
                    CreateLineAt(lastTiming, timing);
                }
            }
        }