xrjamfeb2025/scenes/pickable_demo/objects/snap_tray.gd

41 lines
1.1 KiB
GDScript

@tool
extends XRToolsPickable
## Snap-tray active state
@export var tray_active : bool = true: set = _set_tray_active
## Active material
@export var active_material : Material
## Inactive material
@export var inactive_material : Material
## Called when the node enters the scene tree for the first time.
func _ready():
# Update the tray_active state
_update_tray_active()
# Handle pointer events
func pointer_event(event : XRToolsPointerEvent) -> void:
# When pressed, toggle the tray active
if event.event_type == XRToolsPointerEvent.Type.PRESSED:
_set_tray_active(not tray_active)
# Handler for tray_active property change
func _set_tray_active(new_value : bool) -> void:
tray_active = new_value
if is_inside_tree():
_update_tray_active()
## Update state based on tray_active property
func _update_tray_active() -> void:
$Body.material_override = active_material if tray_active else inactive_material
$SnapArea1/SnapZone1.enabled = tray_active
$SnapArea2/SnapZone2.enabled = tray_active
$SnapArea3/SnapZone3.enabled = tray_active
$SnapArea4/SnapZone4.enabled = tray_active