From 668bb64e681a48c2a2a0c634c5fc3a71cca532e9 Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Fri, 27 Oct 2023 22:34:37 -0700 Subject: [PATCH] pickup/putdown animationsgit add .; git commit --- src/display3d.rs | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/src/display3d.rs b/src/display3d.rs index 95d252a..5b8e1cb 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -447,20 +447,51 @@ fn selected_gizmo( } fn pick_up( - mut events: Query<&mut Transform, (With, With, Added)>, + mut events: Query< + (Entity, &game::Piece), + (With, With, Added), + >, + assets_map: Res, + gltfs: Res>, + children: Query<&Children>, + mut players: Query<&mut AnimationPlayer>, ) { - events.iter_mut().for_each(|mut transform| { - transform.translation += Vec3::Y; + events.iter_mut().for_each(|(entity, piece)| { + let gltf = gltfs.get(&assets_map.models).expect("Load GLTF content"); + children.iter_descendants(entity).for_each(|child| { + if let Ok(mut player) = players.get_mut(child) { + let animation = match piece { + game::Piece::Queen => gltf.named_animations.get("QueenPickup"), + game::Piece::Drone => gltf.named_animations.get("DronePickup"), + game::Piece::Pawn => gltf.named_animations.get("PawnPickup"), + }; + player.play(animation.expect("Pickup Animation").clone()); + } + }) }); } fn put_down( mut events: RemovedComponents, - mut query: Query<&mut Transform, (With, With)>, + mut query: Query<&game::Piece, (With, With)>, + assets_map: Res, + gltfs: Res>, + children: Query<&Children>, + mut players: Query<&mut AnimationPlayer>, ) { events.iter().for_each(|entity| { - if let Ok(mut transform) = query.get_mut(entity) { - transform.translation -= Vec3::Y; + if let Ok(piece) = query.get_mut(entity) { + let gltf = gltfs.get(&assets_map.models).expect("Load GLTF content"); + children.iter_descendants(entity).for_each(|child| { + if let Ok(mut player) = players.get_mut(child) { + let animation = match piece { + game::Piece::Queen => gltf.named_animations.get("QueenPutDown"), + game::Piece::Drone => gltf.named_animations.get("DronePutDown"), + game::Piece::Pawn => gltf.named_animations.get("PawnPutDown"), + }; + player.play(animation.expect("PutDown Animation").clone()); + } + }) } }) }