diff --git a/docs/TODO_extra.md b/docs/TODO_extra.md deleted file mode 100644 index f27a53f275..0000000000 --- a/docs/TODO_extra.md +++ /dev/null @@ -1,27 +0,0 @@ -# TODO - Extra side-projects - -## Themed rendering - -- halloween, winter, jungle, 8bit, organic (deform buildings), floorplan, - machine (make buildings pump along front paths) - -## Halloween visual demo - -- cars with headlights -- pumpkins -- fences / bushes / features in houses or triangulation on a block with buildings -- buildings as rooms in a hotel -- silent hill soundtrack -- deformed buildings pulsing on front path springs -- lighting? -- fog effects -- in 3D, what if roads are sunken rivers and buildings giant skyscrapers? -- eyes on the houses, that blink -- trick-or-treaters wandering around - -## Conga line idea - -- try constructive approach for snake idea - - with interactive mode? -- try destructive approach for snake idea - - with interactive mode? diff --git a/docs/TODO_game.md b/docs/TODO_game.md deleted file mode 100644 index d157cc8cd6..0000000000 --- a/docs/TODO_game.md +++ /dev/null @@ -1,33 +0,0 @@ -# TODO - Core gameplay - -- Example use cases - - montlake/520 turn restrictions with pedestrian scramble - - need intersection merging before this is understandable - - close interior neighborhoods to most cars (except for src/dst), see how traffic restricted to arterials would work - - puzzle: with only X miles of retained road, where would you leave them? what roads would go away? - - parking garages on the edges of neighborhoods? - - create a bike network with minimal hills, dedicated roads, minimal crossings - -- charm - - name agents, with some good names scattered in (Dustin Carlino, Dustin Bikelino, Dustin Buslino...) - - music / sound effects - - as you zoom in, overhear conversations and such - - some buildings could have extra detail - - zoom in too much, what might you see? ;) - - loading screen: snakey cars - - game intro/backstory: history of seattle urban planning - - player context: a drone. people will look up eventually. - -## Tutorial - -- parking vs bus tutorial level - - big vertical road. some neighborhoods off to the side. everyone trying to go north or south. one driving, one parking lane. a bus that makes a loop. some horizontal roads connected to borders that force the vertical road to not be fast. just make a dedicated bus lane! oops, except some of the bus stops are at narrow places, so traffic has to slow down anyway for the bus. maybe there's a bypass road through a neighborhood? -- introduce elements gradually... fix a silly traffic signal with just cars, then add peds and bikes... -- spawn cars somewhere -- run sim, pause, change speed, reset - -## More things to simulate - -- Light rail and downtown bus tunnel -- seed parked cars in neighborhood with no owner or a far-away owner, to model reasonable starting state -- outgoing border nodes can throttle to simulate traffic downstream diff --git a/docs/TODO_logistic.md b/docs/TODO_logistic.md deleted file mode 100644 index f962f14ca3..0000000000 --- a/docs/TODO_logistic.md +++ /dev/null @@ -1,29 +0,0 @@ -# TODO - Project logistics - -- enable more clippy lints -- enforce consistent style (derive order, struct initialization order) - -- trailer - - show common parts of routes in A/B, point of divergence - - "Two parallel universes sit at your fingertips, and with the flick of a key, you can glide between the two. Buses jumping past traffic in one world, snarly traffic jam in the other. An A/B test revealing what currently is, and what could be, compared meticulously and deterministically. A/B Street -- which world do you prefer?" - -## Tooling - -- play with https://github.com/glennw/thread_profiler -- and https://github.com/ferrous-systems/cargo-flamegraph -- display percentage breakdowns in Timer (need tree structure) - -## Stability - -- test results per git commit - - https://github.com/spotify/git-test - - way to view later - - also could be benchmarks; just arbitrary data over time - -- layered invariants - - first: all the maps fully convert and display in some form; all tests pass or are disabled - - slowly hone away at problems currently with errors printed (like bad pl shift angles) - - eventually: every intersection has at least a turn, minimum lengths enforced, etc - -- useful unit tests - - for a given intersection with lanes, check all the turns generated diff --git a/docs/TODO_quality.md b/docs/TODO_quality.md deleted file mode 100644 index c31e50c86c..0000000000 --- a/docs/TODO_quality.md +++ /dev/null @@ -1,96 +0,0 @@ -# TODO - Map quality - -## Boundary clipping - -- some border intersections have weird OOBish geometry, or the arrows look weird -- simplify border node detection, only do it in convert_osm? - -## Geometry - -- bad polyline shifting remains - - from the remaining cases, looks like we need to totally remove some tight points and retry - - make polygons use the corrections too? - - bad polyline shifting causes jagged lane endings in generalized_trim_back - -- car turns often clip sidewalk corners now -- draw SharedSidewalkCorners just around the ped path, not arbitrarily thick - - dont forget to draw the notches - -- figure out what to do about yellow center lines - - intersections on one-ways look weird - - yellow and white lines intersect cars and turn icons and such - - who should own drawing them? - -## More data - -- lanes: https://data-seattlecitygis.opendata.arcgis.com/datasets/49d417979fec452981a068ca078e7070_3 - - not filled out for most streets -- traffic circles: https://data-seattlecitygis.opendata.arcgis.com/datasets/717b10434d4945658355eba78b66971a_6 -- https://data-seattlecitygis.opendata.arcgis.com/datasets/sidewalks - - disagrees with OSM road centers sometimes -- https://data-seattlecitygis.opendata.arcgis.com/datasets/curb-ramps -- high quality thick roads: https://seattlecitygis.maps.arcgis.com/apps/webappviewer/index.html?id=86cb6824307c4d63b8e180ebcff58ce2 -- OSM has footways - - but theyre not marked everywhere - - and theyre hard to associate with roads (sometimes need to infer a planter strip) -- draw benches, bike racks -- render trees -- look for current stop sign priorities - - https://gis-kingcounty.opendata.arcgis.com/datasets/traffic-signs--sign-point/ -- http://guides.lib.uw.edu/research/gis/uw-lib_data has cool stuff, but .lyr?? - -## Low-priority geometry issues - -- if building front path intersects another building, then scrap that building. - - or wait, just require bldgs to be even closer to sidewalk first. - - need to do polygon vs polygon check! - - will need to speed it up with quadtree containing entire buildings. make sure these are easy to use. - -- can we make OSM buildings with holes? - - experiment with https://docs.rs/clipping/0.1.1/clipping/gh/struct.CPolygon.html and https://github.com/21re/rust-geo-booleanop - -## More problems to fix - -- Disconnected map - - now that LCing model is simple... -- Impossible turns (from a far bus lane to a crazy left) -- Buildings intersecting roads, probably because bad lane inference - - when this happens, get rid of parking lanes first (one or both sides?) - - iterative process... have to redo affected roads and intersections - - we havent filtered buildings by proximity to sidewalk yet - - if we dont filter at all, we pick up some houseboats! :) should draw water... - -## Map edits - -- lane type can affect border intersections -- lane type can affect turn idx - - assert turns are the same - -## Sim bugs/tests needed - -- do bikes use bike lanes? -- test that peds will use buses organically - - make sure that we can jump to a ped on a bus and see the bus -- park/unpark needs to jump two lanes in the case of crossing a bike lane or something - - should only be able to park from the closest lane, though! -- explicit tests making cars park at 0 and max_dist, peds walk to 0 and max_dist -- lanechange rebalancing -- parking/unparking on offside of oneway - -## Discrete-event sim model - -- perf - - dig into individual events, still too many? - - for laggy heads, often round down and try slightly too early - -## Laundry list of intersection geometry ideas - -- make sure road widths are reasonable first - - SDOT dataset - - channelization -- extend all the thick roads until they poke out of stuff (except for roads continuing straight) -- play with https://github.com/w8r/polygon-offset -- https://github.com/migurski/Skeletron -- stitch together orig center line of adj roads. then do polyline shifting, which already handles angle eating? -- manually draw intersections - - montlake/520 4 traffic signal case. existing road geometry in OSM doesn't even cover everything. diff --git a/docs/TODO_refactoring.md b/docs/TODO_refactoring.md deleted file mode 100644 index af90c4b845..0000000000 --- a/docs/TODO_refactoring.md +++ /dev/null @@ -1,39 +0,0 @@ -# TODO - Refactoring - -- easier way to define magic tuneable constants - - and maybe to recalculate fixedish things if they change? - -## Map layer - -- fixed precision math - - more careful geom types, with negative/positive cases - - also bounds? - - cant get rid of the ccw intersection check... different answer in some cases that looks bad - -- maybe also the time to split into different lane types? what's similar/not between them? - - graph querying? - - rendering (and other UI/editor interactions)? - - sim state? - - Sidewalk, Parking, Street - -## Sim layer - -- rename Car->Vehicle? -- spawning is convoluted - - popdat trip -> Scenario SpawnTrip -> pick ped speed and make spawner's TripSpec -> create trip and schedule a Command -> last minute rewriting when executing the command -- more precise car FSM by putting scheduler pointer into carstate - -## ezgui layer - -- probably use f32, not f64 everywhere... but after Pt2D becomes fixed size -- undo the y inversion hacks at last! -- ezgui passes EventCtx and DrawCtx with appropriate things exposed. - - maybe move glyph ownership out of canvas entirely. dont need RefCell. - - need to pass around a NonDrawCtx very uniformly first for this to work - - canvas owning text-drawing is maybe a bit weird, at least API-wise - - hide stuff inside the ctx's? canvas and prerender shouldnt even be known outside of crate -- generic World with quadtree should have actions on objects -- loading screen - - FileWithProgress should go directly into Timer - - need to understand lifetimes - - cleanup abstutil Timer stuff generally diff --git a/docs/TODO_ux.md b/docs/TODO_ux.md deleted file mode 100644 index 5b6c3939a9..0000000000 --- a/docs/TODO_ux.md +++ /dev/null @@ -1,62 +0,0 @@ -# TODO - GUI and UX - -## Fix existing stuff - -- if a lane could feasibly have multiple turn options but doesnt, print "ONLY" -- audit all panics -- tune text color, size, padding - -- click cycle diagram to edit duration - -- yellow or flashing red/yellow for yields -- text box entry: highlight char looks like replace mode; draw it btwn chars - -## General ezgui stuff - -- arbitrary viewports?! -- tiling wm - -## New features - -- collapse smaller roads/neighborhoods and just show aggregate stats about them (in/out flow, moving/blocked within) - -## Better rendering - -- depict residential bldg occupany size somehow -- rooftops - - https://thumbs.dreamstime.com/b/top-view-city-street-asphalt-transport-people-walking-down-sidewalk-intersecting-road-pedestrian-81034411.jpg - - https://thumbs.dreamstime.com/z/top-view-city-seamless-pattern-streets-roads-houses-cars-68652655.jpg -- general inspiration - - https://gifer.com/en/2svr - - https://www.fhwa.dot.gov/publications/research/safety/05078/images/fig6.gif - - http://gamma.cs.unc.edu/HYBRID_TRAFFIC/images/3d-topdown.jpg -- color tuning - - neutral (white or offwhite) color and make noncritical info close to - that. http://davidjohnstone.net/pages/lch-lab-colour-gradient-picker, - chroma < 50 - -## Performance - -- it's a pity we have to redo DrawCar work for all those parked cars every tick -- show FPS or some kind of measure of lag -- sleep better in the event loop - - first make UserInput borrow state and not need to consume -- more speculative performance ideas - - specialized shaders for common shapes like circles? - - try https://docs.rs/dymod/0.1.0/dymod/ to link in a release-mode ezgui crate? - -## Depicting traffic unzoomed - -- strange things to depict - - cars partly straddling roads - - some lanes backed up, others moving - - peds (lots of them in one position maybe!) - - intersections (simultaneous turns, some blocked, others not) - - peds waiting for bus -- general ideas - - darked colors (contrast map bg and road) - - show min/max bounds (exact max is hard, but could calculate best-case easily) - - percentage of capacity instead of an exact, moving length -- criteria - - at low zoom, easily pinpoint where things are moving and stuck - - include all agents diff --git a/docs/backlog.md b/docs/backlog.md new file mode 100644 index 0000000000..8bf786d901 --- /dev/null +++ b/docs/backlog.md @@ -0,0 +1,144 @@ +# Backlog + +These are very old TODOs that aren't captured elsewhere. + +## Themed rendering + +- halloween, winter, jungle, 8bit, organic (deform buildings), floorplan, + machine (make buildings pump along front paths) + +## Halloween visual demo + +- cars with headlights +- pumpkins +- fences / bushes / features in houses or triangulation on a block with buildings +- buildings as rooms in a hotel +- silent hill soundtrack +- deformed buildings pulsing on front path springs +- lighting? +- fog effects +- in 3D, what if roads are sunken rivers and buildings giant skyscrapers? +- eyes on the houses, that blink +- trick-or-treaters wandering around + +## Conga line idea + +- try constructive approach for snake idea + - with interactive mode? +- try destructive approach for snake idea + - with interactive mode? + +## Charm + +- music / sound effects + - as you zoom in, overhear conversations and such +- some buildings could have extra detail +- zoom in too much, what might you see? ;) +- loading screen: snakey cars +- game intro/backstory: history of seattle urban planning +- player context: a drone. people will look up eventually. + +## More things to simulate + +- seed parked cars in neighborhood with no owner or a far-away owner, to model reasonable starting state +- outgoing border nodes can throttle to simulate traffic downstream + +## Tooling + +- play with https://github.com/glennw/thread_profiler +- and https://github.com/ferrous-systems/cargo-flamegraph +- display percentage breakdowns in Timer (need tree structure) + +## Boundary clipping + +- some border intersections have weird OOBish geometry, or the arrows look weird +- simplify border node detection, only do it in convert_osm? + +## More data + +- lanes: https://data-seattlecitygis.opendata.arcgis.com/datasets/49d417979fec452981a068ca078e7070_3 + - not filled out for most streets +- traffic circles: https://data-seattlecitygis.opendata.arcgis.com/datasets/717b10434d4945658355eba78b66971a_6 +- https://data-seattlecitygis.opendata.arcgis.com/datasets/sidewalks + - disagrees with OSM road centers sometimes +- https://data-seattlecitygis.opendata.arcgis.com/datasets/curb-ramps +- high quality thick roads: https://seattlecitygis.maps.arcgis.com/apps/webappviewer/index.html?id=86cb6824307c4d63b8e180ebcff58ce2 +- render trees +- look for current stop sign priorities + - https://gis-kingcounty.opendata.arcgis.com/datasets/traffic-signs--sign-point/ +- http://guides.lib.uw.edu/research/gis/uw-lib_data has cool stuff, but .lyr?? + +## Map edits + +- lane type can affect border intersections + +## Sim bugs/tests needed + +- do bikes use bike lanes? +- test that peds will use buses organically + - make sure that we can jump to a ped on a bus and see the bus +- park/unpark needs to jump two lanes in the case of crossing a bike lane or something + - should only be able to park from the closest lane, though! +- explicit tests making cars park at 0 and max_dist, peds walk to 0 and max_dist +- lanechange rebalancing +- parking/unparking on offside of oneway + +## Laundry list of intersection geometry ideas + +- make sure road widths are reasonable first + - SDOT dataset + - channelization +- extend all the thick roads until they poke out of stuff (except for roads continuing straight) +- play with https://github.com/w8r/polygon-offset +- https://github.com/migurski/Skeletron +- stitch together orig center line of adj roads. then do polyline shifting, which already handles angle eating? +- manually draw intersections + - montlake/520 4 traffic signal case. existing road geometry in OSM doesn't even cover everything. + +## Map layer + +- fixed precision math + - more careful geom types, with negative/positive cases + - also bounds? + - cant get rid of the ccw intersection check... different answer in some cases that looks bad + +## Sim layer + +- rename Car->Vehicle? +- spawning is convoluted + - popdat trip -> Scenario SpawnTrip -> pick ped speed and make spawner's TripSpec -> create trip and schedule a Command -> last minute rewriting when executing the command +- more precise car FSM by putting scheduler pointer into carstate + +## ezgui layer + +- probably use f32, not f64 everywhere... but after Pt2D becomes fixed size +- undo the y inversion hacks at last! +- ezgui passes EventCtx and DrawCtx with appropriate things exposed. + - hide stuff inside the ctx's? canvas and prerender shouldnt even be known outside of crate +- loading screen + - FileWithProgress should go directly into Timer + - need to understand lifetimes + +## Fix existing stuff + +- if a lane could feasibly have multiple turn options but doesnt, print "ONLY" +- text box entry: highlight char looks like replace mode; draw it btwn chars + +## New features + +- collapse smaller roads/neighborhoods and just show aggregate stats about them (in/out flow, moving/blocked within) + +## Better rendering + +- depict residential bldg occupany size somehow +- rooftops + - https://thumbs.dreamstime.com/b/top-view-city-street-asphalt-transport-people-walking-down-sidewalk-intersecting-road-pedestrian-81034411.jpg + - https://thumbs.dreamstime.com/z/top-view-city-seamless-pattern-streets-roads-houses-cars-68652655.jpg +- general inspiration + - https://gifer.com/en/2svr + - https://www.fhwa.dot.gov/publications/research/safety/05078/images/fig6.gif + - http://gamma.cs.unc.edu/HYBRID_TRAFFIC/images/3d-topdown.jpg +- color tuning + - neutral (white or offwhite) color and make noncritical info close to + that. http://davidjohnstone.net/pages/lch-lab-colour-gradient-picker, + chroma < 50