|
|
|
@ -42,6 +42,9 @@ impl Plugin for Display3dPlugin {
|
|
|
|
.run_if(on_event::<MouseButtonInput>()),
|
|
|
|
.run_if(on_event::<MouseButtonInput>()),
|
|
|
|
pick_up.run_if(any_component_added::<game::Selected>),
|
|
|
|
pick_up.run_if(any_component_added::<game::Selected>),
|
|
|
|
put_down.run_if(any_component_removed::<game::Selected>()),
|
|
|
|
put_down.run_if(any_component_removed::<game::Selected>()),
|
|
|
|
|
|
|
|
switch_sides
|
|
|
|
|
|
|
|
.run_if(in_state(GameState::Play))
|
|
|
|
|
|
|
|
.run_if(state_changed::<game::TurnState>()),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.add_systems(
|
|
|
|
.add_systems(
|
|
|
|
@ -59,7 +62,11 @@ impl Plugin for Display3dPlugin {
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.add_systems(
|
|
|
|
.add_systems(
|
|
|
|
OnEnter(DisplayState::Display3d),
|
|
|
|
OnEnter(DisplayState::Display3d),
|
|
|
|
(activate::<Display3d>, set_piece_texture),
|
|
|
|
(
|
|
|
|
|
|
|
|
activate::<Display3d>,
|
|
|
|
|
|
|
|
set_piece_texture,
|
|
|
|
|
|
|
|
opening_animation.run_if(run_once()),
|
|
|
|
|
|
|
|
),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.add_systems(OnExit(DisplayState::Display3d), deactivate::<Display3d>)
|
|
|
|
.add_systems(OnExit(DisplayState::Display3d), deactivate::<Display3d>)
|
|
|
|
.add_systems(
|
|
|
|
.add_systems(
|
|
|
|
@ -160,6 +167,10 @@ fn initialize(mut commands: Commands, board: Res<game::Board>, assets: Res<Asset
|
|
|
|
fn hydrate_camera(
|
|
|
|
fn hydrate_camera(
|
|
|
|
events: Query<(&Name, Entity), Added<Camera>>,
|
|
|
|
events: Query<(&Name, Entity), Added<Camera>>,
|
|
|
|
assets: Res<AssetsMap>,
|
|
|
|
assets: Res<AssetsMap>,
|
|
|
|
|
|
|
|
assets_map: Res<AssetsMap>,
|
|
|
|
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
|
|
|
|
state: Res<State<game::TurnState>>,
|
|
|
|
|
|
|
|
mut players: Query<&mut AnimationPlayer>,
|
|
|
|
mut commands: Commands,
|
|
|
|
mut commands: Commands,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
events
|
|
|
|
events
|
|
|
|
@ -167,6 +178,7 @@ fn hydrate_camera(
|
|
|
|
.filter(|(name, _)| name.as_str() == "GameCam")
|
|
|
|
.filter(|(name, _)| name.as_str() == "GameCam")
|
|
|
|
.for_each(|(_, entity)| {
|
|
|
|
.for_each(|(_, entity)| {
|
|
|
|
info!("Initialize 3d camera");
|
|
|
|
info!("Initialize 3d camera");
|
|
|
|
|
|
|
|
// Populate the components for the camera
|
|
|
|
commands.entity(entity).insert((
|
|
|
|
commands.entity(entity).insert((
|
|
|
|
Display3d,
|
|
|
|
Display3d,
|
|
|
|
DisplayState::Display3d,
|
|
|
|
DisplayState::Display3d,
|
|
|
|
@ -193,6 +205,20 @@ fn hydrate_camera(
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Name::new("3D Camera"),
|
|
|
|
Name::new("3D Camera"),
|
|
|
|
));
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let gltf = gltfs.get(&assets_map.models).expect("Load GLTF content");
|
|
|
|
|
|
|
|
// Set it to the default position by starting the initial animation
|
|
|
|
|
|
|
|
if let Ok(mut player) = players.get_mut(entity) {
|
|
|
|
|
|
|
|
info!("Animations: {:?}", gltf.named_animations.keys());
|
|
|
|
|
|
|
|
// GameCamIntro1, GameCamIntro2, GameCamSide1>2, GameCamSide2>1
|
|
|
|
|
|
|
|
let animation = match state.get() {
|
|
|
|
|
|
|
|
game::TurnState::SideA => gltf.named_animations.get("GameCamIntro1"),
|
|
|
|
|
|
|
|
game::TurnState::SideB => gltf.named_animations.get("GameCamIntro2"),
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
player
|
|
|
|
|
|
|
|
.play(animation.expect("Camera Startup").clone())
|
|
|
|
|
|
|
|
.pause();
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -587,3 +613,29 @@ fn set_tile_hitbox(
|
|
|
|
*transform = Transform::from_translation(board_translation(index));
|
|
|
|
*transform = Transform::from_translation(board_translation(index));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn opening_animation(mut players: Query<&mut AnimationPlayer, (With<Camera>, With<Display3d>)>) {
|
|
|
|
|
|
|
|
players.iter_mut().for_each(|mut player| {
|
|
|
|
|
|
|
|
info!("Playing intro camera animation");
|
|
|
|
|
|
|
|
player.resume()
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn switch_sides(
|
|
|
|
|
|
|
|
mut players: Query<&mut AnimationPlayer, (With<Camera>, With<Display3d>)>,
|
|
|
|
|
|
|
|
assets_map: Res<AssetsMap>,
|
|
|
|
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
|
|
|
|
state: Res<State<game::TurnState>>,
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
let gltf = gltfs.get(&assets_map.models).expect("Load GLTF content");
|
|
|
|
|
|
|
|
players.iter_mut().for_each(|mut player| {
|
|
|
|
|
|
|
|
let animation = match state.get() {
|
|
|
|
|
|
|
|
game::TurnState::SideA => gltf.named_animations.get("GameCamSide2>1"),
|
|
|
|
|
|
|
|
game::TurnState::SideB => gltf.named_animations.get("GameCamSide1>2"),
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
player.start_with_transition(
|
|
|
|
|
|
|
|
animation.expect("Camera Transition Animation").clone(),
|
|
|
|
|
|
|
|
Duration::from_secs_f32(1.00),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|