|
|
|
|
@ -81,12 +81,12 @@ fn main() {
|
|
|
|
|
),
|
|
|
|
|
scoring.run_if(on_event::<CollisionEnded>),
|
|
|
|
|
manage_batches.run_if(on_event::<CollisionStarted>).run_if(in_state(PlayerState::Alive).or(in_state(PlayerState::Rewind))),
|
|
|
|
|
update_batch_position.run_if(any_component_changed::<Batch>),
|
|
|
|
|
update_tooltip.run_if(in_state(DebuggingState::On)),
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
.add_observer(flap)
|
|
|
|
|
.add_observer(populate_batch)
|
|
|
|
|
.add_observer(update_batch)
|
|
|
|
|
.add_observer(populate_pipe)
|
|
|
|
|
.add_observer(populate_ground)
|
|
|
|
|
.add_observer(populate_hitbox)
|
|
|
|
|
@ -213,22 +213,21 @@ fn populate_batch(
|
|
|
|
|
parent.spawn(Ground(1));
|
|
|
|
|
parent.spawn(Ground(2));
|
|
|
|
|
if *batch_id > 0 {
|
|
|
|
|
parent.spawn(Pipe::Top);
|
|
|
|
|
parent.spawn(Pipe::Bottom);
|
|
|
|
|
parent.spawn((Pipe::Top, Batch(*batch_id)));
|
|
|
|
|
parent.spawn((Pipe::Bottom, Batch(*batch_id)));
|
|
|
|
|
parent.spawn((Hitbox, Batch(*batch_id)));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn update_batch(
|
|
|
|
|
trigger: Trigger<OnReplace, Batch>,
|
|
|
|
|
mut root: Query<(&mut Transform, &Batch), With<Children>>,
|
|
|
|
|
fn update_batch_position(
|
|
|
|
|
mut root_changes: Query<(&mut Transform, &Batch), (Changed<Batch>, Without<ChildOf>)>,
|
|
|
|
|
) {
|
|
|
|
|
if let Ok((mut t, Batch(idx))) = root.get_mut(trigger.target()) {
|
|
|
|
|
debug!("Updating batch {:?}", idx);
|
|
|
|
|
root_changes.iter_mut().for_each(|(mut t, Batch(idx))|{
|
|
|
|
|
info!("Updating batch {:?}", idx);
|
|
|
|
|
t.translation.x = 500.0 * (*idx) as f32;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
// todo!("Adjust pipe positions");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -652,19 +651,16 @@ fn scoring(
|
|
|
|
|
mut events: EventReader<CollisionEnded>,
|
|
|
|
|
state: Res<State<PlayerState>>,
|
|
|
|
|
bird: Query<Entity, With<Bird>>,
|
|
|
|
|
hitboxes: Query<Entity, With<Hitbox>>,
|
|
|
|
|
hitboxes: Query<&Batch, With<Hitbox>>,
|
|
|
|
|
mut score: ResMut<Score>,
|
|
|
|
|
) {
|
|
|
|
|
events
|
|
|
|
|
.read()
|
|
|
|
|
.filter(|CollisionEnded(a, b)| bird.contains(*a) && hitboxes.contains(*b))
|
|
|
|
|
.for_each(|_| {
|
|
|
|
|
.for_each(|CollisionEnded(_a, b)| {
|
|
|
|
|
debug!("Hit event while {:?}", state.get());
|
|
|
|
|
match state.get() {
|
|
|
|
|
PlayerState::Alive => score.0 = score.0.saturating_add(1),
|
|
|
|
|
PlayerState::Rewind => score.0 = score.0.saturating_sub(1),
|
|
|
|
|
PlayerState::Pause | PlayerState::Stasis => (),
|
|
|
|
|
}
|
|
|
|
|
let Batch(id) = hitboxes.get(*b).unwrap();
|
|
|
|
|
score.0 = *id;
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -702,9 +698,16 @@ fn manage_batches(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn update_tooltip(
|
|
|
|
|
mut query: Query<(&mut ToolTip, &LinearVelocity, Entity), With<Bird>>,
|
|
|
|
|
mut query: Query<(&mut ToolTip, Option<&LinearVelocity>, Option<&Batch>, Entity)>,
|
|
|
|
|
) {
|
|
|
|
|
query.iter_mut().for_each(|(mut tt, lv, _)| {
|
|
|
|
|
tt.insert("Velocity", format!("{}", lv.0));
|
|
|
|
|
query.iter_mut().for_each(|(mut tt, lv, b, _e)| {
|
|
|
|
|
// Add Linear Velocity if present on entity
|
|
|
|
|
lv.iter().for_each(|it| {
|
|
|
|
|
tt.insert("Velocity", format!("{}", it.0));
|
|
|
|
|
});
|
|
|
|
|
// Add Batch ID to if present
|
|
|
|
|
b.iter().for_each(|it| {
|
|
|
|
|
tt.insert("Batch", format!("{}", it.0));
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|