LEMMA Interactable GUIs
Currently the following interactables are available:
- intern and extern:
- Dragger3D spatial manipulation
- VectorInput3D input by pulling out vectors
- Button3D the name says it
- Switch3D a button with an on- and off- state
- Slider3D a board that can be dragged to generate a value between 0 and 1
- only system intern:
- LabeledIcon3D like Button3D but with icon and text
- LabeledIconSwitch3D like Switch3D but with icon and text
The user interface is controlled by Interactable GUIs. Those are classes, that inherit from the abstract class Interactable3D.
The class, that uses them has to implement the interface Environment3D
. To use them generate them and add them to the using class by the method addInteractable() and give them an actor that can manipulate them by setActor(Node actor). The class that wants to react to their output must implement the interface ActionListener3D
(this is very similar to the button concept in AWT/Swing). The Environment asks them in every eventloop for events. The interactables can implement their own update() method. This should always call the super.update() method first. That gives you the property "currentEvent" which is an evaluation of the current gestures. Besides that disabling / enabling automatically takes place. Evaluating currentEvent the interactable can act in two different ways (designed so for more flexibility regarding the authoring system). It produces an ActionEvent3D
and provides it to its listeners (again like in the AWT/Swing concept).
The other option is that a property "toModify" was set in the authoring system in choosing a modifiable property from a list. The interactable then modifies this property without a listener.
Using the Authoring Environment Interactables can be further parameterized. You can find a description of how that works technically here
Interactables can be arranged either in the program or in the 3d modeler (see Modeling