|
|
|
|
@ -311,74 +311,73 @@ fn initialize(mut commands: Commands, board: Res<game::Board>, assets: Res<Asset
|
|
|
|
|
start: 0.0,
|
|
|
|
|
duration: 12.0,
|
|
|
|
|
}, // Marks pieces as dissolving
|
|
|
|
|
))
|
|
|
|
|
.with_children(|parent| {
|
|
|
|
|
// Hitboxes
|
|
|
|
|
game::tiles().for_each(|(index, tile)| {
|
|
|
|
|
let side = Board::side(index).expect("Spawn valid side");
|
|
|
|
|
|
|
|
|
|
parent.spawn((
|
|
|
|
|
DisplayState::Display3d,
|
|
|
|
|
Display3d,
|
|
|
|
|
index,
|
|
|
|
|
tile,
|
|
|
|
|
PbrBundle {
|
|
|
|
|
mesh: assets.hitbox_shape.clone(),
|
|
|
|
|
material: assets.hitbox_material.clone(),
|
|
|
|
|
visibility: Visibility::Hidden,
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
side,
|
|
|
|
|
game::Selectable,
|
|
|
|
|
));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Valid move indicators
|
|
|
|
|
game::tiles().for_each(|(index, _)| {
|
|
|
|
|
let side = Board::side(index).expect("Spawn valid side");
|
|
|
|
|
|
|
|
|
|
parent.spawn((
|
|
|
|
|
DisplayState::Display3d,
|
|
|
|
|
Display3d,
|
|
|
|
|
index,
|
|
|
|
|
SceneBundle {
|
|
|
|
|
visibility: Visibility::Hidden,
|
|
|
|
|
transform: Transform::from_translation(board_translation(&index)),
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
side,
|
|
|
|
|
game::ValidMove,
|
|
|
|
|
));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Pieces
|
|
|
|
|
let mut angle = 0.0;
|
|
|
|
|
board.pieces().iter().for_each(|(index, piece)| {
|
|
|
|
|
let side = Board::side(*index).expect("Spawn valid side");
|
|
|
|
|
|
|
|
|
|
// Rotates each piece 90 degrees offset from the previous piece
|
|
|
|
|
let rotation = Quat::from_rotation_y(angle);
|
|
|
|
|
let transform = Transform::default().with_rotation(rotation);
|
|
|
|
|
angle += std::f32::consts::PI / 2.0;
|
|
|
|
|
|
|
|
|
|
parent.spawn((
|
|
|
|
|
side,
|
|
|
|
|
DisplayState::Display3d,
|
|
|
|
|
Display3d,
|
|
|
|
|
*piece,
|
|
|
|
|
*index,
|
|
|
|
|
SceneBundle {
|
|
|
|
|
visibility: Visibility::Hidden,
|
|
|
|
|
transform,
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
game::Selectable,
|
|
|
|
|
Dissolvable {
|
|
|
|
|
start: 1.0,
|
|
|
|
|
duration: 3.0,
|
|
|
|
|
}, // Marks pieces as dissolving
|
|
|
|
|
));
|
|
|
|
|
});
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
// Hitboxes
|
|
|
|
|
game::tiles().for_each(|(index, tile)| {
|
|
|
|
|
let side = Board::side(index).expect("Spawn valid side");
|
|
|
|
|
|
|
|
|
|
parent.spawn((
|
|
|
|
|
DisplayState::Display3d,
|
|
|
|
|
Display3d,
|
|
|
|
|
index,
|
|
|
|
|
tile,
|
|
|
|
|
PbrBundle {
|
|
|
|
|
mesh: assets.hitbox_shape.clone(),
|
|
|
|
|
material: assets.hitbox_material.clone(),
|
|
|
|
|
visibility: Visibility::Hidden,
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
side,
|
|
|
|
|
game::Selectable,
|
|
|
|
|
));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Valid move indicators
|
|
|
|
|
game::tiles().for_each(|(index, _)| {
|
|
|
|
|
let side = Board::side(index).expect("Spawn valid side");
|
|
|
|
|
|
|
|
|
|
parent.spawn((
|
|
|
|
|
DisplayState::Display3d,
|
|
|
|
|
Display3d,
|
|
|
|
|
index,
|
|
|
|
|
SceneBundle {
|
|
|
|
|
visibility: Visibility::Hidden,
|
|
|
|
|
transform: Transform::from_translation(board_translation(&index)),
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
side,
|
|
|
|
|
game::ValidMove,
|
|
|
|
|
));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Pieces
|
|
|
|
|
let mut angle = 0.0;
|
|
|
|
|
board.pieces().iter().for_each(|(index, piece)| {
|
|
|
|
|
let side = Board::side(*index).expect("Spawn valid side");
|
|
|
|
|
|
|
|
|
|
// Rotates each piece 90 degrees offset from the previous piece
|
|
|
|
|
let rotation = Quat::from_rotation_y(angle);
|
|
|
|
|
let transform = Transform::default().with_rotation(rotation);
|
|
|
|
|
angle += std::f32::consts::PI / 2.0;
|
|
|
|
|
|
|
|
|
|
parent.spawn((
|
|
|
|
|
side,
|
|
|
|
|
DisplayState::Display3d,
|
|
|
|
|
Display3d,
|
|
|
|
|
*piece,
|
|
|
|
|
*index,
|
|
|
|
|
SceneBundle {
|
|
|
|
|
visibility: Visibility::Hidden,
|
|
|
|
|
transform,
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
game::Selectable,
|
|
|
|
|
Dissolvable {
|
|
|
|
|
start: 1.0,
|
|
|
|
|
duration: 3.0,
|
|
|
|
|
}, // Marks pieces as dissolving
|
|
|
|
|
));
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
@ -1268,7 +1267,6 @@ fn continue_title(mut next_state: ResMut<NextState<GameState>>) {
|
|
|
|
|
fn dissolve_animation(
|
|
|
|
|
mut query: Query<(Entity, &Dissolvable, &mut Dissolving, &mut Visibility)>,
|
|
|
|
|
children: Query<&Children>,
|
|
|
|
|
// Used to create Handle<DissolveMaterial>
|
|
|
|
|
mut dissolve_materials: ResMut<Assets<DissolveMaterial>>,
|
|
|
|
|
object_materials: Query<(Entity, &Handle<DissolveMaterial>)>,
|
|
|
|
|
mut commands: Commands,
|
|
|
|
|
|