Example #1
0
        public override void Generate()
        {
            var          hitobjectLayer = GetLayer("");
            OsuHitObject prevObject     = null;

            var hSprite = hitobjectLayer.CreateSprite(SpritePath, OsbOrigin.Centre);

            hSprite.Scale(StartTime, SpriteScale);
            hSprite.Fade(OsbEasing.In, StartTime - 200, StartTime + 200, 0, 1);
            if (Additive)
            {
                hSprite.Additive(StartTime, EndTime + FadeTime);
            }

            foreach (var hitobject in Beatmap.HitObjects)
            {
                if ((StartTime != 0 || EndTime != 0) &&
                    (hitobject.StartTime < StartTime - 5 || EndTime - 5 <= hitobject.StartTime))
                {
                    continue;
                }

                if (prevObject != null)
                {
                    hSprite.Move(OsbEasing.Out, prevObject.EndTime, hitobject.StartTime, prevObject.PositionAtTime(prevObject.EndTime), hitobject.PositionAtTime(hitobject.StartTime));
                    if (Colorize)
                    {
                        hSprite.Color(prevObject.EndTime, hitobject.StartTime, prevObject.Color, hitobject.Color);
                    }
                }

                else
                {
                    if (Colorize)
                    {
                        hSprite.Color(hitobject.StartTime, hitobject.Color);
                    }
                }


                if (hitobject is OsuSlider)
                {
                    var timestep  = Beatmap.GetTimingPointAt((int)hitobject.StartTime).BeatDuration / BeatDivisor;
                    var startTime = hitobject.StartTime;
                    while (true)
                    {
                        var endTime = startTime + timestep;

                        var complete = hitobject.EndTime - endTime < 5;
                        if (complete)
                        {
                            endTime = hitobject.EndTime;
                        }

                        var startPosition = hSprite.PositionAt(startTime);
                        hSprite.Move(startTime, endTime, startPosition, hitobject.PositionAtTime(endTime));

                        if (complete)
                        {
                            break;
                        }
                        startTime += timestep;
                    }
                }
                prevObject = hitobject;
            }
        }