|
|
|
@ -35,9 +35,7 @@ impl Plugin for Display3dPlugin {
|
|
|
|
set_board_model.run_if(any_component_added::<game::BoardComponent>),
|
|
|
|
set_board_model.run_if(any_component_added::<game::BoardComponent>),
|
|
|
|
set_tile_hitbox.run_if(any_component_added::<game::Tile>),
|
|
|
|
set_tile_hitbox.run_if(any_component_added::<game::Tile>),
|
|
|
|
set_piece_position.run_if(any_component_changed::<BoardIndex>),
|
|
|
|
set_piece_position.run_if(any_component_changed::<BoardIndex>),
|
|
|
|
set_piece_texture
|
|
|
|
set_piece_texture.run_if(any_component_changed::<Side>),
|
|
|
|
.run_if(any_component_changed::<Side>)
|
|
|
|
|
|
|
|
.after(game::set_side),
|
|
|
|
|
|
|
|
select
|
|
|
|
select
|
|
|
|
.run_if(in_state(GameState::Play))
|
|
|
|
.run_if(in_state(GameState::Play))
|
|
|
|
.run_if(in_state(DisplayState::Display3d))
|
|
|
|
.run_if(in_state(DisplayState::Display3d))
|
|
|
|
@ -59,11 +57,17 @@ impl Plugin for Display3dPlugin {
|
|
|
|
.run_if(in_state(GameState::Play))
|
|
|
|
.run_if(in_state(GameState::Play))
|
|
|
|
.run_if(in_state(DisplayState::Display3d)),
|
|
|
|
.run_if(in_state(DisplayState::Display3d)),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.add_systems(OnEnter(DisplayState::Display3d), activate::<Display3d>)
|
|
|
|
.add_systems(
|
|
|
|
|
|
|
|
OnEnter(DisplayState::Display3d),
|
|
|
|
|
|
|
|
(activate::<Display3d>, set_piece_texture),
|
|
|
|
|
|
|
|
)
|
|
|
|
.add_systems(OnExit(DisplayState::Display3d), deactivate::<Display3d>)
|
|
|
|
.add_systems(OnExit(DisplayState::Display3d), deactivate::<Display3d>)
|
|
|
|
.add_systems(
|
|
|
|
.add_systems(
|
|
|
|
OnEnter(GameState::Play),
|
|
|
|
OnEnter(GameState::Play),
|
|
|
|
|
|
|
|
(
|
|
|
|
activate::<Display3d>.run_if(in_state(DisplayState::Display3d)),
|
|
|
|
activate::<Display3d>.run_if(in_state(DisplayState::Display3d)),
|
|
|
|
|
|
|
|
set_piece_texture,
|
|
|
|
|
|
|
|
),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.add_systems(
|
|
|
|
.add_systems(
|
|
|
|
OnExit(GameState::Play),
|
|
|
|
OnExit(GameState::Play),
|
|
|
|
@ -344,23 +348,26 @@ fn mouse_zoom(
|
|
|
|
/// PERF: We are saving what to work on in a Vector which is bad.
|
|
|
|
/// 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.
|
|
|
|
/// CAVEAT: We are only exeucting this when a piece changes or state is changed.
|
|
|
|
fn set_piece_texture(
|
|
|
|
fn set_piece_texture(
|
|
|
|
events: Query<(Entity, &Piece, &Side), (With<game::Piece>, With<Display3d>, Changed<Side>)>,
|
|
|
|
events: Query<
|
|
|
|
all: Query<(Entity, &Piece, &Side), (With<game::Piece>, With<Display3d>)>,
|
|
|
|
(Entity, &Piece, &Side),
|
|
|
|
|
|
|
|
(
|
|
|
|
|
|
|
|
With<game::Piece>,
|
|
|
|
|
|
|
|
With<Display3d>,
|
|
|
|
|
|
|
|
Or<(Changed<Side>, Added<Side>)>,
|
|
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
>,
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
assets_map: Res<AssetsMap>,
|
|
|
|
assets_map: Res<AssetsMap>,
|
|
|
|
children: Query<&Children>,
|
|
|
|
children: Query<&Children>,
|
|
|
|
mut models: Query<(&Name, &mut Handle<StandardMaterial>)>,
|
|
|
|
mut models: Query<(&Name, &mut Handle<StandardMaterial>)>,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
let pieces = if events.is_empty() {
|
|
|
|
events.iter().for_each(|(entity, piece, side)| {
|
|
|
|
all.iter().collect::<Vec<(Entity, &Piece, &Side)>>()
|
|
|
|
info!("Checking piece texture for {:?}", entity);
|
|
|
|
} else {
|
|
|
|
|
|
|
|
events.iter().collect::<Vec<(Entity, &Piece, &Side)>>()
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
pieces.iter().for_each(|(entity, piece, side)| {
|
|
|
|
|
|
|
|
if let Some(gltf) = gltfs.get(&assets_map.models) {
|
|
|
|
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) {
|
|
|
|
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") => {
|
|
|
|
(Piece::Queen, Side::A, "Queen.0") => {
|
|
|
|
*m = gltf
|
|
|
|
*m = gltf
|
|
|
|
.named_materials
|
|
|
|
.named_materials
|
|
|
|
|