paiagram/interface/tabs/
station_timetable.rs

1use crate::{
2    basic::TimetableTime,
3    interface::UiCommand,
4    intervals::{Depot, Station},
5    vehicle_set::VehicleSet,
6    vehicles::{DepartureType, Schedule, TimetableEntry, Vehicle},
7};
8use bevy::ecs::{
9    entity::Entity,
10    hierarchy::{ChildOf, Children},
11    message::MessageWriter,
12    name::Name,
13    query::With,
14    system::{In, InMut, Query},
15};
16
17/// Display station times in Japanese style timetable
18pub fn show_station_timetable(
19    (InMut(ui), In((vehicle_set, station))): (InMut<egui::Ui>, In<(Entity, Entity)>),
20    station_names: Query<(&Name, Option<&Depot>), With<Station>>,
21    vehicle_sets: Query<&Children, With<VehicleSet>>,
22    vehicles: Query<(Entity, &Name, &Schedule), With<Vehicle>>,
23    timetable_entries: Query<(&TimetableEntry, &ChildOf)>,
24    mut msg_open_tab: MessageWriter<UiCommand>,
25) {
26    // find all timetable entries that stops at the given station
27    let stopping_vehicles = timetable_entries
28        .iter()
29        .filter_map(|(entry, parent_vehicle)| {
30            if entry.station == station && !matches!(entry.departure, DepartureType::NonStop) {
31                Some((entry, parent_vehicle.0))
32            } else {
33                None
34            }
35        });
36}