2019-04-29 19:56:01 +03:00
|
|
|
use crate::helpers::ID;
|
2019-07-04 01:18:32 +03:00
|
|
|
use crate::render::DrawMap;
|
2019-04-26 02:40:26 +03:00
|
|
|
use crate::ui::UI;
|
2019-10-14 23:42:22 +03:00
|
|
|
use ezgui::{EventCtx, GfxCtx, Key, Line, Text};
|
2019-07-04 01:18:32 +03:00
|
|
|
use map_model::Map;
|
|
|
|
use sim::{CarID, Sim};
|
2018-09-13 19:59:49 +03:00
|
|
|
|
2019-04-26 02:40:26 +03:00
|
|
|
pub struct ObjectDebugger {
|
2019-02-19 02:21:43 +03:00
|
|
|
debug_tooltip_key_held: bool,
|
2018-09-13 19:59:49 +03:00
|
|
|
}
|
|
|
|
|
2019-04-26 02:40:26 +03:00
|
|
|
impl ObjectDebugger {
|
|
|
|
pub fn new() -> ObjectDebugger {
|
|
|
|
ObjectDebugger {
|
2019-02-19 02:21:43 +03:00
|
|
|
debug_tooltip_key_held: false,
|
2018-12-06 07:00:58 +03:00
|
|
|
}
|
2018-09-13 19:59:49 +03:00
|
|
|
}
|
2018-10-22 06:28:51 +03:00
|
|
|
|
2019-04-26 02:40:26 +03:00
|
|
|
pub fn event(&mut self, ctx: &mut EventCtx, ui: &UI) {
|
2019-02-19 02:21:43 +03:00
|
|
|
if self.debug_tooltip_key_held {
|
|
|
|
self.debug_tooltip_key_held = !ctx.input.key_released(Key::RightControl);
|
|
|
|
} else {
|
|
|
|
self.debug_tooltip_key_held = ctx
|
|
|
|
.input
|
|
|
|
.unimportant_key_pressed(Key::RightControl, "hold to show debug tooltips");
|
2018-12-06 07:00:58 +03:00
|
|
|
}
|
2018-09-13 19:59:49 +03:00
|
|
|
|
2019-10-14 23:42:22 +03:00
|
|
|
if let Some(ref id) = ui.primary.current_selection {
|
2018-12-17 20:51:31 +03:00
|
|
|
if ctx.input.contextual_action(Key::D, "debug") {
|
2019-08-15 01:09:54 +03:00
|
|
|
dump_debug(
|
|
|
|
id.clone(),
|
|
|
|
&ui.primary.map,
|
|
|
|
&ui.primary.sim,
|
|
|
|
&ui.primary.draw_map,
|
|
|
|
);
|
2018-09-13 19:59:49 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-10-22 19:43:48 +03:00
|
|
|
|
2019-04-26 02:40:26 +03:00
|
|
|
pub fn draw(&self, g: &mut GfxCtx, ui: &UI) {
|
2019-02-19 02:21:43 +03:00
|
|
|
if self.debug_tooltip_key_held {
|
|
|
|
if let Some(pt) = g.canvas.get_cursor_in_map_space() {
|
2019-04-29 19:27:43 +03:00
|
|
|
if let Some(gps) = pt.to_gps(ui.primary.map.get_gps_bounds()) {
|
2019-02-19 02:21:43 +03:00
|
|
|
let mut txt = Text::new();
|
2019-09-06 23:58:04 +03:00
|
|
|
txt.add(Line(pt.to_string()));
|
|
|
|
txt.add(Line(gps.to_string()));
|
2019-10-30 02:36:19 +03:00
|
|
|
txt.add(Line(format!("{:?}", g.canvas.get_cursor_in_screen_space())));
|
2019-09-06 23:58:04 +03:00
|
|
|
txt.add(Line(format!("zoom: {}", g.canvas.cam_zoom)));
|
2019-04-22 23:19:36 +03:00
|
|
|
g.draw_mouse_tooltip(&txt);
|
2019-02-19 02:21:43 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-10-22 19:43:48 +03:00
|
|
|
}
|
2018-09-13 19:59:49 +03:00
|
|
|
}
|
2019-07-04 01:18:32 +03:00
|
|
|
|
|
|
|
fn dump_debug(id: ID, map: &Map, sim: &Sim, draw_map: &DrawMap) {
|
|
|
|
match id {
|
|
|
|
ID::Road(id) => {
|
|
|
|
map.get_r(id).dump_debug();
|
|
|
|
}
|
|
|
|
ID::Lane(id) => {
|
|
|
|
map.get_l(id).dump_debug();
|
2019-08-12 22:51:22 +03:00
|
|
|
sim.debug_lane(id);
|
2019-07-04 01:18:32 +03:00
|
|
|
}
|
|
|
|
ID::Intersection(id) => {
|
|
|
|
map.get_i(id).dump_debug();
|
|
|
|
sim.debug_intersection(id, map);
|
|
|
|
}
|
|
|
|
ID::Turn(id) => {
|
|
|
|
map.get_t(id).dump_debug();
|
|
|
|
}
|
|
|
|
ID::Building(id) => {
|
|
|
|
map.get_b(id).dump_debug();
|
2019-09-02 07:25:31 +03:00
|
|
|
for (cars, descr) in vec![
|
|
|
|
(
|
|
|
|
sim.get_parked_cars_by_owner(id),
|
|
|
|
format!("currently parked cars are owned by {}", id),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
sim.get_offstreet_parked_cars(id),
|
|
|
|
format!("cars are parked inside {}", id),
|
|
|
|
),
|
|
|
|
] {
|
|
|
|
println!(
|
|
|
|
"{} {}: {:?}",
|
|
|
|
cars.len(),
|
|
|
|
descr,
|
|
|
|
cars.iter().map(|p| p.vehicle.id).collect::<Vec<CarID>>()
|
|
|
|
);
|
|
|
|
}
|
2019-07-04 01:18:32 +03:00
|
|
|
}
|
|
|
|
ID::Car(id) => {
|
|
|
|
sim.debug_car(id);
|
|
|
|
}
|
|
|
|
ID::Pedestrian(id) => {
|
|
|
|
sim.debug_ped(id);
|
|
|
|
}
|
2019-08-15 01:29:02 +03:00
|
|
|
ID::PedCrowd(members) => {
|
|
|
|
println!("Crowd with {} members", members.len());
|
|
|
|
for p in members {
|
|
|
|
sim.debug_ped(p);
|
|
|
|
}
|
|
|
|
}
|
2019-07-04 01:18:32 +03:00
|
|
|
ID::ExtraShape(id) => {
|
|
|
|
let es = draw_map.get_es(id);
|
|
|
|
for (k, v) in &es.attributes {
|
|
|
|
println!("{} = {}", k, v);
|
|
|
|
}
|
|
|
|
println!("associated road: {:?}", es.road);
|
|
|
|
}
|
|
|
|
ID::BusStop(id) => {
|
|
|
|
map.get_bs(id).dump_debug();
|
|
|
|
}
|
|
|
|
ID::Area(id) => {
|
|
|
|
map.get_a(id).dump_debug();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|