Esempio n. 1
0
    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;
                }
            }
        }
Esempio n. 4
0
        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;
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        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)));
            }
        }
Esempio n. 11
0
        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;
        }
Esempio n. 12
0
        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;
            }
        }
Esempio n. 14
0
        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);
                }
            }
        }
Esempio n. 15
0
        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);
                }
            }
        }
Esempio n. 16
0
        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);
                }
            }
        }
Esempio n. 17
0
        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;
                }
            }
        }
Esempio n. 19
0
        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;
                }
            }
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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;
                }
            }
        }
Esempio n. 22
0
    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);
        }
    }
Esempio n. 23
0
        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);
                }
            }
        }
Esempio n. 24
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);
            }
        }
Esempio n. 25
0
        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);
        }
Esempio n. 26
0
        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;
            }
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        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);
                }
            }
        }
Esempio n. 29
0
    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);
        }
    }
Esempio n. 30
0
        // 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);
        }