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:
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.