abstreet/docs/TODO_ux.md
2019-01-25 10:50:40 -08:00

3.5 KiB

TODO - GUI and UX

Quick n easy

  • try showing traffic signals by little boxes at the end of lanes

    • red circle means right turn on red OK, red right arrow means nope, green means normal turns ok, green arrow means protected left, crosswalk hand or stick figure
    • Circle::new radius and pt project_away should take meters type
  • if a lane could feasibly have multiple turn options but doesnt, print "ONLY"

  • color roads as solid black when zoomed out, and make intersections similar (except for stop sign / signal)

  • audit all panics

  • tune text color, size, padding

  • sort the top menus

  • click cycle diagram to edit duration

  • lane edit validity

  • make it easy to see current lane when changing it

Less easy

  • revamp stop sign editor
  • toggle rewind mode
    • sim stuff feels like a modal menu that's kinda omniprescent, but gets hidden sometimes
  • yellow or flashing red/yellow for yields
  • text box entry: highlight char looks like replace mode; draw it btwn chars

General ezgui stuff

  • trigger screencap from a top menu debug thing WITHOUT a hotkey.
  • optionally limit canvas scrolling/zooming to some map bounds
  • T top menu doesnt know when we have a more urgent input thing going!
  • cant use G for geom debug mode and contextual polygon debug
  • on a menu with preselected thing, clicking ANYWHERE does stuff...
  • X on all menus
  • when dragging, dont give mouse movement to UI elements

New features

  • swap direction of one-way

  • convert between one- and two-way if there's enough space

  • undo support for edits

Better rendering

Switch to OpenGL (for speed)

  • speed
    • change ezgui API to allow uploading geometry once
      • polyline -> arrow polygon. then collapse all lane markings into one Drawable.

      • prerender lane polygons for GREAT win

      • what about color then? get fancy and plumb an override color uniform?

      • stop storing raw geometry when appropriate

      • should the API for batching be easier? make a bunch of mutable calls to GfxCtx-like thing, then flush it?

    • sleep better in the event loop
      • i think screencap is broken
      • first make UserInput borrow state and not need to consume
    • experiment with batching and not passing colors
    • measure performance of huge maps
    • specialized shaders for common shapes like circles?
  • quality
    • need padding around text
    • text entry needs to draw the cursor differently
    • better arrows (then debug the legend plugin)
  • refactoring
    • pass canvas to text module, make it do the glyph borrowing?
    • pass dims to draw_text_bubble; all callers have it anyway, right?
    • probably use f32, not f64 everywhere
    • undo the y inversion hacks at last!