48 lines
1.5 KiB
GDScript
48 lines
1.5 KiB
GDScript
extends Area3D
|
|
|
|
# Exportierte Variable, damit du im Inspector den Ziel-Node auswählen kannst
|
|
@export var target_node: Node3D
|
|
@export var right_controller: XRController3D
|
|
@export var activation_distance: float = 1.0 # 100cm Reichweite
|
|
# Optional: Farben für verschiedene Zustände
|
|
@export var color_visible: Color = Color.GREEN
|
|
@export var color_hidden: Color = Color.RED
|
|
|
|
var button_was_pressed = false
|
|
|
|
func _ready():
|
|
# Setze initiale Farbe basierend auf Sichtbarkeit
|
|
if target_node:
|
|
_update_color()
|
|
|
|
func _process(_delta):
|
|
if not right_controller:
|
|
return
|
|
|
|
# Prüfe Distanz zum Controller
|
|
var distance = global_position.distance_to(right_controller.global_position)
|
|
var button_pressed = right_controller.is_button_pressed("ax_button")
|
|
|
|
# Toggle wenn nah genug und Button neu gedrückt
|
|
if distance < activation_distance and button_pressed and not button_was_pressed:
|
|
toggle_visibility()
|
|
|
|
button_was_pressed = button_pressed
|
|
|
|
func toggle_visibility():
|
|
if target_node:
|
|
# Schalte Sichtbarkeit um
|
|
target_node.visible = !target_node.visible
|
|
_update_color()
|
|
print("Node '%s' ist jetzt %s" % [target_node.name, "sichtbar" if target_node.visible else "versteckt"])
|
|
else:
|
|
print("Kein Ziel-Node zugewiesen!")
|
|
|
|
func _update_color():
|
|
# Ändere die Farbe der Box basierend auf dem Zustand
|
|
if has_node("MeshInstance3D"):
|
|
var mesh_instance = get_node("MeshInstance3D")
|
|
var material = StandardMaterial3D.new()
|
|
material.albedo_color = color_visible if target_node.visible else color_hidden
|
|
mesh_instance.material_override = material
|