New Lemur release 1.13.0

And Lemur-proto 1.11.0

The major changes are that Lemur now properly supports multiple gamepads. Simsilica/Examples now has a demo called ‘sigem’ which illustrates this:

…it’s basically a two-player Asteroids/StarControl simple-clone.

The other big change was modifying OptionPanelState to use the now-standard PopupState instead of doing its own thing. Some tweaks to other code were made to make that more seamless.

Github Releases here:

Or Bintray here:

And here:

Lemur change log:

  • Added constants EFFECT_OPEN and EFFECT_CLOSE to Panel to make it easier
    to standardize open/close effects.
  • Modified PopupState to use the new Panel.EFFECT_OPEN and Panel.EFFECT_CLOSE
    instead of string literals.
  • Added PopupState.getGuiSize() that returns the (potentially scaled) screen size
    based on the PopupState’s guiNode.
  • Modified PopupState to properly request focus of the things it is popping up.
    Without this, keyboard navigation was trickier.
  • Modified InputMapper to map all gamepad buttons and axes, even if they don’t
    match up with predefined constants.
  • Modified Axis to include constants for JOYSTICK_LEFT_TRIGGER and JOYSTICK_RIGHT_TRIGGER
    along with support in InputMapper.
  • Added support for multiple gamepads/joysticks. There is now a new InputDevice
    class that provides gamepad-specific versions of the regular Button/Axis
    constants. Support for non-joystick-specific mappings still works like before.
  • Modified DragHandler to have set/getConsumeDrags() and set/getConsumeDrops() for
    tweaking the internal boolean settings.
  • Added GuiGlobals.releaseFocus() and the corresponding FocusManagerState.releaseFocus()
    which are safe ways to clear the focus for a currently focused element if it is
    still focused. Useful for conditionally clearing focus when tearing down a window.
  • Modified PopupState to call releaseFocus() for the popup when it is closing.

Lemur-proto change log:

  • Modified OptionPanelState to delegate all popup stuff to PopupState.
    Breaking change: OptionPanelState will use PopupState’s guiNode
    and will ignore the setting of any other local guiNode.
  • OptionPanel no longer releases cursor enabling because it was not the thing that
    requested cursor enabling. That’s up to the caller now.
    Breaking change: any caller that was manually managing OptionPanels
    and expecting them to clean this up will now need to clean it up themselves.
  • OptionPanelState no longer calls OptionPanel.close() and instead delegates to
    PopupState.closePopup() to avoid double-running close effects, etc. and also
    to properly handle cursor/focus release.
    Breaking change: any user application relying on OptionPanel.close() to be
    called in an OptionPanel subclass will have to hook things a different way.