46 lines
1.2 KiB
GDScript
46 lines
1.2 KiB
GDScript
extends StaticBody3D
|
|
|
|
signal button_pressed
|
|
|
|
@onready var mesh_instance: MeshInstance3D = $MeshInstance3D
|
|
@onready var collision_shape: CollisionShape3D = $CollisionShape3D
|
|
|
|
var original_color: Color = Color.DODGER_BLUE
|
|
var hover_color: Color = Color.CYAN
|
|
var press_color: Color = Color.WHITE
|
|
|
|
func _ready():
|
|
# Setze die Collision Layer für XR Tools
|
|
collision_layer = 1 << 20
|
|
collision_mask = 0
|
|
|
|
# Stelle sicher dass ein Material existiert
|
|
if mesh_instance and mesh_instance.get_surface_override_material_count() == 0:
|
|
var material = StandardMaterial3D.new()
|
|
material.albedo_color = original_color
|
|
mesh_instance.set_surface_override_material(0, material)
|
|
|
|
func pointer_event(event):
|
|
if not event is XRToolsPointerEvent:
|
|
return
|
|
|
|
match event.event_type:
|
|
XRToolsPointerEvent.Type.ENTERED:
|
|
set_button_color(hover_color)
|
|
|
|
XRToolsPointerEvent.Type.EXITED:
|
|
set_button_color(original_color)
|
|
|
|
XRToolsPointerEvent.Type.PRESSED:
|
|
set_button_color(press_color)
|
|
button_pressed.emit()
|
|
|
|
XRToolsPointerEvent.Type.RELEASED:
|
|
set_button_color(hover_color)
|
|
|
|
func set_button_color(color: Color):
|
|
if mesh_instance and mesh_instance.mesh:
|
|
var material = mesh_instance.get_surface_override_material(0)
|
|
if material:
|
|
material.albedo_color = color
|