public void CreateCredit(StoryboardLayer layer, double startTime, double endTime, string topString, string bottomString) { // Top Sprite // var topSprite = layer.CreateSprite(font.GetTexture(topString).Path); topSprite.MoveY(startTime, 240 - (font.GetTexture(topString).BaseHeight * 0.55) * 0.7); topSprite.Fade(startTime, startTime + 250, 0, 1); topSprite.Fade(endTime - 250, endTime, 1, 0); topSprite.Scale(startTime, 0.55); topSprite.MoveX(OsbEasing.OutExpo, startTime, startTime + 250, 400, 325); topSprite.MoveX(startTime + 250, endTime - 250, 325, 300); topSprite.MoveX(OsbEasing.InOutCubic, endTime - 250, endTime, 300, 250); // Bottom Sprite // var bottomSprite = layer.CreateSprite(font.GetTexture(bottomString).Path); bottomSprite.MoveY(startTime, 240 + (font.GetTexture(bottomString).BaseHeight * 0.55) * 0.7); bottomSprite.Fade(startTime, startTime + 250, 0, 1); bottomSprite.Fade(endTime - 250, endTime, 1, 0); bottomSprite.Scale(startTime, 0.55); bottomSprite.MoveX(OsbEasing.OutExpo, startTime, startTime + 250, 250, 300); bottomSprite.MoveX(startTime + 250, endTime - 250, 300, 325); bottomSprite.MoveX(OsbEasing.InOutCubic, endTime - 250, endTime, 325, 400); }
private void generateVeritcalText(string text, FontGenerator font, float fontScale, float initPositionX, float initPositionY, string layer, double startTime, double endTime, AdditionalCommands callback = null) { var lineHeight = 0f; var letterX = initPositionX; foreach (var letter in text) { var texture = font.GetTexture(letter.ToString()); lineHeight += texture.BaseHeight * fontScale; } var letterY = initPositionY - lineHeight * 0.5f; foreach (var letter in text) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY); var sprite = GetLayer(layer).CreateSprite(texture.Path, OsbOrigin.Centre, position); sprite.MoveX(startTime, position.X); sprite.Scale(startTime, fontScale); sprite.Fade(startTime, 1); sprite.Fade(endTime, 0); if (callback != null) { callback(sprite); } letterY += texture.BaseHeight * fontScale; } } }
private void generateHorizontalText(string text, FontGenerator font, float fontScale, float initPositionY, double startTime, double endTime, AdditionalCommands callback = null) { var lineWidth = 0f; var letterY = initPositionY; foreach (var letter in text) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * fontScale; } var letterX = 320 - lineWidth * 0.5f; foreach (var letter in text) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY) + texture.OffsetFor(OsbOrigin.Centre) * fontScale; var sprite = GetLayer("lyrics").CreateSprite(texture.Path, OsbOrigin.Centre, position); sprite.MoveY(startTime, position.Y); sprite.Scale(startTime, fontScale); sprite.Fade(startTime, 1); sprite.Fade(endTime, 0); if (callback != null) { callback(sprite); } letterX += texture.BaseWidth * fontScale; } } }
private void GenerateCredit(int startTime, int endTime, string title, float posY, float scale) { float letterX = 0; float lineWidth = 0; float lineHeight = 0; var delay = 0; foreach (var letter in title) { var texture = Font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * scale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * scale); } letterX = 320 - lineWidth / 2; posY -= lineHeight / 2 * scale; foreach (var letter in title) { var texture = Font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, posY) + texture.OffsetFor(OsbOrigin.Centre) * scale; var sprite = GetLayer("Credits").CreateSprite(texture.Path, OsbOrigin.Centre, position); sprite.Scale(startTime, scale); sprite.MoveY(OsbEasing.OutExpo, startTime + delay, startTime + delay + 1000, position.Y + 20, position.Y); sprite.Fade(startTime + delay, startTime + delay + 1000, 0, 0.7); sprite.Fade(endTime, endTime + 1000, 0.7, 0); delay += 100; } letterX += texture.BaseWidth * scale; } }
public void generatePerCharacter(FontGenerator font, string lyric, double start, double end, double xPosition, double yPosition, double delay) { var layer = GetLayer(""); var letterY = yPosition; float totalX = 0; for (int i = 0; i < lyric.Length; i++) { var texture = font.GetTexture(lyric[i].ToString()); totalX += texture.BaseWidth * FontScale * 0.5f + spacing; } for (int i = 0; i < lyric.Length; i++) { var texture = font.GetTexture(lyric[i].ToString()); if (!texture.IsEmpty) { double x = xPosition + texture.BaseWidth * FontScale * 0.5f + spacing - totalX; double y = yPosition + Math.Sin(MathHelper.DegreesToRadians(30) * i) * 5 + Random(-3, 3); var sprite = layer.CreateSprite(texture.Path, OsbOrigin.Centre, new Vector2((float)x, (float)y)); sprite.Scale(start - delay, FontScale); sprite.Fade(start - delay, start, 0, 1); sprite.Fade(end, end + delay, 1, 0); var ran = Random(-4, 4); var rand = Random(-2, 2); sprite.Move(start, end + delay, sprite.PositionAt(start), new Vector2(sprite.PositionAt(start).X + rand, sprite.PositionAt(start).Y + rand)); } xPosition += texture.BaseWidth * FontScale; } }
private void generateDropdownTextAndElement(double startTime, double endTime, string text, FontGenerator font, Color4 color, OsbSprite element) { var beat = Beatmap.GetTimingPointAt(965).BeatDuration; var bg = GetLayer("dropdown-bg").CreateSprite("sb/common/pixel.png", OsbOrigin.TopLeft, new Vector2(-107, 0)); bg.ScaleVec(OsbEasing.OutCirc, startTime, startTime + beat, new Vector2(854, 0), new Vector2(854, 480)); bg.Color(startTime, color); bg.Fade(startTime, 1); bg.Fade(endTime + beat, 0); element.MoveY(OsbEasing.OutCirc, startTime, startTime + beat, 0, 200); element.MoveY(OsbEasing.InCirc, endTime - beat, endTime, 200, 560); element.Fade(startTime, 1); element.Fade(endTime, 0); var numberOfLine = (float)text.Split('\n').Length; var posX = 0f; var lineWidth = 0f; var lineHeight = 0f; var textPadding = 20; foreach (var line in text.Split('\n')) { lineHeight = 0f; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth = Math.Max(lineWidth, texture.BaseWidth * 0.3f); lineHeight += texture.BaseHeight * 0.3f; posX = (float)(numberOfLine % 2 == 0 ? 320f - ((numberOfLine - 1) / 2) * (lineWidth + textPadding) : 320f - ((numberOfLine - 1) / 2) * (lineWidth + textPadding)); } } foreach (var line in text.Split('\n')) { var letterX = posX; var letterY = 0 - lineHeight; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY); var sprite = GetLayer("dropdown-text").CreateSprite(texture.Path, OsbOrigin.Centre, position); sprite.MoveY(OsbEasing.OutCirc, startTime, startTime + beat, letterY, letterY + 340); sprite.MoveY(OsbEasing.InCirc, endTime - beat, endTime, letterY + 340, letterY + 700); sprite.Scale(startTime, 0.3f); sprite.Fade(startTime, 1); sprite.Fade(endTime, 0); letterY += texture.BaseHeight * 0.3f; } } posX += (lineWidth + textPadding); } }
private void GenerateCredit(string text, int startTime, int endTime, float scale, int posX, int posY) { List <OsbSprite> letterList = new List <OsbSprite>(); var currentNumber = letterPicker(0, text.Length); var layer = GetLayer("Credits"); var letterX = 0f; float letterY = posY; var lineWidth = 0f; var lineHeight = 0f; foreach (var letter in text) { var texture = Font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * scale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * scale); if (!texture.IsEmpty) { letterList.Add(layer.CreateSprite(texture.Path)); } } letterX = posX - lineWidth / 2; foreach (var letter in text) { var texture = Font.GetTexture(letter.ToString()); var fade = 0f; if (!texture.IsEmpty) { var switchNumber = Random(10, 30); double switchDuration = 50 * switchNumber; var letterStart = startTime - switchDuration; var position = new Vector2(letterX, letterY) + texture.OffsetFor(OsbOrigin.Centre) * scale; var sprite = GetLayer("Credits").CreateSprite(texture.Path, OsbOrigin.Centre, position); for (double i = letterStart; i < startTime + switchDuration; i += 50) { var newNumber = letterPicker(currentNumber, letterList.Count); spawnCharacter(newNumber, i, i + 50, position, scale, fade, letterList); currentNumber = newNumber; fade += 1.0f / (switchNumber * 2); } sprite.Fade(startTime + switchDuration, endTime, 1, 1); sprite.Fade(endTime, endTime + 1000, 1, 0); sprite.Scale(startTime + switchDuration, scale); } letterX += texture.BaseWidth * scale; } }
private void CreateLyrics(FontGenerator font, string Sentence, string FontName, int FontSize, Vector2 position, int StartTime, int EndTime) { var LyricsLayer = GetLayer("Lyrics"); var letterY = position.Y; var lineWidth = 0f; var lineHeight = 0f; var letterSpacing = LetterSpacing * FontScale; foreach (var letter in Sentence) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * FontScale + letterSpacing; lineHeight = Math.Max(lineHeight, texture.BaseHeight * FontScale); } CreateLyrics(position, StartTime, EndTime, lineWidth, lineHeight); var letterX = position.X - lineWidth * 0.5f; var timePerLetter = 60; var i = 0; foreach (var letter in Sentence) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var letterPos = new Vector2(letterX, letterY) + texture.OffsetFor(LyricsOrigin) * FontScale; var sprite = LyricsLayer.CreateSprite(texture.Path, LyricsOrigin, letterPos); sprite.Scale(StartTime, FontScale); sprite.Fade(StartTime + timePerLetter * i, StartTime + 200 + timePerLetter * i, 0, LyricsFade); sprite.Fade(EndTime - 200 + timePerLetter * i, EndTime + timePerLetter * i, LyricsFade, 0); if (Additive) { sprite.Additive(StartTime, EndTime); } var RealColor1 = RandomLyricsColor ? new Color4((float)Random(MinLyricsColor.R, MaxLyricsColor.R), (float)Random(MinLyricsColor.G, MaxLyricsColor.G), (float)Random(MinLyricsColor.B, MaxLyricsColor.B), 255) : MinLyricsColor; var RealColor2 = RandomLyricsColor ? new Color4((float)Random(MinLyricsColor.R, MaxLyricsColor.R), (float)Random(MinLyricsColor.G, MaxLyricsColor.G), (float)Random(MinLyricsColor.B, MaxLyricsColor.B), 255) : MaxLyricsColor; sprite.Color(StartTime, EndTime, RealColor1, RealColor2); i++; } letterX += texture.BaseWidth * FontScale + letterSpacing; } letterY += lineHeight; //var position = new Vector2(SubtitleX - texture.BaseWidth * FontScale * 0.5f, SubtitleY) // + texture.OffsetFor(Origin) * FontScale; }
public void generatePerCharacter(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var subtitleLine in subtitles.Lines) { var letterY = SubtitleY; foreach (var line in subtitleLine.Text.Split('\n')) { var lineWidth = 0f; var lineHeight = 0f; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * FontScale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * FontScale); } var letterX = 320 - lineWidth * 0.5f; var run = 0; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY) + texture.OffsetFor(Origin) * FontScale; var lastPosition = new Vector2(letterX, letterY) + texture.OffsetFor(Origin) * FontScale + new Vector2(0, -20); var firstPosition = new Vector2(letterX, letterY) + texture.OffsetFor(Origin) * FontScale + new Vector2(0, +15); var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Scale(subtitleLine.StartTime, FontScale); sprite.Move(subtitleLine.StartTime - 200, subtitleLine.StartTime - 200 + run, firstPosition, position); sprite.Fade(subtitleLine.StartTime - 200, subtitleLine.StartTime - 200 + run, 0, 1); sprite.Fade(subtitleLine.EndTime - 200, subtitleLine.EndTime, 1, 0); sprite.Move(subtitleLine.EndTime - 200, subtitleLine.EndTime, position, lastPosition); sprite.ScaleVec((OsbEasing)6, subtitleLine.EndTime - 200, subtitleLine.EndTime, FontScale, FontScale, FontScale, 0); if (additive) { sprite.Additive(subtitleLine.StartTime - 200, subtitleLine.EndTime); } } letterX += texture.BaseWidth * FontScale; run += 14; } letterY += lineHeight; } } }
private void generateScrollUpTiltedRightAlignedText(double startTime, double endTime, string text, float fontScale, Vector2 startPosition, float distance, int angle, FontGenerator font, Color4 color) { var beat = Beatmap.GetTimingPointAt(965).BeatDuration; // startPosition is actually the top right coordinate of the last letter of the first line. var currentPosition = startPosition; var time = startTime; var numberOfLetters = text.Replace("\n", "").Length; var textPadding = 10; foreach (var line in text.Split('\n')) { var lineWidth = 0f; var lineHeight = 0f; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * fontScale + textPadding; lineHeight = Math.Max(texture.BaseHeight * fontScale, lineHeight); } var letterX = currentPosition.X - lineWidth * (float)Math.Cos(MathHelper.DegreesToRadians(Math.Abs(angle))); var letterY = currentPosition.Y + lineWidth * (float)Math.Sin(MathHelper.DegreesToRadians(Math.Abs(angle))); foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY) + texture.OffsetFor(OsbOrigin.TopRight) * fontScale; var sprite = GetLayer("lyrics").CreateSprite(texture.Path, OsbOrigin.Centre, position); sprite.Rotate(startTime, MathHelper.DegreesToRadians(angle)); sprite.Scale(startTime, fontScale); sprite.Fade(startTime, 0); sprite.Fade(time, 1); sprite.Fade(endTime, 0); sprite.MoveX(startTime, endTime, letterX, letterX - distance * (float)Math.Sin(MathHelper.DegreesToRadians(Math.Abs(angle)))); sprite.MoveY(startTime, endTime, letterY, letterY - distance * (float)Math.Cos(MathHelper.DegreesToRadians(Math.Abs(angle)))); letterX += (texture.BaseWidth * fontScale + textPadding) * (float)Math.Cos(MathHelper.DegreesToRadians(Math.Abs(angle))); letterY -= (texture.BaseWidth * fontScale + textPadding) * (float)Math.Sin(MathHelper.DegreesToRadians(Math.Abs(angle))); time += (double)((endTime - startTime - beat / 2) / numberOfLetters); } } currentPosition.X += (lineHeight + textPadding) * (float)Math.Sin(MathHelper.DegreesToRadians(Math.Abs(angle))); currentPosition.Y += (lineHeight + textPadding) * (float)Math.Cos(MathHelper.DegreesToRadians(Math.Abs(angle))); } }
private void GenerateText(int startTime, String text) { cursor.MoveY(startTime, cursorPositionY); cursorPositionX = -50; int delay = 0; foreach (var letter in text) { //generate new image file var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { //generate sprite var sprite = GetLayer("FONTS").CreateSprite(texture.Path, OsbOrigin.CentreLeft, new Vector2(cursorPositionX, cursorPositionY)); //display sprite sprite.Fade(startTime + delay, endTime - 2000, 0.4, 0.4); //sprite.Fade(endTime, endTime, 0, 0); sprite.Scale(startTime + delay, 0.12f); delay += Random(5, 25); if (sprite.PositionAt(54052).Y < 0) { } } cursorPositionX += 8; cursor.MoveX(startTime + delay, cursorPositionX + 8); } cursorPositionY += 15; }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(320 - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Scale(line.StartTime, FontScale); sprite.Fade(line.StartTime - 200, line.StartTime, 0, 1); sprite.Fade(line.EndTime - 750, line.EndTime - 250, 1, 0); int pos = -25; int posAfter = -25; sprite.MoveX(OsbEasing.Out, line.StartTime - 500, line.StartTime, pos - 100, pos); for (double i = line.StartTime; i <= line.EndTime; i += 75) { posAfter += 1; sprite.MoveX(i, i + 75, pos, posAfter); pos = posAfter; } if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { double last_first_time = 22993; double last_end_time = 23346; foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(SubtitleX - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var lastPosition = new Vector2(SubtitleX - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale + new Vector2(-10, 30); var firstPosition = new Vector2(SubtitleX - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale + new Vector2(10, -30); var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Rotate(line.StartTime - 200, MathHelper.DegreesToRadians(9)); sprite.Scale(line.StartTime, FontScale); sprite.Color((OsbEasing)6, line.StartTime - 200, line.EndTime, Color4.Red, Color4.White); sprite.Fade(last_first_time - 300, last_first_time, 0, 0.4); sprite.Fade(last_end_time - 200, last_end_time, 0.4, 1); sprite.Move((OsbEasing)3, last_end_time - 200, last_end_time, firstPosition, position); sprite.Fade(line.EndTime - 200, line.EndTime, 1, 0); sprite.Move((OsbEasing)3, line.EndTime - 200, line.EndTime, position, lastPosition); if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } last_first_time = line.StartTime; last_end_time = line.EndTime; } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(320 - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Scale(line.StartTime, FontScale); sprite.Fade(line.StartTime - 200, line.StartTime, 0, 1); if (line.StartTime < 127564) { sprite.Rotate(line.StartTime - 200, 0.1); sprite.Move(OsbEasing.Out, line.StartTime, line.StartTime + 200, -500, 10, 320, 90); sprite.Move(line.StartTime + 200, line.EndTime, 320, 90, 360, 95); sprite.Fade(line.EndTime - 200, line.EndTime, 1, 0); } if (line.StartTime > 127564) { sprite.Rotate(line.StartTime - 200, -0.1); sprite.Move(OsbEasing.Out, line.StartTime, line.StartTime + 200, -500, 430, 320, 350); sprite.Move(line.StartTime + 200, line.EndTime, 320, 350, 360, 345); sprite.Fade(line.EndTime - 600, line.EndTime - 300, 1, 0); } if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(80 - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Scale(line.StartTime, FontScale); sprite.Fade(line.StartTime - 200, line.StartTime, 0, 1); sprite.Fade(line.EndTime - 400, line.EndTime, 1, 0); if (direction) { sprite.MoveY(OsbEasing.OutExpo, line.StartTime, line.EndTime, -40, 185); } else { sprite.MoveY(OsbEasing.OutExpo, line.StartTime, line.EndTime, 460, 235); } if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(320 - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); var bar = layer.CreateSprite(BarPath, Origin, position); bar.Rotate(line.StartTime - 200, 1.5708); bar.MoveY(line.StartTime - 200, 450); bar.ScaleVec(OsbEasing.Out, line.StartTime - 200, line.StartTime + 100, 0, 0, 0.05, 1); bar.ScaleVec(line.StartTime + 100, line.EndTime, 0.05, 1, 0.05, 2); sprite.Scale(OsbEasing.Out, line.StartTime - 200, line.StartTime + 100, 0, 0.5); sprite.Scale(line.StartTime + 100, line.EndTime, 0.5, 0.55); sprite.Fade(line.StartTime - 200, line.StartTime, 0, 1); sprite.Fade(line.EndTime - 200, line.EndTime, 1, 0); bar.Fade(line.StartTime - 200, line.StartTime, 0, 1); bar.Fade(line.EndTime - 200, line.EndTime, 1, 0); if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } } }
private void CreateLyrics(FontGenerator font, Color4 ColorType, string Sentence, string FontName, int FontSize, float FontScale, Vector2 position, int StartTime, int EndTime) { var LetterSpacing = 5; var LyricsLayer = GetLayer("Lyrics"); var letterY = position.Y; var lineWidth = 0f; var lineHeight = 0f; var letterSpacing = LetterSpacing * FontScale; foreach (var letter in Sentence) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * FontScale + letterSpacing; lineHeight = Math.Max(lineHeight, texture.BaseHeight * FontScale); } var letterX = position.X - lineWidth * 0.5f; var timePerLetter = 0; var i = 0; foreach (var letter in Sentence) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var FadeTime = 200; var RandomRotate = Random(MathHelper.DegreesToRadians(-20), MathHelper.DegreesToRadians(20)); var letterPos = new Vector2(letterX, letterY) + texture.OffsetFor(OsbOrigin.Centre) * FontScale; var sprite = LyricsLayer.CreateSprite(texture.Path, OsbOrigin.Centre); var preDelay = 100; sprite.MoveX(OsbEasing.OutQuad, StartTime - 1000 + timePerLetter * i, StartTime - preDelay + timePerLetter * i, 610, letterPos.X); sprite.MoveY(OsbEasing.Out, StartTime - 1000 + timePerLetter * i, StartTime - preDelay + timePerLetter * i, Random(330, 415), letterPos.Y); sprite.Fade(StartTime - 1000 + timePerLetter * i, StartTime - 500 + timePerLetter * i, 0, 0.4); sprite.Fade(EndTime - preDelay - (FadeTime * 1.5) + timePerLetter * i, EndTime - preDelay + timePerLetter * i, 0.4, 0); sprite.Scale(StartTime - preDelay, FontScale); sprite.Color(StartTime - preDelay, ColorType); i++; } letterX += texture.BaseWidth * FontScale + letterSpacing; } letterY += lineHeight; }
private void generateLyrics(FontGenerator font, SubtitleSet subtitles) { foreach (var subtitleLine in subtitles.Lines) { var letterY = 240f; foreach (var line in subtitleLine.Text.Split('\n')) { var lineWidth = 0f; var lineHeight = 0f; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * fontscale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * fontscale); } var letterX = 320 - lineWidth * 0.5f; Vector2 center = new Vector2(320, 240); foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, (float)(letterY - lineHeight * 0.5)) // Moving Lyics To Y center + texture.OffsetFor(OsbOrigin.Centre) * fontscale; var distance = Vector2.Subtract(position, center); // Distance between each letter and center var sprite = GetLayer("").CreateSprite(texture.Path, OsbOrigin.Centre); // Move away from center sprite.MoveY(subtitleLine.StartTime, position.Y); sprite.MoveX(subtitleLine.StartTime, subtitleLine.EndTime, position.X, position.X + distance.X * 0.25); sprite.Scale(subtitleLine.StartTime, fontscale); sprite.Fade(subtitleLine.StartTime, subtitleLine.StartTime + Constants.beatLength * 0.25, 0, 1); // Move back to center distance = Vector2.Subtract(sprite.PositionAt(subtitleLine.EndTime), center); sprite.MoveX(subtitleLine.EndTime, subtitleLine.EndTime + Constants.beatLength * 0.25, sprite.PositionAt(subtitleLine.EndTime).X, Vector2.Subtract(sprite.PositionAt(subtitleLine.EndTime), distance).X); sprite.Fade(subtitleLine.EndTime, subtitleLine.EndTime + Constants.beatLength * 0.25, 1, 0); sprite.Scale(subtitleLine.EndTime, subtitleLine.EndTime + Constants.beatLength * 0.25, fontscale, 0); } letterX += texture.BaseWidth * fontscale; } letterY += lineHeight; } } }
public void generateLyrics(FontGenerator font, SubtitleSet subtitles, string layerName) { var layer = GetLayer(layerName); foreach (var subtitleLine in subtitles.Lines) { float letterY = SubtitleY; float whiteSpace = 3f; foreach (var line in subtitleLine.Text.Split('\n')) { var lineWidth = 0f; var lineHeight = 0f; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * mainFontScale + whiteSpace; lineHeight = Math.Max(lineHeight, texture.BaseHeight * mainFontScale); } var letterX = 320 - lineWidth * 0.5f; double relativeTime = subtitleLine.StartTime; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY) + texture.OffsetFor(OsbOrigin.Centre) * mainFontScale; Vector2 offscreen = Vector2.Subtract(new Vector2(-200, position.Y), position); Vector2 screenright = new Vector2(600, position.Y); var sprite = layer.CreateSprite(texture.Path, OsbOrigin.Centre, position); sprite.Scale(relativeTime, mainFontScale); sprite.Fade(relativeTime - 227, relativeTime, 0, 1); sprite.Move(subtitleLine.EndTime - 227, subtitleLine.EndTime, position, Vector2.Add(position, new Vector2(Random(-5, 5), Random(-20, 20)))); sprite.Scale(subtitleLine.EndTime - 227, subtitleLine.EndTime, mainFontScale, 0); sprite.Fade(subtitleLine.EndTime - 227, subtitleLine.EndTime, 1, 0); } letterX += texture.BaseWidth * mainFontScale + whiteSpace; relativeTime += 114 / 2; } letterY += lineHeight; } } }
public void clickNoteTop(PianoNote pianoNote, int time, String notePlayed) { var texture = font.GetTexture(notePlayed); var noteSprite = layer.CreateSprite(texture.Path, OsbOrigin.Centre, pianoNote.getPos() - new Vector2(0, 80)); noteSprite.Scale(time, 0.18); noteSprite.Fade(time, time + 50, 0, 0.66); noteSprite.Fade(time + 200, time + 350, 0.66, 0); if (notePlayed.Contains('4')) { noteSprite.ColorHsb(time, time + 350, 0, 1, 1, 0, 1, 1); } if (notePlayed.Contains('2')) { noteSprite.ColorHsb(time, time + 350, 120, 1, 1, 120, 1, 1); } pianoNote.click(time, notePlayed); }
public void generateSukiLyrics(FontGenerator font, SubtitleSet subtitles, string layerName) { var layer = GetLayer(layerName); foreach (var subtitleLine in subtitles.Lines) { var letterY = 240f; float whiteSpace = 6f; foreach (var line in subtitleLine.Text.Split('\n')) { var lineWidth = 0f; var lineHeight = 0f; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth += (texture.BaseWidth + whiteSpace) * sideFontScale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * sideFontScale); } var letterX = 320 - lineWidth * 0.5f; Vector2 center = new Vector2(320, 240); foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, (float)(letterY - lineHeight * 0.5)) + texture.OffsetFor(OsbOrigin.Centre) * sideFontScale; var distance = Vector2.Subtract(position, center) * 0.3f; var sprite = layer.CreateSprite(texture.Path, OsbOrigin.Centre); sprite.MoveX(subtitleLine.StartTime - 227, subtitleLine.StartTime, 320, position.X); sprite.MoveX(subtitleLine.StartTime, subtitleLine.EndTime, sprite.PositionAt(subtitleLine.StartTime).X, Vector2.Add(sprite.PositionAt(subtitleLine.StartTime), distance).X); sprite.Scale(subtitleLine.StartTime, sideFontScale); sprite.Fade(subtitleLine.StartTime - 227, subtitleLine.StartTime, 0, 1); sprite.Fade(subtitleLine.EndTime - 227, subtitleLine.EndTime, 1, 0); sprite.Additive(subtitleLine.StartTime - 227, subtitleLine.EndTime); } letterX += (texture.BaseWidth + whiteSpace) * sideFontScale; } letterY += lineHeight; } } }
public void calculateLineWidth() { foreach (var line in lines) { float lineWidth = 0f; FontTexture[] textures = new FontTexture[line.Length]; int t = 0; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); textures[t] = texture; lineWidth += texture.BaseWidth * this.textScale; t++; } this.lineWidth = Math.Max(this.lineWidth, lineWidth); } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { Vector2[] shakePosition; shakePosition = new Vector2[10]; for (int i = 0; i < 10; i++) { shakePosition[i] = new Vector2( (float)Random(0, 2), (float)Random(0, 2) ); } var beat = 509; int loopCount = (int)Math.Ceiling((line.EndTime - line.StartTime - 200) / (10 * beat / 4)); var value = line.Text; var lineY = SubtitleY; if (line.StartTime > 209149) { lineY = 150; } var texture = font.GetTexture(line.Text); var position = new Vector2(320 - texture.BaseWidth * FontScale * 0.5f, lineY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.ScaleVec(line.StartTime, FontScale, FontScale); sprite.Fade(line.StartTime - 200, line.StartTime, 0, 1); sprite.Fade(line.EndTime - 200, line.EndTime, 1, 0); sprite.StartLoopGroup(line.StartTime - 200, loopCount); for (int i = 0; i < 10; i++) { sprite.Move(OsbEasing.OutBounce, beat / 4 * i, beat / 4 * (i + 1), position + shakePosition[i], position - shakePosition[i] / 2); } sprite.EndGroup(); sprite.ScaleVec(line.EndTime - 200, line.EndTime, FontScale, FontScale, FontScale + 0.5, 0); if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } if (value == "Killing") { sprite.Color(line.StartTime - 200, 0.8, 0, 0); } } }
void generateCreditFontTextures() { List <string> textureStrings = new List <string> { "Normal", "GreenHue", "Hard", "FrenZ396", "Insane", "Hectique", "SnowNiNo_", "ScubDomino", "Another", "J1_", "Expert", "Will Stetson | MBMasher", "Kalibe", "Extra", "Reform", "FoxyGrandpa", "Rolniczy", "OnlyBiscuit", "SMOKELIND", "Venix", "WORSTPOLACKEU", "Woey", "Extreme", "StunterLetsPlay", "IOException", "Ofredande!", "Will Stetson" }; foreach (var textureString in textureStrings) { creditFont.GetTexture(textureString); } }
void generateLyric(Lyric lyric, FontGenerator font) { var fontTexture = font.GetTexture(lyric.Sentence.ToUpper()); var sprite = foreLayer.CreateSprite(fontTexture.Path); sprite.MoveY(OsbEasing.InExpo, lyric.startTime - 100, lyric.startTime, 200, 235); sprite.MoveY(lyric.startTime, lyric.endTime - 100, 235, 245); sprite.MoveY(OsbEasing.InExpo, lyric.endTime - 100, lyric.endTime, 245, 350); sprite.Fade(lyric.startTime - 100, lyric.startTime, 0, 1); sprite.Fade(lyric.endTime - 100, lyric.endTime, 1, 0); sprite.Scale(lyric.startTime - 100, 0.25); }
public void GenerateSongName(FontGenerator font, bool additive, int Start, int End, string Sentence) { double Beat = Beatmap.GetTimingPointAt(Start).BeatDuration; float letterX = 320; var letterY = 220; var lineWidth = 0f; var lineHeight = 0f; float FontScale = 0.5f; int Delay = 60; OsbOrigin Origin = OsbOrigin.Centre; foreach (var letter in Sentence) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * FontScale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * FontScale); } var letterCenter = letterX; letterX = letterX - lineWidth * 0.5f; foreach (var letter in Sentence) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var position = new Vector2(letterX, letterY) + texture.OffsetFor(Origin) * FontScale; var sprite = GetLayer("Sentence").CreateSprite(texture.Path, Origin, position); sprite.Scale(OsbEasing.OutBack, Start + Delay, Start + Delay + 300, 0, FontScale); sprite.Fade(Start + Delay, Start + Delay + 300, 0, 1); sprite.Fade(End, End + 300, 1, 0); Delay += 60; } letterX += texture.BaseWidth * FontScale; } }
void generateCredits() { creditFont = LoadFont("sb/f/c", new FontDescription() { FontPath = "fonts/Montserrat-Light.ttf", Color = Color4.White }); generateCreditFontTextures(); var bar = GetLayer("").CreateSprite("sb/p.png"); bar.ScaleVec(OsbEasing.OutExpo, 390, 840, new Vector2(0, 5), new Vector2(450, 5)); bar.ScaleVec(OsbEasing.OutExpo, 9240, 9540, new Vector2(450, 5), new Vector2(0, 5)); bar.Fade(390, 1); bar.Fade(9540, 0); //First Part var artistTexture = creditFont.GetTexture("Royal Republic"); var titleTexture = creditFont.GetTexture("Underwear"); //Half of second var diffTexture = creditFont.GetTexture(getDifficultyNames()[0]); var MappersTexture = creditFont.GetTexture(getDifficultyNames()[1]); var storyboardTexture = creditFont.GetTexture("Storyboard"); var storyboarderTexture = creditFont.GetTexture("Coppertine"); generateCredit(GetLayer(""), artistTexture, titleTexture, 390, 5190); generateCredit(GetLayer("hl"), diffTexture, MappersTexture, 5190, 7590); generateCredit(GetLayer(""), storyboardTexture, storyboarderTexture, 7590, 9390); }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(320 - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Scale(line.StartTime, line.EndTime, FontScale, FontScale - 0.05); sprite.Fade(line.StartTime - 200, line.StartTime + 200, 0, 1); sprite.Fade(line.EndTime - 200, line.EndTime, 1, 0); if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } } }
public void SetupFont() { font = LoadFont("sb/f/c", new FontDescription() { FontPath = "fonts/Montserrat-Light.ttf", FontSize = 38, Color = Color4.White }); string[] creditList = { "Tenkai", "Kroytz" }; foreach (string credit in creditList) { font.GetTexture(credit); } }
// A function that generates one note with the bold or the regular font public void generateNote(String note, double time, int startingY, bool bold) { double scale = 0.5; OsbSprite sprite; if (bold) { sprite = layer.CreateSprite(fontBold.GetTexture(note).Path, OsbOrigin.Centre); } else { sprite = layer.CreateSprite(fontNormal.GetTexture(note).Path, OsbOrigin.Centre); } sprite.Scale(time, scale); sprite.Color(time - 75, Color4.Black); sprite.Fade(time - 75, time, 0, 1); sprite.Fade(time + 4 * beatduration - 75, time + 4 * beatduration, 1, 0); sprite.Move(OsbEasing.OutCubic, time - 75, time, xPosition, startingY - 40, xPosition, startingY); sprite.Move(OsbEasing.None, time, time + 4 * beatduration - 75, xPosition, startingY, xPosition, startingY + 40); sprite.Move(OsbEasing.OutCubic, time + 4 * beatduration - 75, time + 4 * beatduration, xPosition, startingY + 40, xPosition, startingY + 80); }