diff --git a/headless/src/main.rs b/headless/src/main.rs index 687c4b283f..10c8103c96 100644 --- a/headless/src/main.rs +++ b/headless/src/main.rs @@ -297,6 +297,7 @@ fn handle_command( }; trips.push(FinishedTrip { id: *id, + person: sim.trip_to_person(*id).unwrap(), duration: *maybe_duration, distance_crossed, mode: *mode, @@ -310,10 +311,12 @@ fn handle_command( .get_unzoomed_agents(map) .into_iter() .map(|a| AgentPosition { + id: a.id, + trip: sim.agent_to_trip(a.id), + person: a.person, vehicle_type: a.id.to_vehicle_type(), pos: a.pos.to_gps(map.get_gps_bounds()), distance_crossed: sim.agent_properties(map, a.id).dist_crossed, - person: a.person, }) .collect(), })), @@ -327,7 +330,16 @@ fn handle_command( .collect(), })), "/data/get-blocked-by-graph" => Ok(abstutil::to_json(&BlockedByGraph { - blocked_by: sim.get_blocked_by_graph(map), + blocked_by: sim + .get_blocked_by_graph(map) + .into_iter() + .map(|(id, (delay, cause))| { + ( + id, + (delay, cause, sim.agent_to_trip(id), sim.agent_to_person(id)), + ) + }) + .collect(), })), "/data/trip-time-lower-bound" => { let id = TripID(get("id")?.parse::()?); @@ -378,6 +390,7 @@ fn handle_command( #[derive(Serialize)] struct FinishedTrip { id: TripID, + person: PersonID, duration: Option, distance_crossed: Distance, mode: TripMode, @@ -403,6 +416,12 @@ struct AgentPositions { #[derive(Serialize)] struct AgentPosition { + /// The agent's ID + id: AgentID, + /// None for buses + trip: Option, + /// None for buses + person: Option, /// None for pedestrians vehicle_type: Option, /// The agent's current position. For pedestrians, this is their center. For vehicles, this @@ -421,8 +440,6 @@ struct AgentPosition { /// - At the very end of a driving trip, the agent may wind up crossing slightly more or less /// than the total path length, due to where they park along that last road. distance_crossed: Distance, - /// None for buses - person: Option, } #[derive(Serialize)] @@ -443,9 +460,10 @@ struct TrafficSignalState { #[derive(Serialize)] struct BlockedByGraph { /// Each entry indicates that some agent has been stuck in one place for some amount of time, - /// due to being blocked by another agent or because they're waiting at an intersection. + /// due to being blocked by another agent or because they're waiting at an intersection. Unless + /// the agent is a bus, then the TripID and PersonID will also be filled out. #[serde(serialize_with = "serialize_btreemap")] - blocked_by: BTreeMap, + blocked_by: BTreeMap, Option)>, } #[derive(Deserialize)]