starting a plugin to scrape agents...

This commit is contained in:
Dustin Carlino 2018-11-22 11:14:11 -08:00
parent 5bc9992fc0
commit 29e1f3f6c0
6 changed files with 64 additions and 1 deletions

View File

@ -8,6 +8,7 @@ fn convert_twice() {
elevation: "../data/input/N47W122.hgt".to_string(),
traffic_signals: "../data/input/TrafficSignals.shp".to_string(),
parcels: "../data/seattle_parcels.abst".to_string(),
parking_shapes: "../data/shapes/blockface".to_string(),
gtfs: "../data/input/google_transit_2018_18_08".to_string(),
neighborhoods: "../data/input/neighborhoods.geojson".to_string(),
output: "".to_string(),

View File

@ -18,6 +18,8 @@ if each plugin should sort of declare a dependency on a live sim or if at a
higher level, the list of plugins should change?
Some initial steps:
- make a plugin that asks for all Draw stuff every tick and just saves it
= make a plugin that asks for all Draw stuff every tick and just saves it
- activate the time travel plugin and have keys to go back/forward
- supply the Draw{Car,Ped} stuff from the time travel plugin, not the sim
- deactivate lots of other plugins while in this mode
- make sim ctrl a proper plugin

View File

@ -23,6 +23,7 @@ pub mod show_route;
pub mod sim_controls;
pub mod steep;
pub mod stop_sign_editor;
pub mod time_travel;
pub mod traffic_signal_editor;
pub mod turn_cycler;
pub mod warp;

View File

@ -0,0 +1,54 @@
use plugins::{Plugin, PluginCtx};
use map_model::Map;
use std::collections::BTreeMap;
use sim::{CarID, DrawCarInput, PedestrianID, DrawPedestrianInput, Sim, AgentID};
pub struct TimeTravel {
state_per_tick: Vec<StateAtTime>,
}
struct StateAtTime {
cars: BTreeMap<CarID, DrawCarInput>,
peds: BTreeMap<PedestrianID, DrawPedestrianInput>,
}
impl TimeTravel {
pub fn new() -> TimeTravel {
TimeTravel {
state_per_tick: Vec::new(),
}
}
fn record_state(&mut self, sim: &Sim, map: &Map) {
// Record state for this tick, if needed.
let tick = sim.time.to_inner() as usize;
if tick + 1 == self.state_per_tick.len() {
return;
}
assert_eq!(tick, self.state_per_tick.len());
let mut state = StateAtTime {
cars: BTreeMap::new(),
peds: BTreeMap::new(),
};
for agent in sim.active_agents().into_iter() {
match agent {
AgentID::Car(id) => {
state.cars.insert(id, sim.get_draw_car(id, map).unwrap());
}
AgentID::Pedestrian(id) => {
state.peds.insert(id, sim.get_draw_ped(id, map).unwrap());
}
};
}
self.state_per_tick.push(state);
}
}
impl Plugin for TimeTravel {
fn event(&mut self, ctx: PluginCtx) -> bool {
self.record_state(&ctx.primary.sim, &ctx.primary.map);
false
}
}

View File

@ -257,6 +257,7 @@ impl PerMapUI {
Box::new(plugins::map_edits::EditsManager::new()),
Box::new(plugins::chokepoints::ChokepointsFinder::new()),
Box::new(neighborhood_summary),
Box::new(plugins::time_travel::TimeTravel::new()),
],
};
(state, plugins)

View File

@ -18,6 +18,10 @@ pub type Acceleration = si::MeterPerSecond2<f64>;
pub struct Tick(u32);
impl Tick {
pub fn to_inner(&self) -> u32 {
self.0
}
pub fn zero() -> Tick {
Tick(0)
}