From bed7a052f3fb3a00ee27c9c0ea556fc712611368 Mon Sep 17 00:00:00 2001 From: DaZuo0122 <1085701449@qq.com> Date: Sun, 15 Feb 2026 16:51:17 +0800 Subject: [PATCH] Add: frames to each state, more smooth animation --- assets/sprite-packs/default/atlas.png | Bin 404 -> 0 bytes assets/sprite-packs/default/manifest.json | 28 +++++++++---------- assets/sprite-packs/demogorgon/manifest.json | 28 +++++++++---------- assets/sprite-packs/ferris/manifest.json | 28 +++++++++---------- crates/sprimo-runtime-core/src/lib.rs | 11 +++++++- docs/CONFIG_REFERENCE.md | 2 +- docs/TAURI_RUNTIME_TESTING.md | 2 +- frontend/tauri-ui/src/main.tsx | 5 ++-- frontend/tauri-ui/src/renderer/pixi_pet.ts | 2 +- 9 files changed, 58 insertions(+), 48 deletions(-) delete mode 100644 assets/sprite-packs/default/atlas.png diff --git a/assets/sprite-packs/default/atlas.png b/assets/sprite-packs/default/atlas.png deleted file mode 100644 index f1e5d1e2a80d7c3682be987d169c955e1e9038da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKnRd*d z1CMzG&Q>x6ktwBSLmm$zcieb?V69yNmkfIaj|_h^ Y7AUEn`}@_49T<`fp00i_>zopr0O?9_v;Y7A diff --git a/assets/sprite-packs/default/manifest.json b/assets/sprite-packs/default/manifest.json index b133381..c77226e 100644 --- a/assets/sprite-packs/default/manifest.json +++ b/assets/sprite-packs/default/manifest.json @@ -8,74 +8,74 @@ { "name": "idle", "fps": 1, - "frames": [0, 1, 2, 3, 4, 5, 6, 7] + "frames": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7] }, { "name": "active", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "happy", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "love", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "excited", "fps": 1, - "frames": [16, 17, 18, 19, 20, 21, 22, 23] + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23] }, { "name": "celebrate", "fps": 2, - "frames": [16, 17, 18, 19, 20, 21, 22, 23], + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23], "one_shot": true }, { "name": "success", "fps": 2, - "frames": [16, 17, 18, 19, 20, 21, 22, 23], + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23], "one_shot": true }, { "name": "sleepy", "fps": 1, - "frames": [24, 25, 26, 27, 28, 29, 30, 31] + "frames": [24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31] }, { "name": "snoring", "fps": 1, - "frames": [24, 25, 26, 27, 28, 29, 30, 31] + "frames": [24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31] }, { "name": "working", "fps": 1, - "frames": [32, 33, 34, 35, 36, 37, 38, 39] + "frames": [32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39] }, { "name": "angry", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "surprised", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "shy", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "error", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "dragging", diff --git a/assets/sprite-packs/demogorgon/manifest.json b/assets/sprite-packs/demogorgon/manifest.json index 3908fa8..033315a 100644 --- a/assets/sprite-packs/demogorgon/manifest.json +++ b/assets/sprite-packs/demogorgon/manifest.json @@ -8,74 +8,74 @@ { "name": "idle", "fps": 1, - "frames": [0, 1, 2, 3, 4, 5, 6, 7] + "frames": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7] }, { "name": "active", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "happy", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "love", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "excited", "fps": 1, - "frames": [16, 17, 18, 19, 20, 21, 22, 23] + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23] }, { "name": "celebrate", "fps": 2, - "frames": [16, 17, 18, 19, 20, 21, 22, 23], + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23], "one_shot": true }, { "name": "success", "fps": 2, - "frames": [16, 17, 18, 19, 20, 21, 22, 23], + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23], "one_shot": true }, { "name": "sleepy", "fps": 1, - "frames": [24, 25, 26, 27, 28, 29, 30, 31] + "frames": [24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31] }, { "name": "snoring", "fps": 1, - "frames": [24, 25, 26, 27, 28, 29, 30, 31] + "frames": [24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31] }, { "name": "working", "fps": 1, - "frames": [32, 33, 34, 35, 36, 37, 38, 39] + "frames": [32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39] }, { "name": "angry", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "surprised", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "shy", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "error", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "dragging", diff --git a/assets/sprite-packs/ferris/manifest.json b/assets/sprite-packs/ferris/manifest.json index b421ab1..4393fec 100644 --- a/assets/sprite-packs/ferris/manifest.json +++ b/assets/sprite-packs/ferris/manifest.json @@ -8,74 +8,74 @@ { "name": "idle", "fps": 1, - "frames": [0, 1, 2, 3, 4, 5, 6, 7] + "frames": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7] }, { "name": "active", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "happy", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "love", "fps": 1, - "frames": [8, 9, 10, 11, 12, 13, 14, 15] + "frames": [8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15] }, { "name": "excited", "fps": 1, - "frames": [16, 17, 18, 19, 20, 21, 22, 23] + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23] }, { "name": "celebrate", "fps": 2, - "frames": [16, 17, 18, 19, 20, 21, 22, 23], + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23], "one_shot": true }, { "name": "success", "fps": 2, - "frames": [16, 17, 18, 19, 20, 21, 22, 23], + "frames": [16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23], "one_shot": true }, { "name": "sleepy", "fps": 1, - "frames": [24, 25, 26, 27, 28, 29, 30, 31] + "frames": [24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31] }, { "name": "snoring", "fps": 1, - "frames": [24, 25, 26, 27, 28, 29, 30, 31] + "frames": [24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31] }, { "name": "working", "fps": 1, - "frames": [32, 33, 34, 35, 36, 37, 38, 39] + "frames": [32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39] }, { "name": "angry", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "surprised", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "shy", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "error", "fps": 1, - "frames": [40, 41, 42, 43, 44, 45, 46, 47] + "frames": [40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47] }, { "name": "dragging", diff --git a/crates/sprimo-runtime-core/src/lib.rs b/crates/sprimo-runtime-core/src/lib.rs index c4de15b..0ca59c4 100644 --- a/crates/sprimo-runtime-core/src/lib.rs +++ b/crates/sprimo-runtime-core/src/lib.rs @@ -11,7 +11,7 @@ use tokio::sync::{mpsc, Mutex}; use tracing::warn; const TAURI_ANIMATION_SLOWDOWN_FACTOR_MIN: u8 = 1; -const TAURI_ANIMATION_SLOWDOWN_FACTOR_MAX: u8 = 20; +const TAURI_ANIMATION_SLOWDOWN_FACTOR_MAX: u8 = 200; #[derive(Debug, Error)] pub enum RuntimeCoreError { @@ -628,6 +628,15 @@ mod tests { core.frontend_tauri_animation_slowdown_factor().expect("get"), 1 ); + + let upper = core + .set_frontend_tauri_animation_slowdown_factor(201) + .expect("set high"); + assert_eq!(upper, 200); + assert_eq!( + core.frontend_tauri_animation_slowdown_factor().expect("get"), + 200 + ); } #[test] diff --git a/docs/CONFIG_REFERENCE.md b/docs/CONFIG_REFERENCE.md index 2f41a11..bf07dac 100644 --- a/docs/CONFIG_REFERENCE.md +++ b/docs/CONFIG_REFERENCE.md @@ -52,5 +52,5 @@ tauri_animation_slowdown_factor = 3 - `frontend.backend` selects runtime frontend implementation (`bevy` or `tauri`). - `frontend.debug_overlay_visible` controls whether tauri window debug diagnostics panel is shown. - `frontend.tauri_animation_slowdown_factor` controls tauri animation pacing multiplier. - valid range: `1..20` + valid range: `1..200` effective frame interval: `(1000 / clip_fps) * factor` diff --git a/docs/TAURI_RUNTIME_TESTING.md b/docs/TAURI_RUNTIME_TESTING.md index 7405e8f..9f73800 100644 --- a/docs/TAURI_RUNTIME_TESTING.md +++ b/docs/TAURI_RUNTIME_TESTING.md @@ -145,7 +145,7 @@ An issue touching Tauri runtime behaviors must satisfy all requirements before ` - value persists after restart 5. Change animation speed factor slider and verify: - runtime animation pace updates immediately in main overlay -- value is clamped to `1..20` +- value is clamped to `1..200` - value persists after restart via `frontend.tauri_animation_slowdown_factor` 6. Toggle `Visible` and verify: - main overlay hide/show behavior diff --git a/frontend/tauri-ui/src/main.tsx b/frontend/tauri-ui/src/main.tsx index e521c59..06f9877 100644 --- a/frontend/tauri-ui/src/main.tsx +++ b/frontend/tauri-ui/src/main.tsx @@ -42,7 +42,7 @@ const SCALE_MAX = 3.0; const LOGICAL_BASE_FRAME_WIDTH = 512; const LOGICAL_BASE_FRAME_HEIGHT = 512; const SLOWDOWN_FACTOR_MIN = 1; -const SLOWDOWN_FACTOR_MAX = 20; +const SLOWDOWN_FACTOR_MAX = 200; const SLOWDOWN_FACTOR_DEFAULT = 3; async function invokeSetSpritePack(packIdOrPath: string): Promise { @@ -725,7 +725,8 @@ function SettingsWindow(): JSX.Element {