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()); + } + }) } }) }