abstreet/docs/TODO_ux.md

3.7 KiB

TODO - GUI and UX

Fix existing stuff

  • 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
  • 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

  • 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

  • traffic signal cycles go offscreen sometimes!

  • mouseover shouldnt even be possible in lot of modes, like when a menu is active

General ezgui stuff

  • optionally limit canvas scrolling/zooming to some map bounds
  • 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
  • start context menu when left click releases and we're not dragging
  • dont draw context menu off-screen
  • can we change labels in modal or top menu? show/hide
  • stacked modal menus
    • should quit key for modal menus match key that started it?
    • launch floodfill from context menu while following an agent... shouldnt be allowed
    • can coexist: show score, search, hide
    • some abstraction to just declare set_mode, give the extra width and height besides the menu, and get back a screenpt to start drawing at
  • bold hotkey letters

New features

  • swap direction of one-way
  • convert between one- and two-way if there's enough space
  • collapse smaller roads/neighborhoods and just show aggregate stats about them (in/out flow, moving/blocked within)
  • undo support for edits

Better rendering

Switch to OpenGL (for speed)

  • speed
    • 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
  • quality
    • need padding around text
    • text entry needs to draw the cursor differently
  • more speculative performance ideas
    • experiment with batching and not passing colors
    • specialized shaders for common shapes like circles?
    • try https://docs.rs/dymod/0.1.0/dymod/ to link in a release-mode ezgui crate?

Performance

  • it's a pity we have to redo DrawCar work for all those parked cars every tick
  • areas like lakes are incredibly detailed