refactor(M03): extract M2 animation playback

This commit is contained in:
2026-07-18 01:25:54 +04:00
parent 5be36376c2
commit 9b73571dcb
12 changed files with 615 additions and 85 deletions
+15
View File
@@ -37,6 +37,7 @@ Paired run 2026-07-11 подтвердил крупный coordinate/placement g
- `src/render/liquid/adt_water_scene_finalizer.gd` - stateless main-thread ADT water build/attach and optional persisted Editor ownership through the existing ADTBuilder.
- `src/render/m2/m2_runtime_mesh_rebuild_classifier.gd` - memoized billboard/UV-rotation decision for stale cached M2 runtime mesh refresh.
- `src/render/m2/m2_animated_scene_finalizer.gd` - animated PackedScene candidate ownership, historical material repair and AnimationPlayer validation.
- `src/render/m2/m2_animation_playback_controller.gd` - deterministic per-instance phase, default animation selection and native/imported playback mutation.
- `src/render/m2/m2_animation_load_pipeline_state.gd` - animated M2 threaded-load request records and completion-order finalize FIFO without I/O or Node ownership.
- `src/render/m2/m2_mesh_load_pipeline_state.gd` - static M2 threaded-load request records, terminal statuses and completion-order finalize FIFO without I/O or Mesh ownership.
- `src/render/m2/m2_mesh_resource_cache_state.gd` - normalized-path prepared static M2 Mesh references with final-shutdown lifetime.
@@ -1115,6 +1116,20 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
- Cache formats, profiles and visible rules are unchanged. Synthetic scene and
material fixtures are not asset-backed animation-fidelity or p95/p99 evidence.
## 2026-07-18 M2 Animation Playback Controller Extraction
- `M2AnimationPlaybackController` now owns the stable path/index phase formula,
ordinary/fish/bird animation-name priority, substring/first-name fallbacks and
AnimationPlayer linear-loop/play/seek mutation.
- Exact-script native animators retain depth-first pairing, the same five copied
fields, optional `prepare_runtime`, phase assignment and debug-state sampling.
- Native debug records are detached and sampled only when `debug_streaming` is
enabled; `StreamingWorldLoader` retains path normalization and exact log text.
- Loader still duplicates/transforms/attaches instances, applies visibility,
shadows and Editor ownership, owns build cursors/permits and obtains player inventory.
- Cache formats, playback priorities, phase behavior and visible rules are unchanged.
Synthetic timing is not asset-backed animation fidelity or p95/p99 evidence.
## 2026-07-17 M2 Mesh Resource Cache State Extraction
- `M2MeshResourceCacheState` now owns normalized-path references to prepared