diff --git a/assets/martian.tweak.toml b/assets/martian.tweak.toml index 78b171f..4726ccf 100644 --- a/assets/martian.tweak.toml +++ b/assets/martian.tweak.toml @@ -233,11 +233,20 @@ width_px = 400.0 [display3d.models.animations] intro_a = "GameCamIntro1" +# The intro we use intro_b = "GameCamIntro2" -turn_b = "GameCamSide2>1" -turn_b_sight = "GameCamSide2.1>1" -turn_a = "GameCamSide1>2" -turn_a_sight = "GameCamSide1.1>2" +# Blue -> Red +turn_b = "GameCamSide2.1>1" +# Red -> Blue +turn_a = "GameCamSide1.1>2" +# Red -> Better view +turn_up_b = "GameCamSide1>1.1" +# Blue -> Better view +turn_up_a = "GameCamSide2>2.1" +# Red -> Base view +turn_down_b = "GameCamSide1.1>1" +# Blue -> Base view +turn_down_a = "GameCamSide2.1>2" [display3d.models.animations.pick_up] PawnBlue = "PawnBluePiecePickup" diff --git a/assets/models/Martian Chess.glb b/assets/models/Martian Chess.glb index c777f4c..774178e 100644 --- a/assets/models/Martian Chess.glb +++ b/assets/models/Martian Chess.glb @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8df88acff7f4740c682559c2f18470bbc9654ae21d61e4c4455c12e446970ee2 -size 8847984 +oid sha256:65eeba43cefd86e6f2c30c7b1947a6eb5567667e2a945007dd47bb3d83e14e1b +size 8853068 diff --git a/src/display3d.rs b/src/display3d.rs index 3721f35..b7ee3e8 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -86,6 +86,12 @@ impl Plugin for Display3dPlugin { switch_sides .run_if(in_state(GameState::Play)) .run_if(state_changed::), + vantage_point + .run_if(in_state(GameState::Play)) + .run_if(not(state_changed::)) + .run_if(any_component_added::() + .or_else(any_component_removed::()) + ), update_pieces .run_if(resource_exists::) .run_if(in_state(GameState::Play)) @@ -1006,13 +1012,56 @@ fn switch_sides( debug!("Switching sides"); let animation_key = match state.get() { - game::TurnState(game::Side::A) => "display3d_models_animations_turn_a_sight", - game::TurnState(game::Side::B) => "display3d_models_animations_turn_b_sight", + game::TurnState(game::Side::A) => "display3d_models_animations_turn_a", + game::TurnState(game::Side::B) => "display3d_models_animations_turn_b", + }; + let animation_val = tweak.get::(animation_key).unwrap(); + let animation = gltf.named_animations.get(animation_val.as_str()).expect("Camera Transition Animation"); + player.start_with_transition( + animation.clone(), + Duration::from_secs_f32(1.00), + ); + }); +} + +fn vantage_point( + selected: Query>, + mut players: Query<&mut AnimationPlayer, (With, With)>, + gltfs: Res>, + state: Res>, + tweaks: Res>, + tweaks_file: Res, +) { + let tweak = tweaks + .get(tweaks_file.handle.clone()) + .expect("Load tweakfile"); + let assets_handle = tweak + .get_handle::("display3d_models_assets_file") + .unwrap(); + let gltf = gltfs.get(assets_handle).expect("Load GLTF content"); + players.iter_mut().for_each(|mut player| { + info!("Getting a better view"); + + let animation_key = match state.get() { + game::TurnState(game::Side::A) => { + if selected.iter().count() == 1 { + "display3d_models_animations_turn_up_a" + } else { + "display3d_models_animations_turn_down_a" + } + }, + game::TurnState(game::Side::B) => { + if selected.iter().count() == 1 { + "display3d_models_animations_turn_up_b" + } else { + "display3d_models_animations_turn_down_b" + } + }, }; let animation_val = tweak.get::(animation_key).unwrap(); - let animation = gltf.named_animations.get(animation_val.as_str()); + let animation = gltf.named_animations.get(animation_val.as_str()).expect("Camera Transition Animation"); player.start_with_transition( - animation.expect("Camera Transition Animation").clone(), + animation.clone(), Duration::from_secs_f32(1.00), ); });