open info panels focus on peope better, even inside buildings. and dont focus on parked cars.

This commit is contained in:
Dustin Carlino 2020-04-10 10:46:22 -07:00
parent 57240b9b6d
commit 5ea58c0e49
3 changed files with 35 additions and 24 deletions

View File

@ -7,7 +7,7 @@ use ezgui::{
};
use geom::{Circle, Distance, Polygon, Pt2D, Statistic, Time};
use map_model::{BusRouteID, BusStopID};
use sim::CarID;
use sim::{AgentID, CarID};
pub fn stop(ctx: &mut EventCtx, app: &App, details: &mut Details, id: BusStopID) -> Vec<Widget> {
let mut rows = vec![];
@ -80,7 +80,7 @@ pub fn bus_delays(ctx: &mut EventCtx, app: &App, details: &mut Details, id: CarI
}
fn bus_header(
ctx: &EventCtx,
ctx: &mut EventCtx,
app: &App,
details: &mut Details,
id: CarID,
@ -88,6 +88,14 @@ fn bus_header(
) -> Vec<Widget> {
let route = app.primary.sim.bus_route_id(id).unwrap();
if let Some(pt) = app
.primary
.sim
.canonical_pt_for_agent(AgentID::Car(id), &app.primary.map)
{
ctx.canvas.center_on_map_pt(pt);
}
let mut rows = vec![];
rows.push(Widget::row(vec![
Line(format!(

View File

@ -287,15 +287,6 @@ impl InfoPanel {
}
}
// Follow the agent. When the sim is paused, this lets the player naturally pan away,
// because the InfoPanel isn't being updated.
if let Some(pt) = maybe_id
.and_then(|id| id.agent_id())
.and_then(|a| app.primary.sim.canonical_pt_for_agent(a, &app.primary.map))
{
ctx.canvas.center_on_map_pt(pt);
}
InfoPanel {
tab,
time: app.primary.sim.time(),

View File

@ -174,7 +174,7 @@ pub fn trips(
}
pub fn bio(
ctx: &EventCtx,
ctx: &mut EventCtx,
app: &App,
details: &mut Details,
id: PersonID,
@ -266,7 +266,7 @@ pub fn parked_car(ctx: &EventCtx, app: &App, details: &mut Details, id: CarID) -
}
fn header(
ctx: &EventCtx,
ctx: &mut EventCtx,
app: &App,
details: &mut Details,
id: PersonID,
@ -277,6 +277,8 @@ fn header(
let (current_trip, (descr, maybe_icon)) = match app.primary.sim.get_person(id).state {
PersonState::Inside(b) => {
ctx.canvas
.center_on_map_pt(app.primary.map.get_b(b).label_center);
building::draw_occupants(details, app, b, Some(id));
(
None,
@ -285,18 +287,28 @@ fn header(
}
PersonState::Trip(t) => (
Some(t),
match app.primary.sim.trip_to_agent(t).ok() {
Some(AgentID::Pedestrian(_)) => (
"walking",
Some("../data/system/assets/meters/pedestrian.svg"),
),
Some(AgentID::Car(c)) => match c.1 {
VehicleType::Car => ("driving", Some("../data/system/assets/meters/car.svg")),
VehicleType::Bike => ("biking", Some("../data/system/assets/meters/bike.svg")),
VehicleType::Bus => unreachable!(),
},
if let Some(a) = app.primary.sim.trip_to_agent(t).ok() {
if let Some(pt) = app.primary.sim.canonical_pt_for_agent(a, &app.primary.map) {
ctx.canvas.center_on_map_pt(pt);
}
match a {
AgentID::Pedestrian(_) => (
"walking",
Some("../data/system/assets/meters/pedestrian.svg"),
),
AgentID::Car(c) => match c.1 {
VehicleType::Car => {
("driving", Some("../data/system/assets/meters/car.svg"))
}
VehicleType::Bike => {
("biking", Some("../data/system/assets/meters/bike.svg"))
}
VehicleType::Bus => unreachable!(),
},
}
} else {
// TODO Really should clean up the TripModeChange issue
None => ("...", None),
("...", None)
},
),
PersonState::OffMap => (None, ("off map", None)),