public void generateLyrics(FontGenerator font, SubtitleSet subtitles, string layerName, bool additive) { var layer = GetLayer(layerName); if (PerCharacter) { generatePerCharacter(font, subtitles, layer, additive); } else { generatePerLine(font, subtitles, layer, additive); } }
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; } } }
public void EN_Section9() { this.fadeOutDelay = 50; this.timing = new Timing(); var font = FontGenerator("sb/dialog/txt/9", fontEN); this.font = font; // DIALOG 1 ----------------------------------------- string[] sentence = { "?!", "What's going on?! Let me run a quick system scan..." }; this.timing.start = 380218; this.timing.end = 385244; this.position = new Vector2(105, 326); Dialog(sentence); // DIALOG 2 ----------------------------------------- string[] sentence2 = { "....", "*Scanning*" }; this.timing.start = 385244; this.timing.end = 394853; this.position = new Vector2(105, 326); Dialog(sentence2); // DIALOG 3 ----------------------------------------- string[] sentence3 = { "It seems the remaining bugs from Section 4 have infiltrated the system,", "corrupting the mappers' databases... Wait... this was not supposed to happen...", "Why do Necho and Otosaka-Yu have to fight!" }; this.timing.start = 394853; this.timing.end = 408289; this.position = new Vector2(105, 326); Dialog(sentence3); // DIALOG 4 ----------------------------------------- string[] sentence4 = { "Unfortunately, it seems that your score will inevitably drop, but please save them!", "We can only count on you..." }; this.fadeOutDelay = 500; this.timing.start = 408289; this.timing.end = 417785; this.position = new Vector2(105, 326); Dialog(sentence4); Tochi(380218, 417785); }
public void Run() { PlainCoreSettings.GlfwSearchPath = Path.GetFullPath("../../../../../Native/"); var window = new RenderWindow(); var rs = new TextureResourceSet(window); var t = Texture.FromFile("Example.png"); var renderer = new SpriteRenderer(); var dl = DynamicDisplayList <VertexPositionColorTexture> .Create(renderer); var sprites = new List <SpriteRenderItem>(); var description = FontGenerator.GenerateFont("OpenSans-Regular.ttf", 40); var font = new Font(description); sprites.Add(SpriteDrawer.Draw(t, Color4.White, 0f, 0f)); sprites.Add(SpriteDrawer.Draw(t, Color4.White, 100f, 100f)); sprites.Add(SpriteDrawer.Draw(t, Color4.White, 200f, 200f)); sprites.Add(SpriteDrawer.Draw(t, Color4.White, 400f, 400f)); var glyphs = font.DrawString("ASDF", 500f, 400f); sprites.AddRange(glyphs); var indices = SpriteRenderer.GetIndices(sprites.Count); renderer.SetRenderItems(sprites.ToArray()); while (window.IsOpen) { window.Clear(Color4.Black); window.PollEvents(); renderer.RenderToData((vertices, count, tex) => { dl.SetVertices(vertices); dl.SetIndices(indices, count); rs.Texture = tex; dl.Draw(rs, count); }); window.Display(); } dl.Dispose(); font.Dispose(); renderer.Dispose(); window.Dispose(); }
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; }
public void JP_Section9() { this.fadeOutDelay = 50; this.timing = new Timing(); var font = FontGenerator("sb/dialog/txt/9/jp", fontJP); this.font = font; // DIALOG 1 ----------------------------------------- string[] sentence = { "?!", "何が起こっているの?!私にシステムスキャンをさせてください..." }; this.timing.start = 380218; this.timing.end = 385244; this.position = new Vector2(105, 326); Dialog(sentence); // DIALOG 2 ----------------------------------------- string[] sentence2 = { "....", "*Scanning*" }; this.timing.start = 385244; this.timing.end = 394853; this.position = new Vector2(105, 326); Dialog(sentence2); // DIALOG 3 ----------------------------------------- string[] sentence3 = { "見た感じセクション4からの残りのバグはシステムに侵入し、マッパー達のデーターベースを破損しました...", "待って。こういうことがあってはダメです...なぜNechoとOtosaka-Yuは戦う必要性があるのですか!" }; this.timing.start = 394853; this.timing.end = 407418; this.position = new Vector2(105, 326); Dialog(sentence3); // DIALOG 4 ----------------------------------------- string[] sentence4 = { "残念ながらあなたのスコアは必然的に落ちますが、彼たちを助けてください!", "私たちはあなたにしか頼れません..." }; this.fadeOutDelay = 500; this.timing.start = 407418; this.timing.end = 416214; this.position = new Vector2(105, 326); Dialog(sentence4); Tochi(380218, 416214); }
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 DialogText(StoryboardObjectGenerator generator, string layerName, FontGenerator font, OsbSprite sprite, Color4 Color, Position position, DialogTiming timing, float fade, int FadeIn, int FadeOut, int fontSize, bool centre) { //And this pack of lines are just the way we set our local variable with the parameters values of the constructor. this.generator = generator; this.font = font; this.startTime = timing.startTime; this.endTime = timing.endTime; this.position = position; this.fade = fade; this.fontSize = fontSize; this.Color = Color; this.lineWidth = 0f; this.centre = centre; this.layerName = layerName; this.FadeIn = FadeIn; this.FadeOut = FadeOut; }
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); } } }
/* |||||||||||||||||||||||||||||||||||||||||||| SYSTEM DIALOGUES |||||||||||||||||||||||||||||||||||||||||||| */ public void EN_System() { this.timing = new Timing(); var font = FontGenerator("sb/dialog/txt/system", fontEN); this.font = font; // DIALOG 1 ----------------------------------------- string[] sentence = { "Get ready!", "Your mission is about to begin." }; this.showBox = true; this.timing.start = 40630; this.timing.end = 48937; this.position = new Vector2(40, 430); this.push = DialogBoxes.Push.Right; Dialog(sentence); }
public void JP_System() { this.timing = new Timing(); var font = FontGenerator("sb/dialog/txt/system/jp", fontJP); this.font = font; // DIALOG 1 ----------------------------------------- string[] sentence = { "準備してください!", "あなたのミッションはもうすぐ始まります。" }; this.showBox = true; this.timing.start = 40630; this.timing.end = 48937; this.position = new Vector2(40, 430); this.push = DialogBoxes.Push.Right; Dialog(sentence); }
public static string InvalidateFontsAction() { foreach (var configPath in EnumerateFontConfigs(AssetPath.Combine(The.Workspace.AssetsDirectory, "Fonts/"))) { Console.WriteLine($"Processing {configPath}.."); try { var tftPath = Path.ChangeExtension(configPath, "tft"); FontGenerator.UpdateCharSetsAndGenerateFont( new Uri(The.Workspace.AssetsDirectory + "\\").MakeRelativeUri(new Uri(configPath)).OriginalString, The.Workspace.AssetsDirectory ); } catch (Exception e) { Console.WriteLine($"Failed to generate font using {configPath} config"); Console.WriteLine(e); } } return(null); }
public override void Generate() { layer = GetLayer("Main"); beatduration = Beatmap.GetTimingPointAt(62840).BeatDuration; rnd = new Random(); // Init the font font = LoadFont("sb/AlienFontGenerated", new FontDescription() { FontPath = "fonts/Alien_lines_1.9.ttf", FontSize = 72, Color = Color4.White, Padding = Vector2.Zero, FontStyle = System.Drawing.FontStyle.Regular, TrimTransparency = true, EffectsOnly = false, Debug = false, }, new FontOutline() { Thickness = 0, Color = Color4.Transparent, }, new FontShadow() { Thickness = 0, Color = Color4.Transparent, }); generateLine(42735, 62840, 25, true); generateLine(42735, 62840, 65, false); generateLine(42735, 62840, 105, true); generateLine(42735, 62840, 145, false); generateLine(42735, 62840, 185, true); generateLine(42735, 62840, 225, false); generateLine(42735, 62840, 265, true); generateLine(42735, 62840, 305, false); generateLine(42735, 62840, 345, true); generateLine(42735, 62840, 385, false); generateLine(42735, 62840, 425, false); generateLine(42735, 62840, 465, true); }
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 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); } }
protected override void LoadContent() { keyBoardReader = new KeyBoardReader(); _spriteBatch = new SpriteBatch(GraphicsDevice); #region add worlds to level1 levelsWorld1 = new List <IRoomLayout>(); levelsWorld1.Add(new StartWorldLayout()); levelsWorld1.Add(new World1Room1Layout()); levelsWorld1.Add(new World1Room2Layout()); levelsWorld1.Add(new World1Room3Layout()); levelsWorld1.Add(new World1Room4Layout()); #endregion #region add menu items to the menus startMenuItems = new List <string> { "Pigit", "Play", "Exit Game", "->" }; pauseMenuItems = new List <string> { "Pause", "Resume", "Main Menu", "->" }; deadMenuItems = new List <string> { "Dead", "Main Menu", "Exit Game", "->" }; endMenuItems = new List <string> { "End", "Main Menu", "Exit Game", "->" }; #endregion #region generate fontGenerator = new FontGenerator(Content); generateSprites = new SpriteGenerator(Content); musicGenerator = new MusicGenerator(Content); #endregion InitializeGameObjects(); }
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; } }
public override void Generate() { Font = SetFont(); GenerateCredit("SAKURABURST", 7687, 15099, 0.5f, 320, 216); GenerateCredit("SKYSHIFTER VIP", 8040, 15099, 25, 320, 265); GenerateCredit("BEATMAP", 16158, 23216, 0.3f, 320, 130); GenerateCredit("STORYBOARD", 17569, 23216, 0.3f, 320, 280); GenerateCredit("SCUBDOMINO & SHIZUKU-", 18981, 23216, 0.3f, 320, 153); GenerateCredit("COPPERTINE - DARKY1 - PONO", 20393, 23216, 0.3f, 320, 303); var partLines = File.ReadAllLines(ProjectPath + "/parts.txt"); foreach (var line in partLines) { var values = line.Split(';'); GeneratePartName(values[0], int.Parse(values[1]), int.Parse(values[2])); } }
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 glitch1 = layer.CreateSprite(texture.Path, Origin, position); var glitch2 = layer.CreateSprite(texture.Path, Origin, position); sprite.Scale(OsbEasing.Out, line.StartTime, line.StartTime + 300, 0, FontScale * 0.9); sprite.Scale(OsbEasing.In, line.StartTime + 300, line.EndTime, FontScale * 0.9, FontScale); glitch1.Color(line.StartTime + 900, 0.8, 0.06, 0.223); glitch2.Color(line.StartTime + 900, 0.058, 0.98, 0.98); glitch1.Fade(line.StartTime + 300, line.StartTime + 400, 0, 0); glitch1.Fade(line.StartTime + 400, line.StartTime + 500, 0.25, 0.25); glitch1.Fade(line.StartTime + 500, line.EndTime, 0, 0); glitch1.Scale(OsbEasing.Out, line.StartTime, line.StartTime + 300, 0, FontScale * 0.9); glitch1.Scale(OsbEasing.In, line.StartTime + 300, line.EndTime, FontScale * 0.9, FontScale); glitch1.Move(line.StartTime + 300, 317, 218); glitch2.Fade(line.StartTime + 350, line.StartTime + 450, 0, 0); glitch2.Fade(line.StartTime + 450, line.StartTime + 550, 0.25, 0.25); glitch2.Fade(line.StartTime + 550, line.EndTime, 0, 0); glitch2.Scale(OsbEasing.Out, line.StartTime, line.StartTime + 350, 0, FontScale * 0.9); glitch2.Scale(OsbEasing.In, line.StartTime + 350, line.EndTime, FontScale * 0.9, FontScale); glitch2.Move(line.StartTime + 350, 323, 218); sprite.Fade(line.StartTime, line.EndTime, 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(320 - texture.BaseWidth * FontScale * 0.5f, SubtitleY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Rotate(line.StartTime, 0.4); sprite.Scale(line.StartTime, FontScale); sprite.Fade(line.StartTime - 200, line.StartTime, 0, 1); sprite.Fade(line.EndTime - 200, line.EndTime, 1, 0); double posx = -25; double posxAfter = -25; double posy = 220; double posyAfter = 220; sprite.MoveX(OsbEasing.Out, line.StartTime - 500, line.StartTime, posx - 500, posx); sprite.MoveY(OsbEasing.Out, line.StartTime - 500, line.StartTime, posy - 200, posy); for (double i = line.StartTime; i <= line.EndTime; i += 75) { posxAfter += 1; posyAfter += 0.5; sprite.MoveX(i, i + 75, posx, posxAfter); sprite.MoveY(i, i + 75, posy, posyAfter); posx = posxAfter; posy = posyAfter; } sprite.MoveX(OsbEasing.InCubic, line.EndTime - 500, line.EndTime + 250, posxAfter - 6, posx + 475); sprite.MoveY(OsbEasing.InCubic, line.EndTime - 500, line.EndTime + 250, posyAfter - 3, posy + 200); if (additive) { sprite.Additive(line.StartTime - 200, line.EndTime); } } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { var positionList = new TupleList <int, int> { { 120, 100 }, //I'll { 230, 100 }, //find { 370, 100 }, //some { 120, 138 }, //peace { 120, 192 }, //this { 120, 254 }, //time { 306, 194 }, //i'll { 410, 194 }, //let { 306, 254 }, //you { 120, 312 }, //Know { 155, 160 }, //we're { 325, 160 }, //gonna { 155, 206 }, //grow { 110, 100 }, //i'm { 180, 100 }, //gonna { 250, 146 }, //show { 316, 190 }, //you { 110, 146 }, //my { 110, 240 }, //Heart { 340, 240 }, //and { 110, 300 }, //soul { 200, 150 }, // this { 325, 150 }, //time { 138, 190 }, //this { 325, 190 }, //time { 170, 140 }, //my { 150, 180 }, //love { 3, 1 }, { 1, 1 } }; var scaleList = new TupleList <double, double> { { 0.35, 0.35 }, //I'll { 0.35, 0.35 }, //find { 0.35, 0.35 }, //some { 0.845, 0.50 }, //peace { 0.55, 0.55 }, //this { 0.55, 0.55 }, //time { 0.45, 0.45 }, //i'll { 0.42, 0.45 }, //let { 0.65, 0.53 }, //you { 0.900, 0.60 }, //Know { 0.35, 0.35 }, //we're { 0.35, 0.35 }, //gonna { 0.78, 1.3 }, //grow { 0.35, 0.35 }, //i'm { 0.35, 0.35 }, //gonna { 0.35, 0.35 }, //you { 0.35, 0.35 }, //show { 0.65, 0.80 }, //my { 0.45, 0.50 }, //Heart { 0.45, 0.5 }, //and { 1.1, 0.80 }, //soul { 0.35, 0.35 }, // this { 0.35, 0.35 }, //time { 0.55, 0.55 }, //this { 0.55, 0.55 }, //time { 0.35, 0.35 }, //my { 0.75, 0.75 }, //love }; var angleList = new List <int> { 0, //I'll 0, //find 0, //some 0, //peace 0, //this 0, //time 0, //i'll 0, //let 0, //you 0, //Know 0, //we're 0, //gonna 0, //grow 0, //i'm 0, //gonna 0, //show 0, //you 0, //my 0, //Heart 0, //and 0, //soul 0, // this 0, //time 0, //this 0, //time 0, //my 0, //love }; var colorList = new List <Color4> { Color4.White, //I'll Color4.White, //find Color4.White, //some Color4.MediumSeaGreen, //peace Color4.White, //this Color4.MediumSeaGreen, //time Color4.White, //i'll Color4.White, //let Color4.White, //you Color4.CornflowerBlue, //Know Color4.White, //we're Color4.White, //gonna Color4.CornflowerBlue, //grow Color4.White, //i'm Color4.White, //gonna Color4.CornflowerBlue, //show Color4.White, //you Color4.White, //my Color4.Red, //Heart Color4.White, //and Color4.Red, //soul Color4.White, // this Color4.MediumSeaGreen, //time Color4.White, //this Color4.MediumSeaGreen, //time Color4.White, //my Color4.Red, //love }; var run = 0; foreach (var line in subtitles.Lines) { var texture = font.GetTexture(line.Text); var position = new Vector2(positionList[run].Item1, positionList[run].Item2); var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.ScaleVec(line.StartTime, scaleList[run].Item1, scaleList[run].Item2); sprite.Fade(line.StartTime - 100, line.StartTime, 0, 1); sprite.Fade(line.EndTime - 100, line.EndTime, 1, 0); sprite.Rotate(line.EndTime - 100, MathHelper.DegreesToRadians(angleList[run])); sprite.Color(line.StartTime, colorList[run]); run += 1; } }
public void generatePerLine(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { foreach (var line in subtitles.Lines) { Vector2[] shakePosition; shakePosition = new Vector2[10]; Vector2[] shakePositionR; shakePositionR = new Vector2[10]; Vector2[] shakePositionB; shakePositionB = new Vector2[10]; for (int i = 0; i < 10; i++) { shakePosition[i] = new Vector2( (float)Random(0, 2), (float)Random(0, 2) ); shakePositionR[i] = new Vector2( (float)Random(0, 5), (float)Random(0, 5) ); shakePositionB[i] = new Vector2( (float)Random(0, 5), (float)Random(0, 5) ); } 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; if (value != "Killing" || (line.StartTime < 38302 && line.StartTime >= 54573)) { var RCopy = layer.CreateSprite(texture.Path, Origin, position); var BCopy = layer.CreateSprite(texture.Path, Origin, position); RCopy.ScaleVec(line.StartTime, FontScale, FontScale); RCopy.Fade(line.StartTime - 200, line.StartTime, 0, 0.5); RCopy.Fade(line.EndTime - 200, line.EndTime, 0.5, 0); RCopy.Color(line.StartTime - 200, 255, 0, 0); RCopy.StartLoopGroup(line.StartTime - 200, loopCount); for (int i = 0; i < 10; i++) { RCopy.Move(OsbEasing.OutBounce, beat / 4 * i, beat / 4 * (i + 1), position + shakePositionR[i], position - shakePositionR[i] / 2); } RCopy.EndGroup(); RCopy.ScaleVec(line.EndTime - 200, line.EndTime, FontScale, FontScale, FontScale + 0.5, 0); BCopy.ScaleVec(line.StartTime, FontScale, FontScale); BCopy.Fade(line.StartTime - 200, line.StartTime, 0, 0.5); BCopy.Fade(line.EndTime - 200, line.EndTime, 0.5, 0); BCopy.Color(line.StartTime - 200, 0.2, 0.8, 1); BCopy.StartLoopGroup(line.StartTime - 200, loopCount); for (int i = 0; i < 10; i++) { BCopy.Move(OsbEasing.OutBounce, beat / 4 * i, beat / 4 * (i + 1), position + shakePositionB[i], position - shakePositionB[i] / 2); } BCopy.EndGroup(); BCopy.ScaleVec(line.EndTime - 200, line.EndTime, FontScale, FontScale, FontScale + 0.5, 0); RCopy.Additive(line.StartTime - 200, line.EndTime); BCopy.Additive(line.StartTime - 200, line.EndTime); } 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); } } }
public IconCache() { using (var stream = File.OpenRead("FontAwesome.ttf")) _generator = new FontGenerator(new TrueTypeSharp.TrueTypeFont(stream)); }
public void generatePerCharacter(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, string TimestampSplit) { var TimestampArray = Array.ConvertAll(TimestampSplit.Split(','), s => int.Parse(s)); var LineStart = 0; var LineEnd = 0; var RunLine = 0f; var aniLyrics = 0; var trace = layer.CreateSprite(TracePath, OsbOrigin.Centre); if (StartTrace == 49997) { trace.Move(StartTrace - tick(0, 2) - tick(0, 1), StartTrace - tick(0, 1), new Vector2(-120, 400), new Vector2(70, 400)); trace.Fade(StartTrace - tick(0, 2) - tick(0, 1), StartTrace - tick(0, 1), 0, 0.65); trace.ScaleVec(StartTrace - tick(0, 2) - tick(0, 1), StartTrace - tick(0, 1), 0, 0.15, 0.22, 0.15); trace.Color(StartTrace - tick(0, 2) - tick(0, 1), 0, 0, 0); trace.Fade(EndTrace - tick(0, 0.5), EndTrace, 0.65, 0); } else { trace.FlipH(StartTrace - tick(0, 2) - tick(0, 1), EndTrace); trace.FlipV(StartTrace - tick(0, 2) - tick(0, 1), EndTrace); trace.Move(StartTrace - tick(0, 2) - tick(0, 1), StartTrace - tick(0, 1), new Vector2(730, 400), new Vector2(540, 400)); trace.Fade(StartTrace - tick(0, 2) - tick(0, 1), StartTrace - tick(0, 1), 0, 0.65); trace.ScaleVec(StartTrace - tick(0, 2) - tick(0, 1), StartTrace - tick(0, 1), 0, 0.15, 0.22, 0.15); trace.Color(StartTrace - tick(0, 2) - tick(0, 1), 0, 0, 0); trace.Fade(EndTrace - tick(0, 0.5), EndTrace, 0.65, 0); } foreach (var subtitleLine in subtitles.Lines) { foreach (var line in subtitleLine.Text.Split('\0')) { var letterX = SubtitleX; var letterY = SubtitleY; var lineWidth = 0f; var lineHeight = 0f; for (int x = 0; x < TimestampArray.Length; x++) { if (LineStart == TimestampArray[x]) { continue; } if (TimestampArray[x] <= subtitleLine.StartTime && TimestampArray[x + 1] >= subtitleLine.StartTime) { LineStart = TimestampArray[x]; LineEnd = TimestampArray[x + 1]; RunLine = 0f; aniLyrics = 0; break; } } foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); lineWidth += texture.BaseWidth * FontScale; lineHeight = Math.Max(lineHeight, texture.BaseHeight * FontScale); if (!texture.IsEmpty) { var position = new Vector2(letterX + RunLine, letterY) + texture.OffsetFor(Origin) * FontScale; var sprite = layer.CreateSprite(texture.Path, Origin); if (letter == '$') { letterX += texture.BaseWidth * FontScale; continue; } //begin sprite.Scale(LineStart + aniLyrics - tick(0, 0.5) + tick(0, 2), FontScale - 0.2f); sprite.Fade(LineStart + aniLyrics - tick(0, 0.5) + tick(0, 2), LineStart + aniLyrics - tick(0, 0.75), 0, 0.4); sprite.Move(LineStart + aniLyrics - tick(0, 0.5) + tick(0, 2), LineStart + aniLyrics - tick(0, 0.75), position - new Vector2(0, 20), position); //pulse sprite.Scale(subtitleLine.StartTime - 50, subtitleLine.StartTime + 50, FontScale - 0.2f, FontScale); sprite.Fade(subtitleLine.StartTime - 50, subtitleLine.StartTime + 50, 0.4, 1); //end sprite.Scale(subtitleLine.StartTime + 50, subtitleLine.EndTime + tick(0, 1), FontScale, FontScale - 0.2f); sprite.Fade(subtitleLine.StartTime + 50, subtitleLine.EndTime + tick(0, 1), 1, 0); } letterX += texture.BaseWidth * FontScale; } RunLine += letterX - SubtitleX; letterY += lineHeight; aniLyrics += 40; } } }
public override void Generate() { layer = GetLayer("Foreground"); beatduration = Beatmap.GetTimingPointAt(2000).BeatDuration; // Setting the fonts fontNormal = LoadFont("sb/PianoNotesRegular", new FontDescription() { FontPath = "fonts/Altero-Outline.otf", FontSize = 72, Color = Color4.White, Padding = new Vector2(5, 5), FontStyle = FontStyle.Regular, TrimTransparency = true, EffectsOnly = false, Debug = false, }, new FontOutline() { Thickness = 0, Color = Color.Transparent, }, new FontShadow() { Thickness = 0, Color = Color.Transparent, }); fontBold = LoadFont("sb/PianoNotesBold", new FontDescription() { FontPath = "fonts/Altero-Regular.otf", FontSize = 72, Color = Color4.White, Padding = new Vector2(5, 5), FontStyle = FontStyle.Bold, TrimTransparency = true, EffectsOnly = false, Debug = false, }, new FontOutline() { Thickness = 0, Color = Color.Transparent, }, new FontShadow() { Thickness = 0, Color = Color.Transparent, }); generateNote("G7", 2526, 360, false); generateNote("F#4", 2683, 320, true); generateNote("B#3", 3782, 320, false); generateNote("D#4", 3939, 280, true); generateNote("A4", 4882, 270, true); generateNote("F1", 5039, 230, false); generateNote("G#7", 5196, 190, true); }
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); } float letterX; int length = subtitleLine.Text.Length; if (length > 30) { letterX = 10; } else if (length > 20) { letterX = 0; } else { letterX = -10; } var initX = letterX; 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 angle = 15.5155 * Math.PI / 180; var Radius = position.X - initX; var x = Radius * Math.Cos(angle) + initX; var y = Radius * Math.Sin(angle) + letterY; Vector2 newPos = new Vector2((float)x, (float)y); Vector2 extraMovement = new Vector2(15f, 5f); Vector2 startPoint = new Vector2(150f, 40f); var layer2 = GetLayer("Background"); var redSquare = layer2.CreateSprite("sb/babysquare.png", Origin, newPos); redSquare.Color(subtitleLine.StartTime, 1, 0, 0); redSquare.Fade(subtitleLine.StartTime - 200, subtitleLine.StartTime, 0, 0.15); redSquare.Fade(subtitleLine.EndTime - 200, subtitleLine.EndTime, 0.15, 0); redSquare.Scale(subtitleLine.StartTime, Random(0, 2.5)); redSquare.Rotate(subtitleLine.StartTime - 200, subtitleLine.EndTime, Random(-2, 2), Random(-2, 2)); var sprite = layer.CreateSprite(texture.Path, Origin, startPoint); sprite.Move(OsbEasing.OutExpo, subtitleLine.StartTime - 200, subtitleLine.StartTime + 200, newPos - startPoint, newPos); sprite.Move(subtitleLine.StartTime + 200, subtitleLine.EndTime, newPos, newPos + extraMovement); sprite.Scale(subtitleLine.StartTime, FontScale); sprite.Fade(subtitleLine.StartTime - 200, subtitleLine.StartTime, 0, 1); sprite.Fade(subtitleLine.EndTime - 200, subtitleLine.EndTime, 1, 0); sprite.Rotate(subtitleLine.StartTime, angle); sprite.Scale(subtitleLine.StartTime - 200, subtitleLine.StartTime, 0.05, 0.25); if (additive) { sprite.Additive(subtitleLine.StartTime - 200, subtitleLine.EndTime); } } letterX += texture.BaseWidth * FontScale; } letterY += lineHeight; } } }
public override void Generate() { layer = GetLayer("Main"); beatduration = Beatmap.GetTimingPointAt(13).BeatDuration; // Loading the big notes ArrayList beeg = new ArrayList(); for (int i = 0; i < 6; i++) { if (i == 2) { continue; } Vector2 position = new Vector2(320 - 150 + i * 60, 260); var top = layer.CreateSprite("sb/piano/top.png", OsbOrigin.BottomCentre, position); var bottom = layer.CreateSprite("sb/piano/bottom.png", OsbOrigin.TopCentre, position + new Vector2(0, 0.1f * 200)); var body = layer.CreateSprite("sb/piano/body.png", OsbOrigin.BottomCentre, position); top.Scale(2369, 0.2); bottom.Scale(2369, 0.2); body.ScaleVec(2369, 0.2, 0.1); body.Rotate(2369, Math.PI); PianoNote pn1 = new PianoNote(top, bottom, body, position, false, 0.2f); pn1.fadeIn(2369); pn1.fadeOut(20117); beeg.Add(pn1); } // Loading the small notes ArrayList smol = new ArrayList(); for (int i = 0; i < 7; i++) { Vector2 position = new Vector2(320 - 180 + i * 60, 220); var top = layer.CreateSprite("sb/piano/top-fill.png", OsbOrigin.BottomCentre, position - new Vector2(0, 0.075f * 200)); var bottom = layer.CreateSprite("sb/piano/bottom-fill.png", OsbOrigin.TopCentre, position); var body = layer.CreateSprite("sb/piano/body-fill.png", OsbOrigin.BottomCentre, position); top.Scale(2369, 0.15); bottom.Scale(2369, 0.15); body.ScaleVec(2369, 0.15, 0.075); PianoNote pn1 = new PianoNote(top, bottom, body, position, true, 0.15f); pn1.fadeIn(2369); pn1.fadeOut(20117); smol.Add(pn1); } // Setting font font = LoadFont("sb/PianoNotesRegular", new FontDescription() { FontPath = "fonts/Altero-Regular.otf", FontSize = 72, Color = Color4.White, Padding = new Vector2(5, 5), FontStyle = FontStyle.Regular, TrimTransparency = true, EffectsOnly = false, Debug = false, }, new FontOutline() { Thickness = 0, Color = Color.Transparent, }, new FontShadow() { Thickness = 0, Color = Color.Transparent, }); Tuple <int, string>[] noteList = { Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(3, "A#3"), Tuple.Create(0, "C4"), Tuple.Create(0, "C2"), Tuple.Create(0, "C3"), Tuple.Create(1, "D3"), Tuple.Create(1, "D#3"), Tuple.Create(3, "F3"), Tuple.Create(4, "A#3"), Tuple.Create(4, "G3"), Tuple.Create(4, "G4"), Tuple.Create(0, "C2"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3"), Tuple.Create(4, "A#4"), Tuple.Create(3, "F3"), Tuple.Create(4, "G3") }; double run = StartTime; foreach (var note in noteList) { if (note.Item2.Contains('#')) { clickNoteBottom((PianoNote)(beeg[note.Item1]), (int)run, note.Item2); } else { clickNoteTop((PianoNote)(smol[note.Item1]), (int)run, note.Item2); } run += tick(0, 2); } }
public void generatePerCharacter(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, bool additive) { var squaresLayer = GetLayer("lyricsSquares"); foreach (var subtitleLine in subtitles.Lines) { var letterY = SubtitleY; var i = 0; var lineOffset = 0; 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 + lineOffset; foreach (var letter in line) { var texture = font.GetTexture(letter.ToString()); if (!texture.IsEmpty) { var initialPosition = new Vector2(letterX + 40, letterY) + texture.OffsetFor(Origin) * FontScale; var position = new Vector2(letterX, letterY) + texture.OffsetFor(Origin) * FontScale; var finalPosition = new Vector2(letterX + Random(-15, 15), letterY + Random(-15, 15)) + texture.OffsetFor(Origin) * FontScale; if (squares) { for (int f = 0; f < 3; f++) { var color = Color; if (ColorVariance > 0) { ColorVariance = MathHelper.Clamp(ColorVariance, 0, 1); var hsba = Color4.ToHsl(color); var sMin = Math.Max(0, hsba.Y - ColorVariance * 0.5f); var sMax = Math.Min(sMin + ColorVariance, 1); var vMin = Math.Max(0, hsba.Z - ColorVariance * 0.5f); var vMax = Math.Min(vMin + ColorVariance, 1); color = Color4.FromHsl(new Vector4( hsba.X, (float)Random(sMin, sMax), (float)Random(vMin, vMax), hsba.W)); } var initiialRotation = Random(0, MathHelper.DegreesToRadians(360)); var endRotation = Random(0, MathHelper.DegreesToRadians(360)); var sqaureIinitPos = new Vector2(letterX + Random(-30, 30), letterY + Random(-30, 30)) + texture.OffsetFor(Origin) * FontScale; var squarePosition = new Vector2(letterX + Random(-15, 15), letterY + Random(-15, 15)) + texture.OffsetFor(Origin) * FontScale; var square = squaresLayer.CreateSprite("sb/etc/p.png", Origin, squarePosition); square.Move(subtitleLine.StartTime - 400 + i, subtitleLine.StartTime + i, sqaureIinitPos, squarePosition); square.Scale(subtitleLine.StartTime - 400 + i, subtitleLine.EndTime, 20, 20); square.Additive(subtitleLine.StartTime - 400 + i, subtitleLine.EndTime); square.Fade(subtitleLine.StartTime - 400 + i, subtitleLine.StartTime + i, 0, 0.1); square.Rotate(subtitleLine.StartTime - 400 + i, subtitleLine.EndTime, initiialRotation, endRotation); square.Color(subtitleLine.StartTime - 400 + i, color); square.Fade(subtitleLine.EndTime - 400, subtitleLine.EndTime, 0.1, 0); } } var sprite = layer.CreateSprite(texture.Path, Origin, position); sprite.Move(OsbEasing.Out, subtitleLine.StartTime - 400 + i, subtitleLine.StartTime + i, initialPosition, position); // sprite.Scale(subtitleLine.StartTime - 200 + i, subtitleLine.StartTime + i, 0, FontScale); // sprite.Rotate(OsbEasing.Out, subtitleLine.StartTime - 400 + i, subtitleLine.StartTime + i, MathHelper.DegreesToRadians(Random(0, 360)), MathHelper.DegreesToRadians(0)); sprite.Fade(OsbEasing.Out, subtitleLine.StartTime - 400 + i, subtitleLine.StartTime + i, 0, 1); // sprite.MoveY(subtitleLine.StartTime - 200 + i, subtitleLine.StartTime + i, letterY - 15, letterY); sprite.Fade(OsbEasing.In, subtitleLine.EndTime - 400, subtitleLine.EndTime, 1, 0); sprite.Scale(OsbEasing.In, subtitleLine.EndTime - 400, subtitleLine.EndTime, FontScale, 0); sprite.Move(OsbEasing.In, subtitleLine.EndTime - 400, subtitleLine.EndTime, position, finalPosition); if (additive) { sprite.Additive(subtitleLine.StartTime - 400, subtitleLine.EndTime); } i += 65; } letterX += texture.BaseWidth * FontScale; } // lineOffset += 120; letterY += lineHeight; } } }
public void CreateLyrics(FontGenerator font, List <Lyric> lyrics, LyricGeneration lyricType) { }