浏览代码

Merge pull request #132 from tsoding/59

(#59) Add milliseconds support to the chat log format
Alexey Kutepov 5 年之前
父节点
当前提交
3231b89d06
共有 100 个文件被更改,包括 36 次插入11 次删除
  1. 1 1
      sample.txt
  2. 3 3
      src/vodus_main.cpp
  3. 32 7
      src/vodus_message.cpp
  4. 二进制
      test/pajaWalk/expected-frames/100-frame.png
  5. 二进制
      test/pajaWalk/expected-frames/101-frame.png
  6. 二进制
      test/pajaWalk/expected-frames/102-frame.png
  7. 二进制
      test/pajaWalk/expected-frames/103-frame.png
  8. 二进制
      test/pajaWalk/expected-frames/104-frame.png
  9. 二进制
      test/pajaWalk/expected-frames/105-frame.png
  10. 二进制
      test/pajaWalk/expected-frames/106-frame.png
  11. 二进制
      test/pajaWalk/expected-frames/107-frame.png
  12. 二进制
      test/pajaWalk/expected-frames/108-frame.png
  13. 二进制
      test/pajaWalk/expected-frames/109-frame.png
  14. 二进制
      test/pajaWalk/expected-frames/110-frame.png
  15. 二进制
      test/pajaWalk/expected-frames/111-frame.png
  16. 二进制
      test/pajaWalk/expected-frames/112-frame.png
  17. 二进制
      test/pajaWalk/expected-frames/113-frame.png
  18. 二进制
      test/pajaWalk/expected-frames/114-frame.png
  19. 二进制
      test/pajaWalk/expected-frames/115-frame.png
  20. 二进制
      test/pajaWalk/expected-frames/116-frame.png
  21. 二进制
      test/pajaWalk/expected-frames/117-frame.png
  22. 二进制
      test/pajaWalk/expected-frames/118-frame.png
  23. 二进制
      test/pajaWalk/expected-frames/119-frame.png
  24. 二进制
      test/pajaWalk/expected-frames/120-frame.png
  25. 二进制
      test/pajaWalk/expected-frames/121-frame.png
  26. 二进制
      test/pajaWalk/expected-frames/122-frame.png
  27. 二进制
      test/pajaWalk/expected-frames/123-frame.png
  28. 二进制
      test/pajaWalk/expected-frames/124-frame.png
  29. 二进制
      test/pajaWalk/expected-frames/125-frame.png
  30. 二进制
      test/pajaWalk/expected-frames/126-frame.png
  31. 二进制
      test/pajaWalk/expected-frames/24-frame.png
  32. 二进制
      test/pajaWalk/expected-frames/25-frame.png
  33. 二进制
      test/pajaWalk/expected-frames/26-frame.png
  34. 二进制
      test/pajaWalk/expected-frames/27-frame.png
  35. 二进制
      test/pajaWalk/expected-frames/28-frame.png
  36. 二进制
      test/pajaWalk/expected-frames/29-frame.png
  37. 二进制
      test/pajaWalk/expected-frames/30-frame.png
  38. 二进制
      test/pajaWalk/expected-frames/31-frame.png
  39. 二进制
      test/pajaWalk/expected-frames/32-frame.png
  40. 二进制
      test/pajaWalk/expected-frames/33-frame.png
  41. 二进制
      test/pajaWalk/expected-frames/34-frame.png
  42. 二进制
      test/pajaWalk/expected-frames/35-frame.png
  43. 二进制
      test/pajaWalk/expected-frames/36-frame.png
  44. 二进制
      test/pajaWalk/expected-frames/37-frame.png
  45. 二进制
      test/pajaWalk/expected-frames/38-frame.png
  46. 二进制
      test/pajaWalk/expected-frames/39-frame.png
  47. 二进制
      test/pajaWalk/expected-frames/40-frame.png
  48. 二进制
      test/pajaWalk/expected-frames/41-frame.png
  49. 二进制
      test/pajaWalk/expected-frames/42-frame.png
  50. 二进制
      test/pajaWalk/expected-frames/43-frame.png
  51. 二进制
      test/pajaWalk/expected-frames/44-frame.png
  52. 二进制
      test/pajaWalk/expected-frames/45-frame.png
  53. 二进制
      test/pajaWalk/expected-frames/46-frame.png
  54. 二进制
      test/pajaWalk/expected-frames/47-frame.png
  55. 二进制
      test/pajaWalk/expected-frames/48-frame.png
  56. 二进制
      test/pajaWalk/expected-frames/49-frame.png
  57. 二进制
      test/pajaWalk/expected-frames/50-frame.png
  58. 二进制
      test/pajaWalk/expected-frames/51-frame.png
  59. 二进制
      test/pajaWalk/expected-frames/52-frame.png
  60. 二进制
      test/pajaWalk/expected-frames/53-frame.png
  61. 二进制
      test/pajaWalk/expected-frames/54-frame.png
  62. 二进制
      test/pajaWalk/expected-frames/55-frame.png
  63. 二进制
      test/pajaWalk/expected-frames/56-frame.png
  64. 二进制
      test/pajaWalk/expected-frames/57-frame.png
  65. 二进制
      test/pajaWalk/expected-frames/58-frame.png
  66. 二进制
      test/pajaWalk/expected-frames/59-frame.png
  67. 二进制
      test/pajaWalk/expected-frames/60-frame.png
  68. 二进制
      test/pajaWalk/expected-frames/61-frame.png
  69. 二进制
      test/pajaWalk/expected-frames/62-frame.png
  70. 二进制
      test/pajaWalk/expected-frames/63-frame.png
  71. 二进制
      test/pajaWalk/expected-frames/64-frame.png
  72. 二进制
      test/pajaWalk/expected-frames/65-frame.png
  73. 二进制
      test/pajaWalk/expected-frames/66-frame.png
  74. 二进制
      test/pajaWalk/expected-frames/67-frame.png
  75. 二进制
      test/pajaWalk/expected-frames/68-frame.png
  76. 二进制
      test/pajaWalk/expected-frames/69-frame.png
  77. 二进制
      test/pajaWalk/expected-frames/70-frame.png
  78. 二进制
      test/pajaWalk/expected-frames/71-frame.png
  79. 二进制
      test/pajaWalk/expected-frames/72-frame.png
  80. 二进制
      test/pajaWalk/expected-frames/73-frame.png
  81. 二进制
      test/pajaWalk/expected-frames/74-frame.png
  82. 二进制
      test/pajaWalk/expected-frames/75-frame.png
  83. 二进制
      test/pajaWalk/expected-frames/76-frame.png
  84. 二进制
      test/pajaWalk/expected-frames/77-frame.png
  85. 二进制
      test/pajaWalk/expected-frames/78-frame.png
  86. 二进制
      test/pajaWalk/expected-frames/79-frame.png
  87. 二进制
      test/pajaWalk/expected-frames/80-frame.png
  88. 二进制
      test/pajaWalk/expected-frames/81-frame.png
  89. 二进制
      test/pajaWalk/expected-frames/82-frame.png
  90. 二进制
      test/pajaWalk/expected-frames/83-frame.png
  91. 二进制
      test/pajaWalk/expected-frames/84-frame.png
  92. 二进制
      test/pajaWalk/expected-frames/85-frame.png
  93. 二进制
      test/pajaWalk/expected-frames/86-frame.png
  94. 二进制
      test/pajaWalk/expected-frames/87-frame.png
  95. 二进制
      test/pajaWalk/expected-frames/88-frame.png
  96. 二进制
      test/pajaWalk/expected-frames/89-frame.png
  97. 二进制
      test/pajaWalk/expected-frames/90-frame.png
  98. 二进制
      test/pajaWalk/expected-frames/91-frame.png
  99. 二进制
      test/pajaWalk/expected-frames/92-frame.png
  100. 二进制
      test/pajaWalk/expected-frames/93-frame.png

+ 1 - 1
sample.txt

@@ -1,6 +1,6 @@
 [0:00:00] <Tsoding> /me is offline
 [0:00:01] <Tsoding> WAYTOODANK monkaTOS WAYTOODANK monkaTOS WAYTOODANK monkaTOS WAYTOODANK monkaTOS WAYTOODANK monkaTOS 
-[0:00:01] <Tsoding> forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls
+[0:00:01.50] <Tsoding> forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls forsenPls
 [0:00:02] <zhiayang> AYAYA AYAYA AYAYA AYAYA AYAYA AYAYA AYAYA AYAYA AYAYA AYAYA
 [0:00:03] <herrhotzenplotz> phpHop phpHop phpHop phpHop phpHop phpHop phpHop phpHop phpHop phpHop
 [0:00:04] <Tsoding> HELL YEEEAH BROTHAA

+ 3 - 3
src/vodus_main.cpp

@@ -23,14 +23,14 @@ void sample_chat_log_animation(Message *messages,
     const float VODUS_DELTA_TIME_SEC = 1.0f / params.fps;
     const size_t TRAILING_BUFFER_SEC = 2;
     assert(messages_size > 0);
-    const float total_t = messages[messages_size - 1].timestamp + TRAILING_BUFFER_SEC;
+    const float total_t = (float) messages[messages_size - 1].timestamp / 1000.0f + TRAILING_BUFFER_SEC;
     for (; message_end < messages_size; ++frame_index) {
         if (message_cooldown <= 0.0f) {
             message_buffer->push(messages[message_end], face, emote_cache, params);
 
             message_end += 1;
-            auto t1 = messages[message_end - 1].timestamp;
-            auto t2 = messages[message_end].timestamp;
+            auto t1 = (float) messages[message_end - 1].timestamp / 1000.0f;
+            auto t2 = (float) messages[message_end].timestamp / 1000.0f;
             message_cooldown = t2 - t1;
         }
 

+ 32 - 7
src/vodus_message.cpp

@@ -1,6 +1,6 @@
 struct Message
 {
-    time_t timestamp;
+    uint64_t timestamp;
     String_View nickname;
     String_View message;
 
@@ -156,6 +156,16 @@ struct Message_Buffer
     }
 };
 
+bool expect_optional_char(String_View *input, char x)
+{
+    if (input->count > 0 && *input->data == x) {
+        input->chop(1);
+        return true;
+    }
+
+    return false;
+}
+
 void expect_char(String_View *input, char x)
 {
     if (input->count == 0 || *input->data != x) {
@@ -175,7 +185,7 @@ String_View chop_digits(String_View *input)
     return digits;
 }
 
-time_t chop_timestamp(String_View *input)
+uint64_t chop_timestamp(String_View *input)
 {
     *input = input->trim();
 
@@ -185,12 +195,27 @@ time_t chop_timestamp(String_View *input)
     String_View minutes = chop_digits(input);
     expect_char(input, ':');
     String_View seconds = chop_digits(input);
+
+    uint64_t mseconds_value = 0;
+    if (expect_optional_char(input, '.')) {
+        auto mseconds = chop_digits(input);
+        for (size_t i = 0; i < 3; ++i) {
+            uint64_t x = 0;
+            if (mseconds.count > 0) {
+                x = *mseconds.data - '0';
+                mseconds.chop(1);
+            }
+            mseconds_value = mseconds_value * 10 + x;
+        }
+    }
+
     expect_char(input, ']');
 
-    const time_t timestamp =
-        hours.as_integer<time_t>().unwrap * 60 * 60 +
-        minutes.as_integer<time_t>().unwrap * 60 +
-        seconds.as_integer<time_t>().unwrap;
+    const uint64_t timestamp =
+        (hours.as_integer<uint64_t>().unwrap * 60 * 60 +
+         minutes.as_integer<uint64_t>().unwrap * 60 +
+         seconds.as_integer<uint64_t>().unwrap) * 1000 +
+        mseconds_value;
 
     return timestamp;
 }
@@ -214,7 +239,7 @@ size_t parse_messages_from_string_view(String_View input, Message **messages, Vi
     size_t messages_size = 0;
     while (input.count > 0 && messages_size < expected_messages_size) {
         String_View message = input.chop_by_delim('\n');
-        (*messages)[messages_size].timestamp = (int) chop_timestamp(&message);
+        (*messages)[messages_size].timestamp = chop_timestamp(&message);
         (*messages)[messages_size].nickname = chop_nickname(&message);
         (*messages)[messages_size].message = message.trim();
         messages_size++;

二进制
test/pajaWalk/expected-frames/100-frame.png


二进制
test/pajaWalk/expected-frames/101-frame.png


二进制
test/pajaWalk/expected-frames/102-frame.png


二进制
test/pajaWalk/expected-frames/103-frame.png


二进制
test/pajaWalk/expected-frames/104-frame.png


二进制
test/pajaWalk/expected-frames/105-frame.png


二进制
test/pajaWalk/expected-frames/106-frame.png


二进制
test/pajaWalk/expected-frames/107-frame.png


二进制
test/pajaWalk/expected-frames/108-frame.png


二进制
test/pajaWalk/expected-frames/109-frame.png


二进制
test/pajaWalk/expected-frames/110-frame.png


二进制
test/pajaWalk/expected-frames/111-frame.png


二进制
test/pajaWalk/expected-frames/112-frame.png


二进制
test/pajaWalk/expected-frames/113-frame.png


二进制
test/pajaWalk/expected-frames/114-frame.png


二进制
test/pajaWalk/expected-frames/115-frame.png


二进制
test/pajaWalk/expected-frames/116-frame.png


二进制
test/pajaWalk/expected-frames/117-frame.png


二进制
test/pajaWalk/expected-frames/118-frame.png


二进制
test/pajaWalk/expected-frames/119-frame.png


二进制
test/pajaWalk/expected-frames/120-frame.png


二进制
test/pajaWalk/expected-frames/121-frame.png


二进制
test/pajaWalk/expected-frames/122-frame.png


二进制
test/pajaWalk/expected-frames/123-frame.png


二进制
test/pajaWalk/expected-frames/124-frame.png


二进制
test/pajaWalk/expected-frames/125-frame.png


二进制
test/pajaWalk/expected-frames/126-frame.png


二进制
test/pajaWalk/expected-frames/24-frame.png


二进制
test/pajaWalk/expected-frames/25-frame.png


二进制
test/pajaWalk/expected-frames/26-frame.png


二进制
test/pajaWalk/expected-frames/27-frame.png


二进制
test/pajaWalk/expected-frames/28-frame.png


二进制
test/pajaWalk/expected-frames/29-frame.png


二进制
test/pajaWalk/expected-frames/30-frame.png


二进制
test/pajaWalk/expected-frames/31-frame.png


二进制
test/pajaWalk/expected-frames/32-frame.png


二进制
test/pajaWalk/expected-frames/33-frame.png


二进制
test/pajaWalk/expected-frames/34-frame.png


二进制
test/pajaWalk/expected-frames/35-frame.png


二进制
test/pajaWalk/expected-frames/36-frame.png


二进制
test/pajaWalk/expected-frames/37-frame.png


二进制
test/pajaWalk/expected-frames/38-frame.png


二进制
test/pajaWalk/expected-frames/39-frame.png


二进制
test/pajaWalk/expected-frames/40-frame.png


二进制
test/pajaWalk/expected-frames/41-frame.png


二进制
test/pajaWalk/expected-frames/42-frame.png


二进制
test/pajaWalk/expected-frames/43-frame.png


二进制
test/pajaWalk/expected-frames/44-frame.png


二进制
test/pajaWalk/expected-frames/45-frame.png


二进制
test/pajaWalk/expected-frames/46-frame.png


二进制
test/pajaWalk/expected-frames/47-frame.png


二进制
test/pajaWalk/expected-frames/48-frame.png


二进制
test/pajaWalk/expected-frames/49-frame.png


二进制
test/pajaWalk/expected-frames/50-frame.png


二进制
test/pajaWalk/expected-frames/51-frame.png


二进制
test/pajaWalk/expected-frames/52-frame.png


二进制
test/pajaWalk/expected-frames/53-frame.png


二进制
test/pajaWalk/expected-frames/54-frame.png


二进制
test/pajaWalk/expected-frames/55-frame.png


二进制
test/pajaWalk/expected-frames/56-frame.png


二进制
test/pajaWalk/expected-frames/57-frame.png


二进制
test/pajaWalk/expected-frames/58-frame.png


二进制
test/pajaWalk/expected-frames/59-frame.png


二进制
test/pajaWalk/expected-frames/60-frame.png


二进制
test/pajaWalk/expected-frames/61-frame.png


二进制
test/pajaWalk/expected-frames/62-frame.png


二进制
test/pajaWalk/expected-frames/63-frame.png


二进制
test/pajaWalk/expected-frames/64-frame.png


二进制
test/pajaWalk/expected-frames/65-frame.png


二进制
test/pajaWalk/expected-frames/66-frame.png


二进制
test/pajaWalk/expected-frames/67-frame.png


二进制
test/pajaWalk/expected-frames/68-frame.png


二进制
test/pajaWalk/expected-frames/69-frame.png


二进制
test/pajaWalk/expected-frames/70-frame.png


二进制
test/pajaWalk/expected-frames/71-frame.png


二进制
test/pajaWalk/expected-frames/72-frame.png


二进制
test/pajaWalk/expected-frames/73-frame.png


二进制
test/pajaWalk/expected-frames/74-frame.png


二进制
test/pajaWalk/expected-frames/75-frame.png


二进制
test/pajaWalk/expected-frames/76-frame.png


二进制
test/pajaWalk/expected-frames/77-frame.png


二进制
test/pajaWalk/expected-frames/78-frame.png


二进制
test/pajaWalk/expected-frames/79-frame.png


二进制
test/pajaWalk/expected-frames/80-frame.png


二进制
test/pajaWalk/expected-frames/81-frame.png


二进制
test/pajaWalk/expected-frames/82-frame.png


二进制
test/pajaWalk/expected-frames/83-frame.png


二进制
test/pajaWalk/expected-frames/84-frame.png


二进制
test/pajaWalk/expected-frames/85-frame.png


二进制
test/pajaWalk/expected-frames/86-frame.png


二进制
test/pajaWalk/expected-frames/87-frame.png


二进制
test/pajaWalk/expected-frames/88-frame.png


二进制
test/pajaWalk/expected-frames/89-frame.png


二进制
test/pajaWalk/expected-frames/90-frame.png


二进制
test/pajaWalk/expected-frames/91-frame.png


二进制
test/pajaWalk/expected-frames/92-frame.png


二进制
test/pajaWalk/expected-frames/93-frame.png


部分文件因为文件数量过多而无法显示