Advertisement
Jiysea

Line hitobject highlighting

May 18th, 2022 (edited)
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.97 KB | None | 0 0
  1. public void FollowingHitObjects()
  2.         {
  3.             var light = new KeyframedOsbSprite(GetLayer("Light").CreateSprite("sb/pixel.png"));
  4.             light.Fade(204702, 1);
  5.             light.Color(204702, new Color4(255, 255, 255, 1));
  6.             light.ScaleVec(204702, new Vector2(30, 480));
  7.             light.Fade(234470, 0);
  8.  
  9.             Vector2 prevPosition = new Vector2(320, 240);
  10.  
  11.             double startTime = 204702;
  12.             double endTime = 234470;
  13.             double prevTime = startTime;
  14.             int timeDivisor = 8;
  15.             Color4 prevColour;
  16.  
  17.             foreach (var hitobject in Beatmap.HitObjects)
  18.             {
  19.                 if (hitobject is OsuSpinner)
  20.                     continue; // Restart for loop at next iteration.
  21.                 if ((hitobject.StartTime >= startTime || hitobject.EndTime >= startTime) && (hitobject.EndTime <= endTime || hitobject.StartTime <= endTime))
  22.                 {
  23.                     if (hitobject.StartTime == startTime || hitobject.EndTime == startTime)
  24.                     {
  25.                         var pos = hitobject.EndTime == startTime ? hitobject.EndPosition : hitobject.Position;
  26.                         light.MoveX(hitobject.StartTime, pos.X);
  27.                         prevPosition = pos;
  28.                         prevColour = hitobject.Color;
  29.                         light.Color(OsbEasing.OutQuint, prevTime, hitobject.StartTime, prevColour, hitobject.Color);
  30.                     }
  31.                     else
  32.                     {
  33.                         light.MoveX(OsbEasing.None, prevTime, hitobject.StartTime, prevPosition.X, hitobject.Position.X);
  34.                         prevPosition = hitobject.Position;
  35.                         prevColour = hitobject.Color;
  36.                         light.Color(OsbEasing.OutQuint, prevTime, hitobject.StartTime, prevColour, hitobject.Color);
  37.  
  38.                         if (hitobject is OsuSlider)
  39.                         {
  40.                             for (var time = hitobject.StartTime; time < hitobject.EndTime; time += Beatmap.GetTimingPointAt((int)hitobject.StartTime).BeatDuration / timeDivisor)
  41.                             {
  42.                                 Log($"prevPos = {prevPosition}\ntime = {time}");
  43.                                 var newPos = hitobject.PositionAtTime(time + Beatmap.GetTimingPointAt((int)hitobject.StartTime).BeatDuration / timeDivisor);
  44.                                 light.MoveX(OsbEasing.None, time, time + Beatmap.GetTimingPointAt((int)hitobject.StartTime).BeatDuration / timeDivisor, prevPosition.X, newPos.X);
  45.                                 prevPosition = newPos;
  46.                             }
  47.                         }
  48.  
  49.                         prevTime = hitobject is OsuSlider ? hitobject.EndTime : hitobject.StartTime;
  50.                         prevPosition = hitobject is OsuSlider ? hitobject.EndPosition : hitobject.Position;
  51.  
  52.                     }
  53.                 }
  54.             }
  55.             light.FinaliseKeyframes();
  56.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement