31 lines
2.4 KiB
Markdown
31 lines
2.4 KiB
Markdown
# Interaction System
|
|
|
|
The app currently supports 3 different types of interaction techniques:
|
|
|
|
- **Using controllers with raycast**
|
|
- **Using hands with raycast**
|
|
- **Using hands with direct touch**
|
|
|
|
The interaction system, like the [Event System](/development/event-system.html), is heavily inspired by the interaction system in browsers. Interaction Events can be broken down into 2 categories, [Pointer Events](/reference/EventPointer.html) initiated by a raycast and [Touch Events](/reference/EventTouch.html) initiated by a collision shape in the tip of the fingers. Pointer Events](/reference/EventPointer.html)
|
|
|
|
## Pointer Events
|
|
|
|
When pressing the trigger button on the back of a controller or doing a pinch gesture with thumb and index finer an `on_press_down` event is triggered containing a [EventPointer](/reference/EventPointer.html) which holds information about the ray and initiator of the event. If the trigger button or pinch gesture is released before 400ms pass, an `on_press_up` and `on_click` event is triggered. If the trigger button or pinch gesture is held for more than 400ms, an `on_press_move` event is triggered each physics process and when releasing, only the `on_press_up` event is triggered.
|
|
|
|
![Event Order](/img/event-order.svg)
|
|
|
|
The same logic can be applied to **grab** (`on_grab_down`, `on_grab_move` and `on_grab_up`) events, here the event family is triggered by the grip button on the controller or by doing a pinch gesture with thumb and middle finger.
|
|
|
|
### Pinch Gesture
|
|
|
|
The pinch gesture is implemented by checking the distance between the thumb and each finger and if the distance is smaller than 3cm, the pinch gesture is detected.
|
|
|
|
## Touch Events
|
|
|
|
Touch events are triggered when the collision shape present in the tip of the fingers enters another collision area. The `on_touch_enter` event is triggered when the collision shape enters the area, the `on_touch_move` event is triggered each physics process while the collision shape is inside the area and the `on_touch_leave` event is triggered when the collision shape leaves the area.
|
|
|
|
![Touch Event Order](/img/touch-event.svg)
|
|
|
|
## Hover (ray) Events
|
|
|
|
Each frame the ray is casted from the controller or hand and in case that the ray collides with a collision node, the `on_ray_enter` event is triggered. If the ray was already colliding with another object the previous frame, the `on_ray_leave` event is triggered on the old node. |