From f28b7602fb5a9d644bc302ab9ccd1e7520596837 Mon Sep 17 00:00:00 2001 From: Lee-Orr Date: Mon, 25 Mar 2024 16:14:57 -0400 Subject: [PATCH] Fix for animation desyncronization bug Issue turned out to be that in some circumstances, the `group_by` iterator will create multiple groups for a single key - and sometimes those groups can be empty. This lead to situations where an animation track will end up empty until enough changed to re-shuffle things in the query iterator. The fix is switching to `into_group_map_by` - which will put all grouped items into a hashmap instead, ensuring no duplicate keys. --- studio/assets/desync.glb | Bin 0 -> 14721952 bytes studio/assets/desync.scn.ron | 936 ++++++++++++++++++++++++++ studio/src/anim/timeline_animation.rs | 33 +- 3 files changed, 955 insertions(+), 14 deletions(-) create mode 100644 studio/assets/desync.glb create mode 100644 studio/assets/desync.scn.ron diff --git a/studio/assets/desync.glb b/studio/assets/desync.glb new file mode 100644 index 0000000000000000000000000000000000000000..ab9af799c983fc758ca7fa7433a3bb2dab0a5a90 GIT binary patch literal 14721952 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