From 0bd3fb0e80c252ca2f09213947e5e85bc9b88c92 Mon Sep 17 00:00:00 2001 From: PROMETHIA-27 <42193387+PROMETHIA-27@users.noreply.github.com> Date: Sat, 26 Jul 2025 13:12:37 -0400 Subject: [PATCH] fix character model swapping (#61) --- crates/shared/src/player.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/crates/shared/src/player.rs b/crates/shared/src/player.rs index d263b5b..f4a88d6 100644 --- a/crates/shared/src/player.rs +++ b/crates/shared/src/player.rs @@ -186,12 +186,18 @@ fn setup_animations_marker_for_player( fn on_update_head_mesh( trigger: Trigger, mut commands: Commands, - body_mesh: Single>, + body_mesh: Single<(Entity, &Children), With>, + animated_characters: Query<&AnimatedCharacter>, mut player: Single<&mut ActiveHead, With>, head_db: Res, audio_assets: Res, -) { - let body_mesh = *body_mesh; +) -> Result { + let (body_mesh, mesh_children) = *body_mesh; + + let animated_char = mesh_children + .iter() + .find(|child| animated_characters.contains(*child)) + .ok_or("tried to update head mesh before AnimatedCharacter was readded")?; player.0 = trigger.0; @@ -199,11 +205,10 @@ fn on_update_head_mesh( commands.trigger(PlaySound::Head(head_str.to_string())); - commands.entity(body_mesh).despawn_related::(); - commands - .entity(body_mesh) - .with_child(AnimatedCharacter::new(trigger.0)); + .entity(animated_char) + .remove::() + .insert(AnimatedCharacter::new(trigger.0)); //TODO: make part of full character mesh later if head_db.head_stats(trigger.0).controls == HeadControls::Plane { @@ -216,4 +221,6 @@ fn on_update_head_mesh( }, )); } + + Ok(()) }