mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-25 07:25:47 +03:00
70 lines
3.0 KiB
Markdown
70 lines
3.0 KiB
Markdown
# Biking-related design notes
|
|
|
|
## Bike lanes
|
|
|
|
How do we model bikes merging to a driving lane to make a left?
|
|
|
|
## General modeling
|
|
|
|
Bikes are just like cars and can use all the same code, right? Except...
|
|
|
|
- different speeds
|
|
- can use bike or driving lanes
|
|
- they dont park or unpark
|
|
- actually, how does a ped start/stop using a bike?
|
|
- modeling bike lockup locations is overkill. in practice not a
|
|
problem. fixed 60s penalty to start/stop biking. penalty happens on
|
|
the sidewalk, then they spawn onto the bike/driving lane at the very end
|
|
- they can _maybe_ overtake on a bike lane?
|
|
- nah, that should be modeled as two bike lanes (or a bike and driving lane) and normal lanechanging behavior
|
|
- different rendering
|
|
- dont want to use CarID; could maybe rename it VehicleID, but then bike-specific code (like rendering) gets weird
|
|
|
|
Because of the orchestration with walking/biking models, I'm tempted to try to share some common code, but keep things a bit separate. However, if they're separate...
|
|
|
|
- driving lookahead needs to see bikes and vice versa
|
|
- do the SimQueues need to be state that both models can access?
|
|
|
|
|
|
Do this in a branch for sure. Roughly:
|
|
- introduce BikeID, the rendering, stubs for spawning
|
|
- lift SimQueues into Sim
|
|
- refactor lookahead
|
|
- add biking model
|
|
|
|
|
|
After starting this, I'm not sure now. The driving model as-is can handle bikes
|
|
fine. The interaction with the walking sim to appear/disappear is pretty
|
|
minimal. Alternate idea for another branch:
|
|
- keep existing driving code almost entirely as is.
|
|
= Vehicle bike type with super slow speed, modify driving lookahead to use the cap speed.
|
|
= no BikeID, just a bit in Car for is_bike.
|
|
= spawn param to decide if a trip without an owned car will instead bike
|
|
= walking state can own the 'parking/unparking' state.
|
|
= need a new DrivingGoal, simpler than ParkNear.
|
|
= render peds doing bike prep differently
|
|
= entirely new render code, but the same DrawCarInput (plus is_bike
|
|
bit). that part shouldn't matter, right?
|
|
= make sure biking from border works, needs an extra bit i think
|
|
|
|
- lastly: rename. Car -> Vehicle? Vehicle -> VehicleParams? DrivingSim -> QueuedSim?
|
|
|
|
- etc
|
|
= calculate_paths in spawn needs plumbing. introduce a PathfindingRequest struct, avoid those bools.
|
|
|
|
- stats; driving.count and trip score
|
|
- vehicle enum instead of is_bus, is_bike
|
|
- put this in vehicle properties, not on the main
|
|
car... then dont need it in Command::DriveFromBorder.
|
|
- spawn commands getting to have lots of similarish cases
|
|
|
|
- remove the sim helpers that do specific stuff... think of
|
|
another way to set up tests, similar to tutorial mode?
|
|
- verify abtest consistency
|
|
- all of the get_blah_from_blah queries in map are a mess
|
|
- Position(lane, dist) type would help, yeah?
|
|
- a big help: get rid of dimensioned. make Eq work by wrapping
|
|
NotNaN or something else, maybe even requiring explicit
|
|
tolerance thing? get rid of all the terrible PartialEq hacks.
|
|
- animate the bike preparation thing better... visually show time left somehow
|