mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-27 00:12:55 +03:00
starting a plugin to scrape agents...
This commit is contained in:
parent
5bc9992fc0
commit
29e1f3f6c0
@ -8,6 +8,7 @@ fn convert_twice() {
|
|||||||
elevation: "../data/input/N47W122.hgt".to_string(),
|
elevation: "../data/input/N47W122.hgt".to_string(),
|
||||||
traffic_signals: "../data/input/TrafficSignals.shp".to_string(),
|
traffic_signals: "../data/input/TrafficSignals.shp".to_string(),
|
||||||
parcels: "../data/seattle_parcels.abst".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(),
|
gtfs: "../data/input/google_transit_2018_18_08".to_string(),
|
||||||
neighborhoods: "../data/input/neighborhoods.geojson".to_string(),
|
neighborhoods: "../data/input/neighborhoods.geojson".to_string(),
|
||||||
output: "".to_string(),
|
output: "".to_string(),
|
||||||
|
@ -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?
|
higher level, the list of plugins should change?
|
||||||
|
|
||||||
Some initial steps:
|
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
|
- 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
|
- deactivate lots of other plugins while in this mode
|
||||||
|
- make sim ctrl a proper plugin
|
||||||
|
@ -23,6 +23,7 @@ pub mod show_route;
|
|||||||
pub mod sim_controls;
|
pub mod sim_controls;
|
||||||
pub mod steep;
|
pub mod steep;
|
||||||
pub mod stop_sign_editor;
|
pub mod stop_sign_editor;
|
||||||
|
pub mod time_travel;
|
||||||
pub mod traffic_signal_editor;
|
pub mod traffic_signal_editor;
|
||||||
pub mod turn_cycler;
|
pub mod turn_cycler;
|
||||||
pub mod warp;
|
pub mod warp;
|
||||||
|
54
editor/src/plugins/time_travel.rs
Normal file
54
editor/src/plugins/time_travel.rs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
@ -257,6 +257,7 @@ impl PerMapUI {
|
|||||||
Box::new(plugins::map_edits::EditsManager::new()),
|
Box::new(plugins::map_edits::EditsManager::new()),
|
||||||
Box::new(plugins::chokepoints::ChokepointsFinder::new()),
|
Box::new(plugins::chokepoints::ChokepointsFinder::new()),
|
||||||
Box::new(neighborhood_summary),
|
Box::new(neighborhood_summary),
|
||||||
|
Box::new(plugins::time_travel::TimeTravel::new()),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
(state, plugins)
|
(state, plugins)
|
||||||
|
@ -18,6 +18,10 @@ pub type Acceleration = si::MeterPerSecond2<f64>;
|
|||||||
pub struct Tick(u32);
|
pub struct Tick(u32);
|
||||||
|
|
||||||
impl Tick {
|
impl Tick {
|
||||||
|
pub fn to_inner(&self) -> u32 {
|
||||||
|
self.0
|
||||||
|
}
|
||||||
|
|
||||||
pub fn zero() -> Tick {
|
pub fn zero() -> Tick {
|
||||||
Tick(0)
|
Tick(0)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user