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); } }
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; } } }