public override void Generate() { List <OsbSprite> LyricsSprites = new List <OsbSprite>(); foreach (char c in LyricsContent) { string char_path = System.IO.Path.Combine(CharPath, $"{(int)c}.png"); OsbSprite sprite = GetLayer("BeginningContentsEffects").CreateSprite(char_path, OsbOrigin.CentreLeft); LyricsSprites.Add(sprite); } float font_size_len = 128 * FontScale; //显示字幕 for (int i = 0; i < LyricsSprites.Count; i++) { var sprite = LyricsSprites[i]; sprite.Fade(OsbEasing.None, StartTime + i * FadeInTimeInv, StartTime + 500 + i * FadeInTimeInv, 0, 1); sprite.Fade(OsbEasing.None, EndTime - 500, EndTime, 1, 0); var postion = new CommandPosition(Position.X + (font_size_len + UnitOffset) * i, Position.Y); sprite.Move(StartTime, postion.X, postion.Y); sprite.Scale(StartTime, FontScale); } }
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 void ApplyTo(OsbSprite sprite) { foreach (var c in commands) { sprite.Move(c.Easing, c.StartTime, c.EndTime, c.StartValue, c.EndValue); } }
public override void Generate() { var layer = GetLayer("bg"); var bg = layer.CreateSprite("Yuuuuuuukina.jpg", OsbOrigin.Centre); bg.Fade(0, 0); var bottom = layer.CreateSprite("sb/blend.png", OsbOrigin.Centre); var top = layer.CreateSprite("sb/blend.png", OsbOrigin.Centre); OsbSprite[] allParts = new OsbSprite[] { top, bottom }; foreach (OsbSprite elem in allParts) { elem.ScaleVec(0, 3.0, 1.2); elem.Fade(OsbEasing.In, 5623, 5801, 0, 1); elem.Fade(OsbEasing.In, 100771, 100949, 1, 0); } // Bottom bottom.Rotate(0, Math.PI / 6); bottom.Move(0, 0, 240); bottom.ColorHsb(0, 9, 0.51, 0.15); // Top top.Rotate(0, Math.PI / 6 + Math.PI); top.Move(0, 330, 30); top.ColorHsb(0, 13, 0.74, 0.85); }
public static OsbSprite bounceEffect(double startTime, OsbSprite sprite) { sprite.Scale(OsbEasing.InCubic, startTime, startTime + Constants.beatLength / 4, Constants.screenScale, 0.69); startTime = startTime + Constants.beatLength / 4; sprite.Scale(OsbEasing.OutCubic, startTime, startTime + Constants.beatLength / 4, 0.69, Constants.screenScale); return(sprite); }
public override void Generate() { var layer = GetLayer("Desk"); var desk = layer.CreateSprite("sb/scenes/desk.jpg", OsbOrigin.Centre); desk.Fade(22169, 1); desk.Scale(OsbEasing.OutCirc, 22169, 22624, 1.65, Constants.screenScale); desk.Rotate(OsbEasing.OutCirc, 22169, 22624, Math.PI / 4, 0); desk.Fade(58078, 0); Helpers.bounceEffect(22624, desk); var deskR = layer.CreateSprite("sb/scenes/deskR.jpg", OsbOrigin.Centre); deskR.Fade(22169, 0.7); deskR.Fade(22169, 22624, desk.OpacityAt(22283), 0); deskR.Scale(OsbEasing.OutCirc, 22169, 22624, 1.65, Constants.screenScale); deskR.Rotate(OsbEasing.OutCirc, 22169, 22624, Math.PI / 4, 0); // Meguru Expressions Vector2 face = Helpers.locationHandler(601f, 452f); Helpers.moveScaleAndFade("sb/scenes/deskLayer1.jpg", 30124, 36487, face.X, face.Y, layer); Helpers.moveScaleAndFade("sb/scenes/deskLayer2.jpg", 36260, 40124, face.X, face.Y, layer); Helpers.moveScaleAndFade("sb/scenes/deskLayer3.jpg", 39896, 43533, face.X, face.Y, layer); Helpers.moveScaleAndFade("sb/scenes/deskLayer2.jpg", 43305, 47396, face.X, face.Y, layer); Helpers.moveScaleAndFade("sb/scenes/deskLayer4.jpg", 47169, 51033, face.X, face.Y, layer); OsbSprite deskFinal = Helpers.moveScaleAndFadeIn("sb/scenes/deskLayer5.jpg", 50805, 58533, face.X, face.Y, layer); deskFinal.Fade(58078, 0); }
public static OsbSprite moveScaleAndFade(string path, double startTime, double endTime, double x, double y, StoryboardLayer layer) { OsbSprite sprite = moveScaleAndFadeIn(path, startTime, endTime, x, y, layer); sprite.Fade(endTime, endTime + Constants.beatLength / 4, 1, 0); return(sprite); }
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); }
public void UseRotationOf(OsbSprite other, int offset = 0, int count = -1) { for (int i = offset; i < (count < 0 ? Sprites.Count() : count + offset); i++) { sprites[i].UseRotationOf(other); } }
public void UseColorOf(OsbSprite other, double time, int offset = 0, int count = -1) { for (int i = offset; i < (count < 0 ? Sprites.Count() : count + offset); i++) { sprites[i].UseColorOf(other, time); } }
// 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 UseScaleOf(OsbSprite other, double time, bool useYScale = false, int offset = 0, int count = -1) { for (int i = offset; i < (count < 0 ? Sprites.Count() : count + offset); i++) { sprites[i].UseScaleOf(other, time, useYScale); } }
private void zoomFlipEffect(OsbSprite sprite, double startTime) { var endTime = startTime + Constants.beatLength * 1.5; sprite.Scale(startTime, endTime, sprite.ScaleAt(startTime).X, 1.6); sprite.Rotate(OsbEasing.InBack, startTime, endTime, 0, Math.PI); }
private void scaleAndRotate(OsbSprite sprite, double startTime, double endTime, int startAngle, int endAngle) { sprite.Fade(startTime, startTime + Constants.beatLength / 4, 0, 1); sprite.Fade(endTime, 0); sprite.Scale(startTime, endTime, logoScale, 1); sprite.Rotate(startTime, endTime, MathHelper.DegreesToRadians(startAngle), MathHelper.DegreesToRadians(endAngle)); }
public override void Generate() { var layer = GetLayer("clock"); var clock = layer.CreateSprite("sb/clock/clock.png", OsbOrigin.Centre); var minHand = layer.CreateSprite("sb/clock/clockhand.png", OsbOrigin.BottomCentre); var hourHand = layer.CreateSprite("sb/clock/clockhand.png", OsbOrigin.BottomCentre); OsbSprite[] allParts = new OsbSprite[] { clock, minHand, hourHand }; minHand.ScaleVec(0, 0.6, 1.1); hourHand.ScaleVec(0, 0.8, 0.7); foreach (OsbSprite elem in allParts) { elem.Fade(OsbEasing.InExpo, 0, 121, 0, 1); elem.Fade(OsbEasing.InExpo, 1008, 1186, 1, 0); } hourHand.Rotate(653, 831, 0, Math.PI / 6); foreach (OsbSprite elem in allParts) { elem.Fade(OsbEasing.InExpo, 2073, 2251, 0, 1); elem.Color(2072, 2073, elem.ColorAt(2072), 1, 0, 0); // TODO fix this hack elem.Fade(OsbEasing.InExpo, 2783, 2961, 1, 0); } minHand.Rotate(2073, 2961, 0, -Math.PI * 2 * 5); hourHand.Rotate(2073, 2961, Math.PI * 5 / 6, -Math.PI * 2 / 6); }
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("Cinema"); var cinema = layer.CreateSprite("sb/scenes/cinema.jpg", OsbOrigin.Centre); cinema.Scale(OsbEasing.OutCirc, 58078, 58987, 1, Constants.screenScale); cinema.Fade(58078, 1); cinema.Fade(73078, 0); Helpers.bounceEffect(58987, cinema); var cinemaHold = layer.CreateSprite("sb/scenes/cinemaHold.jpg", OsbOrigin.Centre); cinemaHold.Scale(72851, Constants.screenScale); cinemaHold.Fade(OsbEasing.OutSine, 72851, 72851 + 227, 0, 1); cinemaHold.Fade(94442, 0); // Meguru Expressions Vector2 face = Helpers.locationHandler(974f, 200f); Helpers.moveScaleAndFade("sb/scenes/cinemaLayer1.jpg", 66487, 73078, face.X, face.Y, layer); Helpers.moveScaleAndFade("sb/scenes/cinemaLayer2.jpg", 80124, 87396, face.X, face.Y, layer); OsbSprite cinemaFinal = Helpers.moveScaleAndFadeIn("sb/scenes/cinemaLayer3.jpg", 87169, 87169, face.X, face.Y, layer); cinemaFinal.Fade(94442, 0); }
public override void Generate() { OsbSprite sprite = GetLayer("Beginning_BG").CreateSprite(FilePath); sprite.Scale(ScaleEasing, StartTime, StartTime + ScaleTime, TransformBeginScale, Scale); sprite.Fade(FadeOutEasing, StartTime, StartTime + FadeOutTime, 0, 1); sprite.Fade(FadeInEasing, EndTime - FadeInTime, EndTime, 1, 0); }
public OsbSprite FlareSprite(string filePath) { OsbSprite sprite = GetLayer(Layers.Overlay).CreateSprite(filePath, OsbOrigin.TopCentre); sprite.Scale(0, 1); sprite.Fade(0, 0); return(sprite); }
public OsbSprite GetBackgroundSprite(BackgroundType type) { OsbSprite sprite = GetLayer(Layers.HitobjectBackground).CreateSprite(GetBackground(type)); sprite.Scale(0, 854.0f / MainStoryboard.Instance.GetMapsetBitmap(GetBackground(type)).Width); sprite.Fade(0, 0); return(sprite); }
public OsbSprite RequestAvaliableSakuraSprite(int current_index) { int index = (current_index) % 15; string path = System.IO.Path.Combine(@"SB\effect\lyrics_bg", $"{index + 1}.png"); OsbSprite sprite = GetLayer("LyricsLayer_BG").CreateSprite(path, OsbOrigin.CentreRight); return(sprite); }
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); }
public PianoNote(OsbSprite top, OsbSprite bottom, OsbSprite body, Vector2 position, bool up, float scale) { this.top = top; this.bottom = bottom; this.body = body; this.position = position; this.up = up; this.scale = scale; }
public static void ScaleToFit(this OsbSprite sprite) { var bitmap = Bitmap.FromFile(sprite.GetTexturePathAt(sprite.CommandsStartTime)); sprite.Scale( bitmap.Width / bitmap.Height > 480.0 / 854.0 ? 480.0 / bitmap.Height : 854.0 / bitmap.Width ); }
public void tock(int startTime, int endTime, OsbSprite hand2) { double rotation = 0; for (int i = startTime; i <= endTime; i += 24840) { hand2.Rotate(i, i + 24840, rotation, (Math.PI / 180) * 30 + rotation); rotation += (Math.PI / 180) * 30; } }
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); }
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 SquareSprite(OsbSprite sqsprite, double time, StoryboardLayer lay) { sprite = sqsprite; sprite.Fade(time, 1); position = (Vector2)sprite.PositionAt(time); sprite.Color(time, Color4.White); color = Color4.White; layerP = lay; //quatterBeat =; }
// 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); } }