Commit Graph

4794 Commits

Author SHA1 Message Date
Dustin Carlino
2bfb5d5ac4 Track how many cars are entering zones with caps.
Tested by print debugging and comparing to throughput stats
2020-08-20 16:38:45 -07:00
Dustin Carlino
fa83554eb4 Consolidate code for loading edits from JSON 2020-08-20 16:33:08 -07:00
Dustin Carlino
2783c3e180 Expose the granular delays through an API for reinforcement learning (#245). 2020-08-20 16:21:52 -07:00
Dustin Carlino
084b9d74cd Store delay for traffic signals per direction of travel, using a compressed representation of turn groups. No substantial increase in prebaked file size. 2020-08-20 16:21:52 -07:00
Michael Kirk
5db0a7ad9d
reclaim wasm vertex/buffer memory, consolidate glow backends (#290)
* Complete wasm backend memory mgmt, extract common glow code

Similar to 3e8d2d7d, but for the wasm backend.

Also takes a pass at consolidating some of the common code between the
glow-native and glow-wasm backends. At this point, the backends just
diverge in their window handling, and the data types of their OpenGL
data types (e.g. vertex_buffer.id is WebBufferId vs. uint32 on native)

* glow impls share prerender innards

* coalesce vertex/buffer types

* minimize diff

* clarify module naming
2020-08-20 15:58:51 -07:00
Dustin Carlino
3a10416e26 Organize map edits code a little 2020-08-20 15:34:15 -07:00
Dustin Carlino
14c66c5528 A humble start to a Percent type for #274. There are so many places to
use it; just start a few in ezgui. Also a good time to object to the API
so far.
2020-08-20 11:01:59 -07:00
Dustin Carlino
2c5bbd3e7e Use alternate language building names and amenities, when available. Fixes #271.
Tested in Shinjuku. No substantial file size increase for any maps.
2020-08-20 10:39:28 -07:00
Dustin Carlino
bd35260b0a updater was missing xian 2020-08-20 08:22:13 -07:00
Michael Kirk
3e8d2d7daa glow: fix memory leak of old vertex data 2020-08-20 08:19:51 -07:00
Michael Kirk
7856671ac6 Fix glow backend on mac
Without this change, the screen was blank when using the glow backend on macos.

Some debugging traced it down to the shader attribute configuration.
@dabreegster suggested trying to declare a newer version of the shader
language which supports the syntax for explicit attribute layout, which
fixed it.

Specifically, before this commit, this diff was interesting on macos:

diff --git a/ezgui/src/backend_glow.rs b/ezgui/src/backend_glow.rs
index 2046bccd..f834a4fa 100644
--- a/ezgui/src/backend_glow.rs
+++ b/ezgui/src/backend_glow.rs
@@ -244,31 +244,7 @@ impl PrerenderInnards {
                 glow::FLOAT,
                 false,
                 stride,
-                // WTF: this offset seems correct, but on macos (OpenGL 4.1)
-                // a blank screen is rendered.
-                //
-                // To debug, I've hardcoded a color assignment in the fragment shader.
-                //
-                // What's fascinating is that, even if we don't use this second "style"
-                // input for anything, the mere act of passing it in with the expected
-                // offset causes all the geometries to not be visible.
-                //
-                // That is:
-                // - with a hardcoded color in the fragment shader
-                // - set offset `0` here (which is surely wrong?)
-                // - I can see the correct shapes with my hardcoded color
-                //
-                // - with a hardcoded color in the fragment shader
-                // - set offset `2*size_of(f32)` here (which should be right)
-                // - I'd expect to see the correct shapes with my hardcoded color
-                // - But instead I can no longer see any shapes on the screen
-                //
-                // So it seems like something about setting the offset on this second attribute
-                // configuration is corrupting our vertex data, even if we never read from that
-                // attribute data.
-                //
-                // 2 * std::mem::size_of::<f32>() as i32,
-                0
+                2 * std::mem::size_of::<f32>() as i32,
             );
2020-08-19 18:54:25 -07:00
Dustin Carlino
f31c4ec7fb New tool to union two scenarios. One use case is manually defining some
new trips, then seeing the impact they'll have on the normal weekday
scenario. So how much externality would be caused by a bunch of new
trips if some building is built?

Demo showing the whole flow: https://youtu.be/adpED0KGQ7Q. Why do those
few trips at the beginning impact some later trips so much? Who knows.
Likely parking spots get gobbled up.
2020-08-19 17:49:39 -07:00
Dustin Carlino
24a8d4a836 Prepare to support capping the number of vehicles that can pass through
a zone per hour. This is part of support for some kind of congestion
charging experiments. This step just rearranges the data to define the
cap and makes a UI to edit it. Not enforcing the cap yet.
2020-08-19 17:46:40 -07:00
Dustin Carlino
2ebf463635 Handle buildings tagged as parking garages in OSM. 2020-08-19 17:19:54 -07:00
Dustin Carlino
d427893843 Model parking lots with extra un-renderable spots. This fixes #150, lots
without aisles, and #265, multi-story garages.
2020-08-19 17:19:54 -07:00
Dustin Carlino
71ab485022 Attempt curved road labels for #173. Two issues left before enabling it:
- Need to draw a background underneath the curved text
- Sometimes the text is "upside-down" relative to what's expected; we
  should be able to reverse the polyline sometimes to deal with that. But
  when?
2020-08-19 13:43:36 -07:00
Dustin Carlino
7cbc0fd95c Make a tool to dump the map in JSON. 2020-08-19 12:49:30 -07:00
Dustin Carlino
8f258b33a6 Add dev-mode buttons to open OSM objects for buildings and parking lots too. Noticed they were missing while working on #271 2020-08-19 11:43:27 -07:00
Dustin Carlino
8c732feffb Build and publish cargo docs too
First try, real try...
2020-08-19 11:33:00 -07:00
Dustin Carlino
6749edb2b6 Change language of roads via settings, for #271 2020-08-18 17:32:49 -07:00
Dustin Carlino
2e93fdbf54 Fix parking aisle loops that cross the parking lot polygon. Closes #242 2020-08-18 15:12:12 -07:00
Dustin Carlino
b54f26b631 Document the API so far 2020-08-18 13:20:37 -07:00
Dustin Carlino
02569b1642 Get an end-to-end sample experiment working through the API and Python client 2020-08-18 12:52:38 -07:00
Dustin Carlino
5c337e2e8e Add some methods to the headless API for manipulating traffic signals, and start a Python client example. Everything still WIP. 2020-08-18 11:31:20 -07:00
Dustin Carlino
2c0e77b1f5 Add a simplified Chinese font. Fixes #226 2020-08-17 20:30:07 -07:00
Dustin Carlino
9a350b7568 Regularly import Xi'an 2020-08-17 19:37:34 -07:00
Dustin Carlino
40ddd06194 Improving the on/off ramp geometry by preferring that the "thin" road is
one of the outbound roads. This was motivated by one particular example
in downtown, and per screenshot tests, doesn't have regressions
elsewhere. Also improves a few cases in montlake.
2020-08-17 17:31:21 -07:00
Dustin Carlino
b75867f0c2 Implement Yuwen's interactive signal demand UI, fixing #277 2020-08-17 15:31:36 -07:00
Dustin Carlino
c6a2ae8ded Fix community proposals -- the JSON format changed in
11cefb118a.

I attempted using the jq tool, but wound up with vim regex:

s#{$\n\s\+"osm_node_id": \(\d\+\)$\n\s\+}#\1#100000
2020-08-17 14:39:38 -07:00
Dustin Carlino
a6a454d326 Add a tool to import external traffic demand data. The format and way of
calling the tool (not in the importer?) are just experiments right now.
2020-08-17 12:32:09 -07:00
Dustin Carlino
a3ffc48fee new release 2020-08-16 18:53:44 -07:00
Dustin Carlino
781f2b61bb update Cargo.lock; the winit patch changed commit hash I think [rebuild] 2020-08-16 17:47:02 -07:00
Dustin Carlino
e5f7136f27 parallelize the proletariat robot activity model for #154 [rebuild] 2020-08-16 17:33:12 -07:00
Dustin Carlino
7d460f27c8 squish_polygons_together infinite loops sometimes. until a proper fix, just limit it to 100 relaxations 2020-08-16 08:36:00 -07:00
Dustin Carlino
bef3434ac8 adjust the most egregious traffic signals downtown 2020-08-15 18:35:14 -07:00
Dustin Carlino
92d121ecd4 restore lakeslice to former glory, by allowing blocking-the-box at two intersections that're smushed together. had something like this a while ago, but I thought it became unnecessary when working on uber-turns a few weeks ago 2020-08-15 17:52:23 -07:00
Dustin Carlino
a6520b26c0 Omit trip timeline buttons to jump to the beginning/end of a trip in freeform mode. When you reset there, the sim is empty; there's no scenario. So it'll just crash, because the person doesn't exist. 2020-08-15 11:14:13 -07:00
Dustin Carlino
a70131b629 While hovering on turn icons in map-space, highlight the intersection and offset in the side panel to help orient. Little laggy, but worth it... 2020-08-15 11:04:22 -07:00
Dustin Carlino
3623296548 Improve rendering of multiple traffic signals in the side-bar by
"compressing" empty space between intersections. The result is a little
unexpected sometimes, but it's an improvement over the previous thing.
@michaelkirk suggested a variation in Slack that I'll try soon.
2020-08-15 10:40:15 -07:00
Dustin Carlino
83e84c10af Handle more errors in importer. Got the entirety of Taiwan to import...
but the water polygons are so sad. :(
2020-08-15 09:36:23 -07:00
Dustin Carlino
100d126d62 Also lazily render road center-lines. London from 42s down to 32s 2020-08-14 20:57:46 -07:00
Dustin Carlino
49ea9f2d54 Faster London:
- wire up the flag to skip building contraction hierarchies in one-shot
  importer. 406s to import london without, 230s by skipping CH
- lazily render zoomed parking lot details. 72s and laggy X11 mouse
  before, 42s and no GPU melting after
- add my script for stress-testing the importer
2020-08-14 20:50:22 -07:00
Dustin Carlino
5bede4aca2 Start some initial UI for tuning offset of multiple intersections 2020-08-14 20:50:13 -07:00
Dustin Carlino
3f86af0dc0 Add back some primitive control for signal offset at a single
intersection. Interpret the value in the simulation layer again (it was
removed around bb3da1f8eb or so due to
being unused).
2020-08-14 20:50:13 -07:00
Dustin Carlino
e6c1d960ec In traffic=none mode, allow recording (most of) the manually specified
trips as a Scenario to later re-run. This is useful for quickly defining
"test cases" for development, and it's a start to a UI for letting
players specify (and eventually share) traffic patterns they define.
2020-08-14 18:53:39 -07:00
Michael Kirk
3ed8b9cf81 Fix glium build, which was broken with: 85ad194d
85ad194d introduced a patched winit.

In the glium build, we were pulling in a second version of winit (the
unpatched version, via glutin). This caused conflicts between the data
types, breaking the build.

Apparently the proper way to specify a patch like this, usable by
transitive dependencies, is via cargo's "patch" specifiers
2020-08-14 15:11:49 -07:00
Dustin Carlino
377e154a1c Refactor the Transition enum, collapsing enum variants that were
combining primitive transitions into sequences.

Brief context on the state/transition system: The game crate is
organized as a stack of states, with the topmost one being active.
Transitions manipulate this stack. For example, the stack might look
like: [main menu, sandbox mode, edit mode, traffic signal editor, signal
picker]
2020-08-14 14:38:50 -07:00
Michael Kirk
e5b08c71c0 Fix HiDPI screens for wasm
Fixes upstream winit bug
2020-08-14 14:13:18 -07:00
Dustin Carlino
bc858fdbb3 Work around a crash on the intersection demand panel, reproducible by
watching https://www.openstreetmap.org/node/53214134 on the weekday
scenario. At some point, an arrow polygon with an inner ring is scaled
down, collapsing its points so much that the ring becomes invalid.
2020-08-14 12:09:06 -07:00
Dustin Carlino
25ee39af89 Prepare to flag-guard an experiment to handle uber-turns differently
when allowing a car to start a turn. It causes
https://github.com/dabreegster/abstreet/pull/276#discussion_r470269394
and also the lakeslice scenario to gridlock (a regression that began a
few weeks ago). But keep the flag on for now, to keep the montlake
scenaro running at least.

https://dabreegster.github.io/abstreet/trafficsim/gridlock.html has
notes about the many different causes and in-progress fixes for
gridlock. This experiment hasn't been explained very well yet, but
roughly it treats a cluster of traffic signals as one, so that once a
vehicle gains access through the first light, they guarantee immediate
access through the entire sequence. This interacts with the "don't block
the box" behavior (don't start a turn if you might get stuck in the
intersection) strangely.

While attempting to get this rollback to work, I also had to manually
redraw the traffic lights for a few manually specified intersections.
They became out-of-date a few weeks ago when I cleaned up the OSM
geometry upstream and the referenced IDs changed, and I hadn't bothered
to re-time the signals. Luckily, with the new multi-signal editor,
redrawing the timing was much easier than originally!

Regenerated all data and lots of bus routes vanished. Plan to get back
to that project soon.
2020-08-14 11:33:25 -07:00