mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-05-02 02:23:56 +00:00
Implement the animation system from the Phase 1 plan: Protocol: Add walkAnimId/idleAnimId fields to PlayerStateMsg (2 extra bytes per 15Hz tick), add MSG_EMOTE (type 9) with EmoteMsg struct, and define shared animation lookup tables (walk: 6 anims, idle: 3, emote: 2). NetworkManager: Store local walk/idle animation indices, include them in every state broadcast, handle incoming MSG_EMOTE by dispatching to the target remote player's TriggerEmote(). Add SetWalkAnimation(), SetIdleAnimation(), SendEmote(), GetPlayerCount() public API. RemotePlayer: Replace per-animation raw pointers with AnimCache struct and lazy m_animCacheMap (name -> ROI map, built on first use, cleared on Despawn). UpdateFromNetwork() detects walk/idle ID changes and swaps the active animation cache. UpdateAnimation() now has three states: moving (configurable walk anim), emote (one-shot with duration tracking, interrupted by movement), and idle (configurable idle anim after 2.5s timeout). Add TriggerEmote() for one-shot emote playback. WASM exports: mp_set_walk_animation(), mp_set_idle_animation(), mp_trigger_emote(), mp_get_player_count() with EMSCRIPTEN_KEEPALIVE. CMakeLists.txt adds EXPORTED_FUNCTIONS and EXPORTED_RUNTIME_METHODS for Svelte ccall/cwrap access. https://claude.ai/code/session_01BEYdu8gXr1QmYwzRRgaEA6 |
||
|---|---|---|
| .. | ||
| include/extensions | ||
| src | ||