Esempio n. 1
0
        public override void Generate()
        {
            bool[] boolArr = new bool[8];
            for (int i = 0; i < boolArr.Length; i++)
            {
                boolArr[i] = true; // initialize all to true
            }

            for (int i = 0; i < numIterations; i++)
            {
                double    newStartTime = startTime + i * measureLength * 2;
                OsbSprite sprite       = findValidEntry(boolArr);
                int       height       = 160;

                sprite.Fade(OsbEasing.InExpo, newStartTime - measureLength / 16, newStartTime, 0, 1);
                sprite.Move(OsbEasing.InExpo, newStartTime - measureLength / 16, newStartTime, 150, height, 110, height);
                sprite.Move(newStartTime, newStartTime + 2 * measureLength - measureLength / 4, sprite.PositionAt(newStartTime), 100, height);
                sprite.Move(
                    OsbEasing.InExpo,
                    newStartTime + 2 * measureLength - measureLength / 4,
                    newStartTime + 2 * measureLength - measureLength / 8,
                    sprite.PositionAt(newStartTime + 2 * measureLength - measureLength / 4),
                    60,
                    height
                    );
                sprite.Fade(OsbEasing.InExpo, newStartTime + 2 * measureLength - measureLength / 4, newStartTime + 2 * measureLength - measureLength / 8, 1, 0);
            }
        }
Esempio n. 2
0
        public override void Generate()
        {
            var       layer = GetLayer("gears");
            OsbSprite gear  = layer.CreateSprite("sb/gears/gear" + gearNumber + ".png", OsbOrigin.Centre);

            gear.Scale(0, scale);
            gear.Move(startTime - beatLength / 2, xPos, yPos);
            gear.Rotate(0, Math.PI * initialRotation);
            gear.Fade(OsbEasing.InExpo, startTime - beatLength / 2, startTime, 0, 1);
            gear.Rotate(startTime - beatLength / 2, endTime, initialRotation, initialRotation + Math.PI * rotationAmount * (clockwise ? -1 : 1));

            if (fall)
            {
                Random rnd  = new Random();
                double newX = xPos + (clockwise ? 1 : -1) * (rnd.Next(20));
                double newY = yPos + rnd.Next(30, 60);
                gear.Move(OsbEasing.OutCirc, fallTime, collapseTime, gear.PositionAt(fallTime), newX, newY);
                gear.Move(
                    OsbEasing.OutCirc,
                    collapseTime,
                    endTime,
                    gear.PositionAt(collapseTime),
                    newX + (clockwise ? 1 : -1) * (60 + rnd.Next(60)),
                    newY + 20 + rnd.Next(20)
                    );
            }

            gear.Fade(OsbEasing.OutExpo, endTime - beatLength / 2, endTime, 1, 0);
        }
Esempio n. 3
0
 // Makes the letters appear one by one
 public void setupTitle(OsbSprite sprite, int time, Vector2 position)
 {
     sprite.Scale(13, 0.6);
     sprite.Fade(13, 1583 - 200, 1, 1);
     sprite.Fade(1583 - 200, 1583, 1, 0);
     sprite.Move(OsbEasing.OutCirc, time, time + 250, position, position + new Vector2(0, -50));
 }
Esempio n. 4
0
 public void ApplyTo(OsbSprite sprite)
 {
     foreach (var c in commands)
     {
         sprite.Move(c.Easing, c.StartTime, c.EndTime, c.StartValue, c.EndValue);
     }
 }
Esempio n. 5
0
        private void convertToCommands(OsbSprite sprite, double?startTime, double?endTime, double timeOffset, bool loopable)
        {
            var startStateTime = loopable ? (startTime ?? StartState.Time) + timeOffset : (double?)null;
            var endStateTime   = loopable ? (endTime ?? EndState.Time) + timeOffset : (double?)null;

            finalPositions.ForEachPair((start, end) => sprite.Move(start.Time, end.Time, start.Value, end.Value), new Vector2(320, 240),
                                       p => new Vector2((float)Math.Round(p.X, PositionDecimals), (float)Math.Round(p.Y, PositionDecimals)), startStateTime, loopable: loopable);
            var useVectorScaling = finalScales.Any(k => k.Value.X != k.Value.Y);

            finalScales.ForEachPair((start, end) =>
            {
                if (useVectorScaling)
                {
                    sprite.ScaleVec(start.Time, end.Time, start.Value, end.Value);
                }
                else
                {
                    sprite.Scale(start.Time, end.Time, start.Value.X, end.Value.X);
                }
            }, Vector2.One, s => new Vector2((float)Math.Round(s.X, ScaleDecimals), (float)Math.Round(s.Y, ScaleDecimals)), startStateTime, loopable: loopable);
            finalRotations.ForEachPair((start, end) => sprite.Rotate(start.Time, end.Time, start.Value, end.Value), 0,
                                       r => (float)Math.Round(r, RotationDecimals), startStateTime, loopable: loopable);
            finalColors.ForEachPair((start, end) => sprite.Color(start.Time, end.Time, start.Value, end.Value), CommandColor.White,
                                    c => CommandColor.FromRgb(c.R, c.G, c.B), startStateTime, loopable: loopable);
            finalOpacities.ForEachPair((start, end) => sprite.Fade(start.Time, end.Time, start.Value, end.Value), -1,
                                       o => (float)Math.Round(o, OpacityDecimals), startStateTime, endStateTime, loopable: loopable);

            flipH.ForEachFlag((fromTime, toTime) => sprite.FlipH(fromTime, toTime));
            flipV.ForEachFlag((fromTime, toTime) => sprite.FlipV(fromTime, toTime));
            additive.ForEachFlag((fromTime, toTime) => sprite.Additive(fromTime, toTime));
        }
Esempio n. 6
0
        public override void Generate()
        {
            OsbSprite sprite = GetLayer(LayerName).CreateSprite(FilePath);

            sprite.Scale(ScaleEasing, StartTime, StartTime + ScaleTime, TransformBeginScale, TransformEndScale);
            sprite.Fade(FadeOutEasing, StartTime, StartTime + FadeOutTime, 0, 1);
            sprite.Fade(FadeInEasing, EndTime - FadeInTime, EndTime, 1, 0);
            sprite.Move(OsbEasing.None, StartMoveTime, KeepMoveTime + StartMoveTime, StartMovePosition, EndMovePosition);
        }
Esempio n. 7
0
        public static OsbSprite moveScaleAndFadeIn(string path, double startTime, double endTime, double x, double y, StoryboardLayer layer)
        {
            OsbSprite sprite = layer.CreateSprite(path, OsbOrigin.Centre);

            sprite.Move(startTime, x, y);
            sprite.Scale(startTime, Constants.screenScale);
            sprite.Fade(OsbEasing.OutSine, startTime, startTime + Constants.beatLength / 2, 0, 1);
            return(sprite);
        }
        private void zoomEffect(OsbSprite sprite, double startTime)
        {
            var center  = new Vector2(320f, 240f);
            var endTime = startTime + Constants.beatLength * 1.5;
            var pos     = Vector2.Subtract(center, ZoomChange);

            sprite.Move(startTime, endTime, sprite.PositionAt(startTime).X, sprite.PositionAt(startTime).Y, center.X + pos.X, center.Y + pos.Y);
            sprite.Scale(startTime, endTime, sprite.ScaleAt(startTime).X, 2.2);
            sprite.Rotate(OsbEasing.InCirc, startTime, endTime, 0, -Math.PI / 4);
        }
Esempio n. 9
0
                // Goal for this one is to create that sort of camera-moving effect.
                // Maybe do something with extremely subtle easings and light movements.
                public static void ShakeSubtle(OsbSprite sprite, int startTime, int endTime, Vector2 variance, int points = 20)
                {
                    var step = (endTime - startTime) / (float)points;

                    for (float i = startTime; i < endTime; i += step)
                    {
                        var pointB = (Vector2)sprite.PositionAt(startTime);
                        var pointA = pointB + new Vector2((float)(StoryboardObjectGenerator.Current.Random(0, variance.X) - variance.X / 2), (float)(StoryboardObjectGenerator.Current.Random(0, variance.Y) - variance.Y / 2));
                        sprite.Move((OsbEasing)StoryboardObjectGenerator.Current.Random(0, Enum.GetNames(typeof(OsbEasing)).Length), i, i + step, pointA, pointB);
                    }
                }
        private OsbSprite floatingEffect(double startTime, float moveX, float moveY, OsbSprite sprite)
        {
            var endTime = startTime + 1818;

            sprite.Move(
                startTime, endTime,
                sprite.PositionAt(startTime).X, sprite.PositionAt(startTime).Y,
                sprite.PositionAt(startTime).X + moveX, sprite.PositionAt(startTime).Y + moveY
                );
            return(sprite);
        }
Esempio n. 11
0
            public void click(int time, string notePlayed)
            {
                body.ColorHsb(2526, 0, 0, 1);
                top.ColorHsb(2526, 0, 0, 1);
                bottom.ColorHsb(2526, 0, 0, 1);
                float     decalage = (float)(25 * scale / 0.1);
                OsbEasing easeOut  = OsbEasing.OutExpo;
                OsbEasing easeIn   = OsbEasing.None;

                if (notePlayed.Contains('4'))
                {
                    body.ColorHsb(time, time + 350, 0, 1, 1, 0, 0, 1);
                    top.ColorHsb(time, time + 350, 0, 1, 1, 0, 0, 1);
                    bottom.ColorHsb(time, time + 350, 0, 1, 1, 0, 0, 1);
                }
                if (notePlayed.Contains('2'))
                {
                    body.ColorHsb(time, time + 350, 120, 1, 1, 120, 0, 1);
                    top.ColorHsb(time, time + 350, 120, 1, 1, 120, 0, 1);
                    bottom.ColorHsb(time, time + 350, 120, 1, 1, 120, 0, 1);
                }
                if (up)
                {
                    top.Move(easeOut, time, time + 100, position - new Vector2(0, scale * 100), position - new Vector2(0, scale * 100) - new Vector2(0, decalage));
                    top.Move(easeIn, time + 100, time + 250, position - new Vector2(0, decalage) - new Vector2(0, scale * 100), position - new Vector2(0, scale * 100));
                    body.ScaleVec(easeOut, time, time + 100, scale, scale / 2, scale, (decalage + scale * 100) / 200.0);
                    body.ScaleVec(easeIn, time + 100, time + 250, scale, (decalage + scale * 100) / 200.0, scale, scale / 2);
                }
                else
                {
                    bottom.Move(easeOut, time, time + 100, position + new Vector2(0, scale * 100), position + new Vector2(0, scale * 100) + new Vector2(0, decalage));
                    bottom.Move(easeIn, time + 100, time + 250, position + new Vector2(0, decalage) + new Vector2(0, scale * 100), position + new Vector2(0, scale * 100));
                    body.ScaleVec(easeOut, time, time + 100, scale, scale / 2, scale, (decalage + scale * 100) / 200.0);
                    body.ScaleVec(easeIn, time + 100, time + 250, scale, (decalage + scale * 100) / 200.0, scale, scale / 2);
                }
            }
        public void ApplyCurrentList(int start_time, int end_time)
        {
            for (int i = 0; i < point_list.Count - 1; i++)
            {
                Vector2   cur_position = point_list[i], next_position = point_list[i + 1];
                OsbSprite cur_sprite = sprite_list[i], next_sprite = sprite_list[i + 1];

                float angle = (float)(Math.Atan((cur_position.Y - next_position.Y) / (cur_position.X - next_position.X)) + 0.5 * Math.PI);

                float scale = BaseHeightOffset + (float)(Math.Sqrt(Math.Pow(cur_position.X - next_position.X, 2) + Math.Pow(cur_position.Y - next_position.Y, 2))) / 126.0f;

                cur_sprite.Rotate(OsbEasing.None, start_time, end_time, angle, angle);
                cur_sprite.Move(OsbEasing.None, start_time, end_time, cur_position, cur_position);
                cur_sprite.ScaleVec(OsbEasing.None, start_time, end_time, BaseWidthScale, scale, BaseWidthScale, scale);
            }
        }
        public override void Generate()
        {
            layer        = GetLayer("Background");
            beatduration = Beatmap.GetTimingPointAt(2000).BeatDuration;

            for (int x = 0; x < 7; x++)
            {
                for (int y = 0; y < 17; y++)
                {
                    OsbSprite circle = layer.CreateSprite("sb/circle.png");
                    circle.Scale(2211, 0.07);
                    circle.Fade(2211, 2526, 0, 0.25);
                    circle.Move(2211, 12578, 395 + x * 66 + 2 * y, 0 + y * 50 + x, 395 + x * 66 + 2 * y, 0 + y * 50 + x - 270);
                    circle.Fade(11950, 11950 + 420, 0.25, 0);
                }
            }
        }
Esempio n. 14
0
        public void FollowCurve(OsbSprite sprite, float start = 0f, float end = 1f, bool move = true, bool rotate = false)
        {
            var last          = StartTime;
            var startPosition = PositionAt(start);

            for (int i = 1; i < StepSize; i++)
            {
                var time       = StartTime + i * SegmentDelay;
                var percentage = i / (float)StepSize;
                var position   = PositionAt(Math.Max(start, Math.Min(end, percentage)));

                if (start >= percentage)
                {
                    last = time;
                    continue;
                }

                if (move)
                {
                    sprite.Move(last, time, sprite.PositionAt(last), position);
                }

                if (rotate)
                {
                    if (move)
                    {
                        sprite.Rotate(last, time, sprite.RotationAt(last), RotationAt(Math.Min(end, percentage)));
                    }
                    else
                    {
                        sprite.Rotate(last, time, sprite.RotationAt(last), Math.Atan2(position.Y - startPosition.Y, position.X - startPosition.X));
                        sprite.ScaleVec(last, time, sprite.ScaleAt(last), (startPosition - position).Length + 2, 1);
                    }
                }

                if (percentage >= end)
                {
                    break;
                }

                last = time;
            }
        }
Esempio n. 15
0
 public static void Move3D(
     this OsbSprite sprite,
     OsbEasing easing,
     double startTime,
     double endTime,
     Vector3 startPosition,
     Vector3 endPosition,
     float fovInDegrees,
     Action <OsbSprite, Vectors.ProjectionResult, Vectors.ProjectionResult> secondaryAction = null
     )
 {
     Vectors.ProjectionResult p1 = Vectors.project(startPosition, Vectors.ScreenSize, Vectors.Centre, fovInDegrees);
     Vectors.ProjectionResult p2 = Vectors.project(endPosition, Vectors.ScreenSize, Vectors.Centre, fovInDegrees);
     if (p1.screenSpaceVector != p2.screenSpaceVector)
     {
         sprite.Move(easing, startTime, endTime, p1.screenSpaceVector, p2.screenSpaceVector);
     }
     if (secondaryAction != null)
     {
         secondaryAction(sprite, p1, p2); // for handling scale, fade, colour, etc. based on coordinates, distance to camera, etc.
     }
 }
Esempio n. 16
0
        public void sinewaver(OsbSprite wave, int startTime, int endTime)
        {
            var       layer = GetLayer("Main");
            OsbSprite wave2 = layer.CreateSprite("sb/sinewave.png", OsbOrigin.Centre);

            wave.Scale(startTime, 0.75);
            wave2.Scale(startTime, 0.75);
            wave.Fade(startTime, startTime, 0.5, 0.5);
            wave2.Fade(startTime, startTime, 0.5, 0.5);
            for (int i = startTime; i <= endTime - 200; i += 1000)
            {
                wave.Move(i, i + 1000, -130, 240, 190, 240);
                wave2.Move(i, i + 1000, 510, 240, 830, 240);
            }
            wave.Fade(endTime, endTime, 0, 0);
            wave2.Fade(endTime, endTime, 0, 0);

            if (endTime > 173703)
            {
                wave.Fade(173248, 174157, 0.5, 0);
                wave2.Fade(173248, 174157, 0.5, 0);
            }
        }
Esempio n. 17
0
      public override void Generate()
      {
          var hitobjectLayer = GetLayer("");
          var startPos       = Beatmap.HitObjects.Where((o) => o.EndTime > StartTime).First().Position;

          ArrayList cursorTrail = new ArrayList();

          for (int i = 0; i < trailCount; i++)
          {
              var trail = hitobjectLayer.CreateSprite("sb/particle.png", OsbOrigin.Centre, startPos);

              //trail.Fade(StartTime, 0.33);
              trail.Additive(StartTime, EndTime);
              trail.Scale(StartTime, 1 - i * 0.04);

              cursorTrail.Add(trail);
          }

          var hSprite = hitobjectLayer.CreateSprite(Line, OsbOrigin.Centre, new Vector2(320, startPos.Y));
          //var outline = hitobjectLayer.CreateSprite(OutlinePath, OsbOrigin.Centre, startPos);
          var cursor = hitobjectLayer.CreateSprite(CursorPath, OsbOrigin.Centre, startPos);

          hSprite.ScaleVec(StartTime, 854 / 2, 15);
          hSprite.Fade(StartTime, 0.1);
          //outline.Scale(StartTime,0.04);
          //outline.Fade(StartTime,0.2);
          cursor.Scale(StartTime, SpriteScale);
          cursor.Additive(StartTime, EndTime);

          OsuHitObject prevObject  = null;
          var          circleArray = new List <int>();
          var          lineArray   = new List <int>();

          //circle and line
          circleArray.Add(StartTime);
          for (int j = 0; j <= 3; j += 1)
          {
              double c = StartTime + tick(0, 0.5) + j * tick(0, (double)1 / (double)8);
              for (int m = 1; m <= 4; m += 1)
              {
                  circleArray.Add((int)Math.Round(c));
                  lineArray.Add((int)Math.Round(c + tick(0, 2)));
                  if (j == 3 && m >= 3)
                  {
                      continue;
                  }
                  lineArray.Add((int)Math.Round(c + tick(0, 2) * 2));
                  c += tick(0, (double)2 / (double)3);
              }
          }

          foreach (OsuHitObject hitobject in Beatmap.HitObjects)
          {
              if ((StartTime != 0 || EndTime != 0) &&
                  (hitobject.StartTime < StartTime - 5 || EndTime - 5 <= hitobject.StartTime))
              {
                  continue;
              }
              if (circleArray.Contains((int)hitobject.StartTime) || circleArray.Contains((int)hitobject.StartTime + 1) || circleArray.Contains((int)hitobject.StartTime - 1))
              {
                  var dropCircle = hitobjectLayer.CreateSprite("sb/q2.png", OsbOrigin.Centre, hitobject.Position);
                  dropCircle.Scale(hitobject.StartTime, hitobject.StartTime + 200, 0, 0.4);
                  dropCircle.Fade(hitobject.StartTime, hitobject.StartTime + 200, 1, 0);
              }
              if (lineArray.Contains((int)hitobject.StartTime) || lineArray.Contains((int)hitobject.StartTime + 1) || lineArray.Contains((int)hitobject.StartTime - 1))
              {
                  var dropLine = hitobjectLayer.CreateSprite("sb/pl.png", OsbOrigin.Centre, hitobject.Position);
                  dropLine.ScaleVec(hitobject.StartTime, hitobject.StartTime + 200, 8, 100, 1, 100);
                  dropLine.Rotate(hitobject.StartTime, MathHelper.DegreesToRadians(Random(-7, 7)));
                  dropLine.Fade(hitobject.StartTime, hitobject.StartTime + 200, 0.6, 0);
                  dropLine.Color(hitobject.StartTime, hitobject.Color);
              }
              if (prevObject != null)
              {
                  hSprite.MoveY(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition.Y, hitobject.Position.Y);
                  //outline.Move(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition, hitobject.Position);
                  cursor.Move(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition, hitobject.Position);
                  //hSprite.Scale(OsbEasing.In, hitobject is OsuSlider ? hitobject.StartTime : prevObject.EndTime, hitobject.EndTime, SpriteScale, SpriteScale * 0.6);

                  for (int i = 0; i < trailCount; i++)
                  {
                      OsbSprite trail = (OsbSprite)cursorTrail[i];
                      trail.Move(prevObject.EndTime + (i + 1) * 4, hitobject.StartTime + (i + 1) * 4, prevObject.EndPosition, hitobject.Position);
                      trail.Color(hitobject.StartTime + (i + 1) * 4, hitobject.Color);
                      trail.Fade(hitobject.StartTime, 0.33);
                  }
              }
              cursor.Color(hitobject.StartTime, hitobject.Color);

              if (hitobject is OsuSlider)
              {
                  var timestep  = Beatmap.GetTimingPointAt((int)hitobject.StartTime).BeatDuration / BeatDivisor;
                  var startTime = hitobject.StartTime;
                  var slider    = (OsuSlider)hitobject;
                  Log(slider.Additions.ToString());


                  while (true)
                  {
                      var endTime = startTime + timestep;

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

                      var startPosition = hSprite.PositionAt(startTime);
                      var cursorPos     = cursor.PositionAt(startTime);
                      hSprite.MoveY(startTime, endTime, startPosition.Y, hitobject.PositionAtTime(endTime).Y);
                      //outline.Move(startTime, endTime, startPosition, hitobject.PositionAtTime(endTime));
                      cursor.Move(startTime, endTime, cursorPos, hitobject.PositionAtTime(endTime));

                      for (int i = 0; i < trailCount; i++)
                      {
                          OsbSprite trail = (OsbSprite)cursorTrail[i];
                          trail.Move(startTime + (i + 1) * 4, endTime + (i + 1) * 4, cursorPos, hitobject.PositionAtTime(endTime));
                      }

                      if (complete)
                      {
                          break;
                      }
                      startTime += timestep;
                  }
              }
              prevObject = hitobject;
          }
      }
Esempio n. 18
0
 public static void Move(this OsbSprite sprite, Vector2 position)
 => sprite.Move(sprite.CommandsStartTime, position);
Esempio n. 19
0
        private void parseEventsSection(StreamReader reader)
        {
            OsbSprite osbSprite      = null;
            var       inCommandGroup = false;

            reader.ParseSectionLines(line =>
            {
                if (line.StartsWith("//"))
                {
                    return;
                }

                var depth = 0;
                while (line.Substring(depth).StartsWith(" "))
                {
                    ++depth;
                }

                var trimmedLine = applyVariables(line.Trim());
                var values      = trimmedLine.Split(',');

                if (inCommandGroup && depth < 2)
                {
                    osbSprite.EndGroup();
                    inCommandGroup = false;
                }

                switch (values[0])
                {
                case "Sprite":
                    {
                        var layerName = values[1];
                        var origin    = (OsbOrigin)Enum.Parse(typeof(OsbOrigin), values[2]);
                        var path      = removePathQuotes(values[3]);
                        var x         = float.Parse(values[4], CultureInfo.InvariantCulture);
                        var y         = float.Parse(values[5], CultureInfo.InvariantCulture);
                        osbSprite     = GetLayer(layerName).CreateSprite(path, origin, new Vector2(x, y));
                    }
                    break;

                case "Animation":
                    {
                        var layerName  = values[1];
                        var origin     = (OsbOrigin)Enum.Parse(typeof(OsbOrigin), values[2]);
                        var path       = removePathQuotes(values[3]);
                        var x          = float.Parse(values[4], CultureInfo.InvariantCulture);
                        var y          = float.Parse(values[5], CultureInfo.InvariantCulture);
                        var frameCount = int.Parse(values[6]);
                        var frameDelay = double.Parse(values[7], CultureInfo.InvariantCulture);
                        var loopType   = (OsbLoopType)Enum.Parse(typeof(OsbLoopType), values[8]);
                        osbSprite      = GetLayer(layerName).CreateAnimation(path, frameCount, frameDelay, loopType, origin, new Vector2(x, y));
                    }
                    break;

                case "Sample":
                    {
                        var time      = double.Parse(values[1], CultureInfo.InvariantCulture);
                        var layerName = values[2];
                        var path      = removePathQuotes(values[3]);
                        var volume    = float.Parse(values[4], CultureInfo.InvariantCulture);
                        GetLayer(layerName).CreateSample(path, time, volume);
                    }
                    break;

                case "T":
                    {
                        var triggerName = values[1];
                        var startTime   = double.Parse(values[2], CultureInfo.InvariantCulture);
                        var endTime     = double.Parse(values[3], CultureInfo.InvariantCulture);
                        var groupNumber = values.Length > 4 ? int.Parse(values[4]) : 0;
                        osbSprite.StartTriggerGroup(triggerName, startTime, endTime, groupNumber);
                        inCommandGroup = true;
                    }
                    break;

                case "L":
                    {
                        var startTime = double.Parse(values[1], CultureInfo.InvariantCulture);
                        var loopCount = int.Parse(values[2]);
                        osbSprite.StartLoopGroup(startTime, loopCount);
                        inCommandGroup = true;
                    }
                    break;

                default:
                    {
                        if (string.IsNullOrEmpty(values[3]))
                        {
                            values[3] = values[2];
                        }

                        var commandType = values[0];
                        var easing      = (OsbEasing)int.Parse(values[1]);
                        var startTime   = double.Parse(values[2], CultureInfo.InvariantCulture);
                        var endTime     = double.Parse(values[3], CultureInfo.InvariantCulture);

                        switch (commandType)
                        {
                        case "F":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.Fade(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "S":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.Scale(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "V":
                            {
                                var startX = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var startY = double.Parse(values[5], CultureInfo.InvariantCulture);
                                var endX   = values.Length > 6 ? double.Parse(values[6], CultureInfo.InvariantCulture) : startX;
                                var endY   = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startY;
                                osbSprite.ScaleVec(easing, startTime, endTime, startX, startY, endX, endY);
                            }
                            break;

                        case "R":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.Rotate(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "M":
                            {
                                var startX = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var startY = double.Parse(values[5], CultureInfo.InvariantCulture);
                                var endX   = values.Length > 6 ? double.Parse(values[6], CultureInfo.InvariantCulture) : startX;
                                var endY   = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startY;
                                osbSprite.Move(easing, startTime, endTime, startX, startY, endX, endY);
                            }
                            break;

                        case "MX":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.MoveX(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "MY":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.MoveY(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "C":
                            {
                                var startX = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var startY = double.Parse(values[5], CultureInfo.InvariantCulture);
                                var startZ = double.Parse(values[6], CultureInfo.InvariantCulture);
                                var endX   = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startX;
                                var endY   = values.Length > 8 ? double.Parse(values[8], CultureInfo.InvariantCulture) : startY;
                                var endZ   = values.Length > 9 ? double.Parse(values[9], CultureInfo.InvariantCulture) : startZ;
                                osbSprite.Color(easing, startTime, endTime, startX / 255f, startY / 255f, startZ / 255f, endX / 255f, endY / 255f, endZ / 255f);
                            }
                            break;

                        case "P":
                            {
                                var type = values[4];
                                switch (type)
                                {
                                case "A": osbSprite.Additive(startTime, endTime); break;

                                case "H": osbSprite.FlipH(startTime, endTime); break;

                                case "V": osbSprite.FlipV(startTime, endTime); break;
                                }
                            }
                            break;
                        }
                    }
                    break;
                }
            }, false);

            if (inCommandGroup)
            {
                osbSprite.EndGroup();
                inCommandGroup = false;
            }
        }
Esempio n. 20
0
        public override void Generate()
        {
            var HitObjectlayer = GetLayer("HitObject");
            var layer          = GetLayer("CalmPart");

            var BGbitmap = GetMapsetBitmap(BgBlur);

            var backgroundBlur = layer.CreateSprite(BgBlur, OsbOrigin.Centre);

            backgroundBlur.Scale(StartTime, 480.0f / BGbitmap.Height);
            backgroundBlur.Fade(StartTime, 0.8);
            backgroundBlur.Fade(EndTime, EndTime + tick(0, 1), 1, 0);

            var crazy = layer.CreateSprite(CrazyBG, OsbOrigin.Centre);

            crazy.Scale(StartTime, 480.0f / BGbitmap.Height);
            var CrazyBeat = new List <int>();

            for (double x = StartTime; x < 193460; x += tick(0, (double)1 / (double)4))
            {
                CrazyBeat.Add((int)x);
                CrazyBeat.Add((int)(x + tick(0, 1)));
                CrazyBeat.Add((int)(x + tick(0, 1) + tick(0, 2)));
                CrazyBeat.Add((int)(x + tick(0, 1) + tick(0, 2) + tick(0, 1)));
                CrazyBeat.Add((int)(x + tick(0, (double)1 / (double)3)));
            }
            for (double x = 193464; x < 196287; x += tick(0, 2))
            {
                CrazyBeat.Add((int)x);
            }
            var CrazyBeatQuatro = new List <int>();

            for (double x = 196287; x <= EndTime; x += tick(0, 4))
            {
                CrazyBeatQuatro.Add((int)x);
            }
            foreach (int time in CrazyBeat)
            {
                crazy.Fade((OsbEasing)2, time, time + tick(0, 2), 0.3, 0);
            }
            crazy.Fade(196287, EndTime + tick(0, 1), 0.3, 0);

            var flash = layer.CreateSprite(Flash, OsbOrigin.Centre);

            flash.Fade(StartTime, 0.6);
            flash.Fade(EndTime, 0);
            flash.Additive(StartTime, EndTime);

            var vig = layer.CreateSprite(BGVig, OsbOrigin.Centre);

            vig.Fade(StartTime, 1);
            vig.Fade(EndTime, EndTime + tick(0, 1), 1, 0);
            var bitmapVig = GetMapsetBitmap(BGVig);

            vig.Scale(StartTime, 540.0f / bitmapVig.Height);

            var startPos = Beatmap.HitObjects.Where((o) => o.EndTime > StartTime).First().Position;

            ArrayList cursorTrail = new ArrayList();

            for (int i = 0; i < trailCount; i++)
            {
                var trail = HitObjectlayer.CreateSprite("sb/particle.png", OsbOrigin.Centre, startPos);

                //trail.Fade(StartTime, 0.33);
                trail.Scale(StartTime, 1 - i * 0.04);

                cursorTrail.Add(trail);
            }

            var hSprite = HitObjectlayer.CreateSprite(Line, OsbOrigin.Centre, new Vector2(320, startPos.Y));

            hSprite.Color(StartTime, Color4.Black);
            var cursor = HitObjectlayer.CreateSprite(CursorPath, OsbOrigin.Centre, startPos);

            hSprite.ScaleVec(OsbEasing.OutCirc, StartTime, StartTime + tick(0, 1), 854 / 2, 854 / 2, 854 / 2, 15);
            hSprite.Fade(OsbEasing.InCubic, StartTime, StartTime + tick(0, 0.75), 1, 1);
            cursor.Scale(StartTime, SpriteScale);
            cursor.Additive(StartTime, EndTime);

            OsuHitObject prevObject  = null;
            var          circleArray = new List <int>();

            /*
             * hSprite.Fade(28993, 28993+400, 0.6, 0.1); //n tem
             * hSprite.Fade(29522, 29522+400, 0.6, 0.1); //n tem
             * hSprite.Fade(30405, 30405+400, 0.6, 0.1); //n tem
             * hSprite.Fade(31816, 31816+400, 0.6, 0.1); //n tem
             * hSprite.Fade(33228, 33228+400, 0.6, 0.1); //n tem
             * hSprite.Fade(34640, 34640+200, 0.6, 0.2); //n tem
             * hSprite.Fade(34905, 34905+200, 0.7, 0.4); //n tem
             * hSprite.Fade(35169, 35169+200, 0.8, 1); //n tem
             * hSprite.ScaleVec(OsbEasing.InExpo, 34640, 35346, 15, 854/2, 500, 854/2);*/


            foreach (OsuHitObject hitobject in Beatmap.HitObjects)
            {
                if ((StartTime != 0 || EndTime != 0) &&
                    (hitobject.StartTime < StartTime - 5 || EndTime - 5 <= hitobject.StartTime))
                {
                    continue;
                }
                if (CrazyBeat.Contains((int)hitobject.StartTime) || CrazyBeat.Contains((int)hitobject.StartTime + 1) || CrazyBeat.Contains((int)hitobject.StartTime - 1) || CrazyBeat.Contains((int)hitobject.StartTime - 2) || CrazyBeat.Contains((int)hitobject.StartTime + 2))
                {
                    var dropCircle = HitObjectlayer.CreateSprite("sb/q2.png", OsbOrigin.Centre, hitobject.Position);
                    dropCircle.Color(hitobject.StartTime, Color4.Black);
                    dropCircle.Scale(hitobject.StartTime, hitobject.StartTime + 1000, 0, 1);
                    dropCircle.Fade(hitobject.StartTime, hitobject.StartTime + 400, 1, 0);
                }
                if (CrazyBeatQuatro.Contains((int)hitobject.StartTime) || CrazyBeatQuatro.Contains((int)hitobject.StartTime + 1) || CrazyBeatQuatro.Contains((int)hitobject.StartTime - 1) || CrazyBeatQuatro.Contains((int)hitobject.StartTime - 2) || CrazyBeatQuatro.Contains((int)hitobject.StartTime + 2))
                {
                    var dropLine = HitObjectlayer.CreateSprite("sb/pixel.png", OsbOrigin.Centre, hitobject.Position);
                    dropLine.ScaleVec(hitobject.StartTime, hitobject.StartTime + tick(0, 1), 2, 854 / 2, 0, 854 / 2);
                    dropLine.Color(hitobject.StartTime, Color4.Black);
                    dropLine.Fade(hitobject.StartTime, hitobject.StartTime + tick(0, 1), 1, 0);
                    dropLine.Rotate(hitobject.StartTime, hitobject.StartTime + tick(0, 1), MathHelper.DegreesToRadians(Random(-7, 7)), MathHelper.DegreesToRadians(Random(-7, 7)));
                }
                if (prevObject != null)
                {
                    hSprite.MoveY(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition.Y, hitobject.Position.Y);
                    //outline.Move(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition, hitobject.Position);
                    cursor.Move(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition, hitobject.Position);
                    //hSprite.Scale(OsbEasing.In, hitobject is OsuSlider ? hitobject.StartTime : prevObject.EndTime, hitobject.EndTime, SpriteScale, SpriteScale * 0.6);

                    for (int i = 0; i < trailCount; i++)
                    {
                        OsbSprite trail = (OsbSprite)cursorTrail[i];
                        trail.Move(prevObject.EndTime + (i + 1) * 20, hitobject.StartTime + (i + 1) * 20, prevObject.EndPosition, hitobject.Position);
                        trail.Color(hitobject.StartTime + (i + 1) * 20, Color4.Black);
                        trail.Fade(hitobject.StartTime, 0.33);
                    }
                }
                cursor.Color(hitobject.StartTime, Color4.White);

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

                    while (true)
                    {
                        var endTime = startTime + timestep;

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

                        var startPosition = hSprite.PositionAt(startTime);
                        var cursorPos     = cursor.PositionAt(startTime);
                        hSprite.MoveY(startTime, endTime, startPosition.Y, hitobject.PositionAtTime(endTime).Y);
                        //outline.Move(startTime, endTime, startPosition, hitobject.PositionAtTime(endTime));
                        cursor.Move(startTime, endTime, cursorPos, hitobject.PositionAtTime(endTime));

                        for (int i = 0; i < trailCount; i++)
                        {
                            OsbSprite trail = (OsbSprite)cursorTrail[i];
                            trail.Move(startTime + (i + 1) * 20, endTime + (i + 1) * 20, cursorPos, hitobject.PositionAtTime(endTime));
                        }

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

            var heartSprite = layer.CreateSprite(HeartGrow, OsbOrigin.Centre, new Vector2(320, 240));

            heartSprite.Scale((OsbEasing)6, 198228, 199111, 0.2, 20);
            heartSprite.ColorHsb((OsbEasing)6, 198228, 199111, 0, 1, 1, 0, 0, 1);
        }
 public void shift(Vector2 shifting, double time)
 {
     sprite.Move(OsbEasing.OutCirc, time, time + 1.75 * quatterBeat, position, position + shifting);
     position += shifting;
 }
        public override void Generate()
        {
            var HitObjectlayer = GetLayer("HitObject");
            var startPos       = Beatmap.HitObjects.Where((o) => o.EndTime > StartTime).First().Position;

            ArrayList cursorTrail = new ArrayList();

            for (int i = 0; i < trailCount; i++)
            {
                var trail = HitObjectlayer.CreateSprite("sb/particle.png", OsbOrigin.Centre, startPos);

                //trail.Fade(StartTime, 0.33);
                trail.Additive(StartTime, EndTime);
                trail.Scale(StartTime, 1 - i * 0.04);

                cursorTrail.Add(trail);
            }

            var hSprite = HitObjectlayer.CreateSprite(Line, OsbOrigin.Centre, new Vector2(startPos.X, 260));
            var cursor  = HitObjectlayer.CreateSprite(CursorPath, OsbOrigin.Centre, startPos);

            hSprite.ScaleVec(OsbEasing.OutCirc, StartTime, StartTime + tick(0, 1), 854 / 2, 854 / 2, 15, 854 / 2);
            hSprite.Fade(OsbEasing.InCubic, StartTime, StartTime + tick(0, 0.75), 1, 0.1);
            cursor.Scale(StartTime, SpriteScale);
            cursor.Additive(StartTime, EndTime);


            var lyric_hSprite = HitObjectlayer.CreateSprite(Line, OsbOrigin.Centre, new Vector2(585, 56));

            lyric_hSprite.ScaleVec(OsbEasing.OutCirc, 22640, 24052, 0, 380 / 2, 35, 380 / 2);
            lyric_hSprite.Rotate(22640, MathHelper.DegreesToRadians(96));
            lyric_hSprite.Fade(22640, 24052, 0, 0.2);
            lyric_hSprite.Fade(22640, 34640, 0.2, 0.2);
            lyric_hSprite.Fade(34640, 35346, 0.2, 1);
            lyric_hSprite.ScaleVec(OsbEasing.InCirc, 34640, 35346, 35, 380 / 2, 0, 2000 / 2);

            OsuHitObject prevObject  = null;
            var          circleArray = new List <int>();

            //circle and line
            circleArray.Add(24052);
            circleArray.Add(25464);
            circleArray.Add(26875);
            circleArray.Add(28287);
            circleArray.Add(28816);
            circleArray.Add(29169);
            circleArray.Add(29699);
            circleArray.Add(31464);
            circleArray.Add(32522);
            circleArray.Add(34287);
            circleArray.Add(34287);

            hSprite.Fade(28993, 28993 + 400, 0.6, 0.1); //n tem
            hSprite.Fade(29522, 29522 + 400, 0.6, 0.1); //n tem
            hSprite.Fade(30405, 30405 + 400, 0.6, 0.1); //n tem
            hSprite.Fade(31816, 31816 + 400, 0.6, 0.1); //n tem
            hSprite.Fade(33228, 33228 + 400, 0.6, 0.1); //n tem
            hSprite.Fade(34640, 34640 + 200, 0.6, 0.2); //n tem
            hSprite.Fade(34905, 34905 + 200, 0.7, 0.4); //n tem
            hSprite.Fade(35169, 35169 + 200, 0.8, 1);   //n tem
            hSprite.ScaleVec(OsbEasing.InExpo, 34640, 35346, 15, 854 / 2, 500, 854 / 2);


            foreach (OsuHitObject hitobject in Beatmap.HitObjects)
            {
                if ((StartTime != 0 || EndTime != 0) &&
                    (hitobject.StartTime < StartTime - 5 || EndTime - 5 <= hitobject.StartTime))
                {
                    continue;
                }
                if (circleArray.Contains((int)hitobject.StartTime) || circleArray.Contains((int)hitobject.StartTime + 1) || circleArray.Contains((int)hitobject.StartTime - 1))
                {
                    var dropCircle = HitObjectlayer.CreateSprite("sb/q2.png", OsbOrigin.Centre, hitobject.Position);
                    dropCircle.Scale(hitobject.StartTime, hitobject.StartTime + 1000, 0, 1);
                    dropCircle.Fade(hitobject.StartTime, hitobject.StartTime + 400, 1, 0);
                }
                if (prevObject != null)
                {
                    hSprite.MoveX(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition.X, hitobject.Position.X);
                    //outline.Move(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition, hitobject.Position);
                    cursor.Move(prevObject.EndTime, hitobject.StartTime, prevObject.EndPosition, hitobject.Position);
                    //hSprite.Scale(OsbEasing.In, hitobject is OsuSlider ? hitobject.StartTime : prevObject.EndTime, hitobject.EndTime, SpriteScale, SpriteScale * 0.6);

                    for (int i = 0; i < trailCount; i++)
                    {
                        OsbSprite trail = (OsbSprite)cursorTrail[i];
                        trail.Move(prevObject.EndTime + (i + 1) * 20, hitobject.StartTime + (i + 1) * 20, prevObject.EndPosition, hitobject.Position);
                        trail.Color(hitobject.StartTime + (i + 1) * 20, hitobject.Color);
                        trail.Fade(hitobject.StartTime, 0.33);
                    }
                }
                cursor.Color(hitobject.StartTime, hitobject.Color);

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

                    while (true)
                    {
                        var endTime = startTime + timestep;

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

                        var startPosition = hSprite.PositionAt(startTime);
                        var cursorPos     = cursor.PositionAt(startTime);
                        hSprite.MoveX(startTime, endTime, startPosition.X, hitobject.PositionAtTime(endTime).X);
                        //outline.Move(startTime, endTime, startPosition, hitobject.PositionAtTime(endTime));
                        cursor.Move(startTime, endTime, cursorPos, hitobject.PositionAtTime(endTime));

                        for (int i = 0; i < trailCount; i++)
                        {
                            OsbSprite trail = (OsbSprite)cursorTrail[i];
                            trail.Move(startTime + (i + 1) * 20, endTime + (i + 1) * 20, cursorPos, hitobject.PositionAtTime(endTime));
                        }

                        if (complete)
                        {
                            break;
                        }
                        startTime += timestep;
                    }
                }
                prevObject = hitobject;
            }
        }
Esempio n. 23
0
        public override void Generate()
        {
            var layer = GetLayer("");

            using (var pool = new OsbSpritePool(layer, "sb/sprites/toDown.png", OsbOrigin.Centre, (sprite, startTime, endTime) => {
                // This action runs for every sprite created from the pool, after all of them are created (AFTER the for loop below).

                // It is intended to set states common to every sprite:
                // In this exemple, this handles cases where all sprites will have the same color / opacity / scale / rotation / additive mode.

                // Note that the pool is in a using block, this is necessary to run this action.

                // Initial setup.
                sprite.Scale(27551, 0);
            }))

            {
                var timeStep = particleDuration / particleAmount;
                for (double startTime = 27551; startTime < 49369 - particleDuration; startTime += timeStep)
                {
                    var endTime = startTime + particleDuration;

                    // This is where sprites are created from the pool.
                    // Commands here are specific to each sprite.
                    var sprite = pool.Get(startTime, endTime);
                    var x      = Random(0, 640);
                    var y      = Random(0, 480);
                    while (x > 140 && x < 500 && y > 60 && y < 420)
                    {
                        x = Random(0, 640);
                        y = Random(0, 480);
                    }

                    var arrowCount = Random(3, 6);

                    List <OsbSprite> arrowList = new List <OsbSprite>();

                    while (arrowCount >= 0)
                    {
                        arrowList.Add(layer.CreateSprite("sb/sprites/toDown.png", OsbOrigin.Centre));
                        arrowCount--;
                    }

                    var loopAmount = Random(2, 5);

                    for (int i = 0; i < arrowList.Count; i++)
                    {
                        OsbSprite arrow = arrowList[i];


                        arrow.Scale(startTime, 0.2);

                        arrow.StartLoopGroup(0, loopAmount);

                        arrow.Fade(OsbEasing.InOutExpo, startTime, startTime + 300 + 2 * i, 0, 1);
                        arrow.Move(OsbEasing.InOutExpo, startTime, startTime + 300 + 2 * i, x, y, x, y + 10 + i * 15);

                        arrow.Fade(OsbEasing.InExpo, startTime + 300 + 2 * i, startTime + 600 + 2 * i, 1, 0);
                        arrow.Move(OsbEasing.InExpo, startTime + 300 + 2 * i, startTime + 600 + 2 * i, x, y + 10 + i * 15, x, y + 20 + i * 26);
                        arrow.EndGroup();
                    }
                }
            }
        }