Week 69: Radial-menus and robust tap-to-select

An animated GIF of a recording from Meteor Power showing a radial menu widget appearing when tapping on a bot character.
A fancy new radial menu!

tl;dr: Last week I created a radial-menu system, an info-panel system, and I added support for bot tap-to-select, which works well for any camera zoom and when multiple bots overlap.

What happened last week?


  • I added support for bot tap-to-select, which works for any camera zoom and when multiple tappable objects overlap.
    • I wrote a separate post describing the problems and solutions in my new tap-to-select system.
  • I created a radial-menu system.
  • I created an info-panel component.
  • I made many updates to bot selection and bot camera swaps.

Laundry list

An animated GIF of a recording from Meteor Power showing how pointer-detection works in different zoom levels and with both a level-space character-shape region and a screen-space radius.
Mouse-detection working at different zoom levels by using
both a level-space collision-shape and a screen-space radius.

  • Better tap-to-select:
    • Start adding support for defining a screen-space-click-radius for LevelControls.
    • Start adding support for clicking on characters.
    • Add a system for choosing the closest pressed LevelControl.
    • Add a fallback for choosing the closest LevelControl when zoomed-out.
    • Add support for drawing an annotation for the character's pointer-detector screen-radius.
    • Hook-up bot-selection with the new tap-to-select system.
    • Remove the old bot-selection system.
    • Fix an issue with a bot being selected on touch-down and then immediately selecting a navigation target on touch-up.
    • Fix a regression with camera-swap when selecting a bot with a tap.
    • Fix an issue with touch-move still firing when _ignore_next_pointer_release is true.
    • Fix cursor-update to also work with screen-radius.
    • Show a highlight/outline for a bot when the touch/cursor is over it.
    • Fix screen-radius to account for GUI scale factor due to screen resizing.
  • Radial menu:
    • Create a radial-menu widget.
    • Add support for radial-menu-item IDs to be either Strings or ints.
    • Fix an issue with RadialMenu position assignment.
    • Fix an issue with calculating radial-menu-item size.
    • Fix some issues with radial menu scaling.
    • Fix issues with radial-menu touch-up callbacks not firing.
    • Adjust radial-menu params.
    • Fix an issue with the radial-menu center area not being responsive to the camera zoom.
    • Disable bot touch-tracking when the radial menu is open.
    • Update radial-menu to configure each of its sub-controls as exclusively-included for touch-tracking.
  • Info-panel component:
    • Create a new info-panel system.
    • Add support for closing info-panels when tapping anywhere in the level.
  • Bot/station-selection and camera-swap updates:
    • Add support for transitioning station overlay-button opacity depending on the station's current position in the viewport.
      • Now they are always visible, and they just fade-out when they’re less in focus.
      • They used to only be visible when hovering a mouse or touch over the station area.
    • Have the station overlay button opacity fade-out faster.
    • Move logic for highlight/opacity updates based-on viewport position from OverlayButtonPanel to Station.
    • Create a new OutlineableAnimatedSprite.
    • Add support for highlighting a station with an outline depending on its proximity to the center of the screen.
    • Add support for showing a pointing-hand cursor when hovering over LevelButtons.
    • Add support for updating the station highlight when it, or one of its buttons, is hovered.
    • Update bot and station selection logic: 
      • Deselect other bots/stations
      • Toggle info-panel display
      • Adjust highlight/outline
  • Miscellaneous:
      • Fix a bug where different instances of ShapedLevelControls were sharing the same shape.
      • Spend some time planning new gameplay features.
      • Installed Unreal Engine.
      • Fix a race-condition with the CharacterPositionAnnotator when closing the level.
      • Planned updates to bot/station selection.
      • Planned a new radial menu.
      • Add support for tracking when a single-touch becomes a multi-touch.
      • Configure some global meteor-power colors.
      • Add support for querying a character's position in global / screen space.
      • Refactor how command and cost IDs are configured.
      • Configure descriptions for each command type; configure additional command types.
      • Fix a regression in constructor-bot configuration.
      • Fix an issue with referencing freed LevelControls.
      • Fix an issue with LevelControl scaling.
      • Add support for dynamically disabling touch-tracking for a LevelControl.
      • Add support for configuring controls to be excluded or included-exclusively (excluding all others) for touch-tracking.

    What's next?

    • Some more camera-transition fixes for the new bot-selection scheme.
    • Create bot and station command art.
    • Configure costs and descriptions for commands and info panels.
    • Hook-up legacy command system with the new radial-menu and bot-selection system.

    🎉 Cheers!

    This is a simple icon representing my sabbatical.