From 509eb87bf5d02bebefd737fed828d42c1a35c717 Mon Sep 17 00:00:00 2001 From: Dustin Carlino Date: Tue, 31 Mar 2020 14:45:07 -0700 Subject: [PATCH] merge status and trips pages. and go back to latest lyon after fix in https://github.com/nical/lyon/issues/558 --- ezgui/Cargo.toml | 4 +-- game/src/info/mod.rs | 21 ++++++++++---- game/src/info/person.rs | 62 ++++++++--------------------------------- game/src/info/trip.rs | 27 ++++++++++++++++-- 4 files changed, 52 insertions(+), 62 deletions(-) diff --git a/ezgui/Cargo.toml b/ezgui/Cargo.toml index 53df1948cb..71f35752c0 100644 --- a/ezgui/Cargo.toml +++ b/ezgui/Cargo.toml @@ -23,9 +23,7 @@ glutin = { git = "https://github.com/dabreegster/glutin", optional = true } htmlescape = "0.3.1" instant = "0.1.2" lru = "0.4.3" -# TODO Something broke here -#lyon = "0.15.6" -lyon = { git = "https://github.com/nical/lyon/", rev = "0235217bfa9826f29e8d5fc5dbdfa8a6e35ebdff" } +lyon = "0.15.6" serde = "1.0.98" serde_derive = "1.0.98" simsearch = "0.2.0" diff --git a/game/src/info/mod.rs b/game/src/info/mod.rs index 3c45a253b0..b5192012a9 100644 --- a/game/src/info/mod.rs +++ b/game/src/info/mod.rs @@ -41,7 +41,6 @@ pub struct InfoPanel { #[derive(Clone, PartialEq)] pub enum Tab { - PersonStatus(PersonID), PersonTrips(PersonID, BTreeSet), PersonBio(PersonID), @@ -79,18 +78,31 @@ impl Tab { ID::Building(b) => Tab::BldgInfo(b), ID::Car(c) => { if let Some(p) = app.primary.sim.agent_to_person(AgentID::Car(c)) { - Tab::PersonStatus(p) + // TODO Can we get the macro please? + let mut open_trips = BTreeSet::new(); + open_trips.insert(app.primary.sim.agent_to_trip(AgentID::Car(c)).unwrap()); + Tab::PersonTrips(p, open_trips) } else if c.1 == VehicleType::Bus { Tab::BusStatus(c) } else { Tab::ParkedCar(c) } } - ID::Pedestrian(p) => Tab::PersonStatus( + ID::Pedestrian(p) => Tab::PersonTrips( app.primary .sim .agent_to_person(AgentID::Pedestrian(p)) .unwrap(), + { + let mut open_trips = BTreeSet::new(); + open_trips.insert( + app.primary + .sim + .agent_to_trip(AgentID::Pedestrian(p)) + .unwrap(), + ); + open_trips + }, ), ID::PedCrowd(members) => Tab::Crowd(members), ID::ExtraShape(es) => Tab::ExtraShape(es), @@ -102,7 +114,7 @@ impl Tab { // TODO Temporary hack until object actions go away. fn to_id(self, app: &App) -> Option { match self { - Tab::PersonStatus(p) | Tab::PersonTrips(p, _) | Tab::PersonBio(p) => { + Tab::PersonTrips(p, _) | Tab::PersonBio(p) => { match app.primary.sim.get_person(p).state { PersonState::Inside(b) => Some(ID::Building(b)), PersonState::Trip(t) => app @@ -178,7 +190,6 @@ impl InfoPanel { }; let (mut col, main_tab) = match tab { - Tab::PersonStatus(p) => (person::status(ctx, app, &mut details, p), true), Tab::PersonTrips(p, ref open) => { (person::trips(ctx, app, &mut details, p, open), false) } diff --git a/game/src/info/person.rs b/game/src/info/person.rs index 52cfc4bc54..ee938d37b8 100644 --- a/game/src/info/person.rs +++ b/game/src/info/person.rs @@ -8,53 +8,6 @@ use sim::{ }; use std::collections::BTreeSet; -pub fn status(ctx: &mut EventCtx, app: &App, details: &mut Details, id: PersonID) -> Vec { - let mut rows = header(ctx, app, details, id, Tab::PersonStatus(id)); - - let map = &app.primary.map; - let sim = &app.primary.sim; - - match sim.get_person(id).state { - PersonState::Inside(b) => { - // TODO hyperlink - rows.push( - format!("Currently inside {}", map.get_b(b).just_address(map)).draw_text(ctx), - ); - } - PersonState::OffMap => { - rows.push("Currently outside the map boundaries".draw_text(ctx)); - } - PersonState::Limbo => { - rows.push( - "Currently in limbo -- they broke out of the Matrix! Woops. (A bug occurred)" - .draw_text(ctx), - ); - } - PersonState::Trip(t) => { - if let Some(a) = sim.trip_to_agent(t).ok() { - let (kv, extra) = match a { - AgentID::Car(c) => sim.car_properties(c, map), - AgentID::Pedestrian(p) => sim.ped_properties(p, map), - }; - rows.extend(make_table(ctx, kv)); - if !extra.is_empty() { - let mut txt = Text::from(Line("")); - for line in extra { - txt.add(Line(line)); - } - rows.push(txt.draw(ctx)); - } - } - - let mut open_trips = BTreeSet::new(); - open_trips.insert(t); - rows.push(trip::details(ctx, app, t, details, id, open_trips)); - } - } - - rows -} - pub fn trips( ctx: &mut EventCtx, app: &App, @@ -171,9 +124,17 @@ pub fn crowd( format!("{})", idx + 1).draw_text(ctx), Btn::text_fg(format!("Person #{}", person.0)).build_def(ctx, None), ])); - details - .hyperlinks - .insert(format!("Person #{}", person.0), Tab::PersonStatus(person)); + let mut open_trips = BTreeSet::new(); + open_trips.insert( + app.primary + .sim + .agent_to_trip(AgentID::Pedestrian(*id)) + .unwrap(), + ); + details.hyperlinks.insert( + format!("Person #{}", person.0), + Tab::PersonTrips(person, open_trips), + ); } rows @@ -256,7 +217,6 @@ fn header(ctx: &EventCtx, app: &App, details: &mut Details, id: PersonID, tab: T &mut details.hyperlinks, tab, vec![ - ("Status", Tab::PersonStatus(id)), ("Trips", Tab::PersonTrips(id, open_trips)), ("Bio", Tab::PersonBio(id)), ], diff --git a/game/src/info/trip.rs b/game/src/info/trip.rs index 2b1ea6f47b..c7a8c8a633 100644 --- a/game/src/info/trip.rs +++ b/game/src/info/trip.rs @@ -8,7 +8,7 @@ use ezgui::{ }; use geom::{Angle, Distance, Duration, Polygon, Pt2D, Time}; use map_model::{Map, Path, PathStep}; -use sim::{PersonID, TripEndpoint, TripID, TripPhaseType, TripResult}; +use sim::{AgentID, PersonID, TripEndpoint, TripID, TripPhaseType, TripResult}; use std::collections::BTreeSet; pub fn details( @@ -261,13 +261,34 @@ pub fn details( timeline.insert(0, start_btn.margin(5)); timeline.push(goal_btn.margin(5)); + col.push(Widget::row(timeline).evenly_spaced().margin_above(25)); kv.push(("Duration", total_duration_so_far.to_string())); if let Some(t) = end_time { kv.push(("Trip end", t.ampm_tostring())); } - col.push(Widget::row(timeline).evenly_spaced().margin_above(25)); - col.extend(make_table(ctx, kv)); + + if let Some(a) = sim.trip_to_agent(trip).ok() { + let (more_kv, extra) = match a { + AgentID::Car(c) => sim.car_properties(c, map), + AgentID::Pedestrian(p) => sim.ped_properties(p, map), + }; + for (k, v) in &more_kv { + kv.push((k, v.to_string())); + } + col.extend(make_table(ctx, kv)); + + if !extra.is_empty() { + let mut txt = Text::from(Line("")); + for line in extra { + txt.add(Line(line)); + } + col.push(txt.draw(ctx)); + } + } else { + col.extend(make_table(ctx, kv)); + } + col.extend(elevation); Widget::col(col)