public async Task <TraceTime> SaveTraceTimeAsync(TraceTime traceTime)
        {
            using (IDbConnection connection = new NpgsqlConnection(GetConnectionString()))
            {
                var sql = @"INSERT INTO tracetime(filedataid, tracename, filetracetime)
                            VALUES(@FileDataId, @TraceName, @FileTraceTime);
                            RETURNING tracetimeid;";

                traceTime.TraceTimeId = await connection.ExecuteScalarAsync <int>(sql, traceTime);

                return(traceTime);
            }
        }
Exemple #2
0
        public void generatePerCharacter(FontGenerator font, SubtitleSet subtitles, StoryboardLayer layer, string TimestampSplit, string TraceSplit)
        {
            var TimestampArray = Array.ConvertAll(TimestampSplit.Split(','), s => int.Parse(s));
            var LineStart      = 0;
            var LineEnd        = 0;
            var RunLine        = 0f;
            var aniLyrics      = 0;

            //Trace part

            foreach (var TraceTime in TraceSplit.Split(';'))
            {
                var trace            = layer.CreateSprite(TracePath, OsbOrigin.Centre);
                var TraceTimeSplited = Array.ConvertAll(TraceTime.Split(','), s => int.Parse(s));
                var StartTrace       = TraceTimeSplited[0];
                var EndTrace         = TraceTimeSplited[1];
                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, TraceOpacity);
                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, TraceOpacity, 0);
            }

            //End Trace part

            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 - tick(0, 0.75), LineStart - tick(0, 1), 0, 0.4);
                            sprite.Move(LineStart - tick(0, 0.75), LineStart - tick(0, 1), 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;
                }
            }
        }