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); } }
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); }
// 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)); }
public void ApplyTo(OsbSprite sprite) { foreach (var c in commands) { sprite.Move(c.Easing, c.StartTime, c.EndTime, c.StartValue, c.EndValue); } }
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)); }
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); }
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); }
// 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); }
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); } } }
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; } }
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. } }
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); } }
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; } }
public static void Move(this OsbSprite sprite, Vector2 position) => sprite.Move(sprite.CommandsStartTime, position);
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; } }
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; } }
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(); } } } }