From 012593b891b1242db3a6965aaa5939f18b2cea6e Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Fri, 17 Nov 2023 15:46:17 -0800 Subject: [PATCH] Fixed bug with 3d not having textures on startup --- src/display3d.rs | 37 ++++++++++++++++++++++--------------- src/game.rs | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/display3d.rs b/src/display3d.rs index 440026d..476e3fa 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -35,9 +35,7 @@ impl Plugin for Display3dPlugin { set_board_model.run_if(any_component_added::), set_tile_hitbox.run_if(any_component_added::), set_piece_position.run_if(any_component_changed::), - set_piece_texture - .run_if(any_component_changed::) - .after(game::set_side), + set_piece_texture.run_if(any_component_changed::), select .run_if(in_state(GameState::Play)) .run_if(in_state(DisplayState::Display3d)) @@ -59,11 +57,17 @@ impl Plugin for Display3dPlugin { .run_if(in_state(GameState::Play)) .run_if(in_state(DisplayState::Display3d)), ) - .add_systems(OnEnter(DisplayState::Display3d), activate::) + .add_systems( + OnEnter(DisplayState::Display3d), + (activate::, set_piece_texture), + ) .add_systems(OnExit(DisplayState::Display3d), deactivate::) .add_systems( OnEnter(GameState::Play), - activate::.run_if(in_state(DisplayState::Display3d)), + ( + activate::.run_if(in_state(DisplayState::Display3d)), + set_piece_texture, + ), ) .add_systems( OnExit(GameState::Play), @@ -344,23 +348,26 @@ fn mouse_zoom( /// PERF: We are saving what to work on in a Vector which is bad. /// CAVEAT: We are only exeucting this when a piece changes or state is changed. fn set_piece_texture( - events: Query<(Entity, &Piece, &Side), (With, With, Changed)>, - all: Query<(Entity, &Piece, &Side), (With, With)>, + events: Query< + (Entity, &Piece, &Side), + ( + With, + With, + Or<(Changed, Added)>, + ), + >, gltfs: Res>, assets_map: Res, children: Query<&Children>, mut models: Query<(&Name, &mut Handle)>, ) { - let pieces = if events.is_empty() { - all.iter().collect::>() - } else { - events.iter().collect::>() - }; - pieces.iter().for_each(|(entity, piece, side)| { + events.iter().for_each(|(entity, piece, side)| { + info!("Checking piece texture for {:?}", entity); if let Some(gltf) = gltfs.get(&assets_map.models) { - children.iter_descendants(*entity).for_each(|child| { + children.iter_descendants(entity).for_each(|child| { if let Ok((n, mut m)) = models.get_mut(child) { - match (*piece, *side, n.as_str()) { + info!("Setting piece texture for {:?}", child); + match (*piece, side, n.as_str()) { (Piece::Queen, Side::A, "Queen.0") => { *m = gltf .named_materials diff --git a/src/game.rs b/src/game.rs index 65e95d7..886a9da 100644 --- a/src/game.rs +++ b/src/game.rs @@ -13,7 +13,7 @@ impl Plugin for GamePlugin { ( menu::exit_to_menu.run_if(in_state(GameState::Play)), update_board.run_if(on_event::()).after(select_sync), - set_side.run_if(on_event::()), // TODO: correct run_if? + set_side.run_if(on_event::()).after(update_board), cancel_place.run_if(|buttons: Res>| -> bool { buttons.just_pressed(MouseButton::Right) }),