-----------...

master
selim 2026-01-13 05:07:57 +01:00
parent ae352e59fc
commit 544065ae0b
9 changed files with 234 additions and 13 deletions

16
CodeLogic.gd 100644
View File

@ -0,0 +1,16 @@
extends Node3D
@export var target_door : RigidBody3D
func _ready():
# Wir suchen das KeypadUI im Viewport
# Pfad: Sprite3D -> Viewport -> KeypadUI
var uix: XRToolsViewport2DIn3D = $Sprite3D/Viewport2Din3D
var ui = uix.get_scene_instance()
if ui:
ui.access_granted.connect(_on_success)
func _on_success():
if target_door.has_method("unlock"):
print("Code richtig! Tür entriegelt.")
target_door.unlock()

1
CodeLogic.gd.uid 100644
View File

@ -0,0 +1 @@
uid://bv536pudp1y8m

33
DoorLock2.gd 100644
View File

@ -0,0 +1,33 @@
extends RigidBody3D
# Referenz zum Griff (der das Pickable-Skript hat)
@export var door_handle : XRToolsPickable
var unlocked : bool = false
func _ready():
# Am Start die Tür einfrieren
freeze = true
if door_handle:
# Signale verbinden
door_handle.picked_up.connect(_on_grab)
door_handle.dropped.connect(_on_release)
func unlock():
print("Tür entriegel!")
unlocked = true
func _on_grab(_pickable):
# Wenn angefasst: Physik aktivieren
if unlocked:
freeze = false
sleeping = false # Aufwecken, damit sie sofort reagiert
func _on_release(_pickable):
# Wenn losgelassen: Sofort wieder einfrieren
freeze = true
# WICHTIG: Geschwindigkeit nullen, damit sie sofort stoppt und nicht nachrutscht
linear_velocity = Vector3.ZERO
angular_velocity = Vector3.ZERO

1
DoorLock2.gd.uid 100644
View File

@ -0,0 +1 @@
uid://bld7vl75kp46e

55
keypad_ui.gd 100644
View File

@ -0,0 +1,55 @@
extends Control
# Signal senden, wenn der Code stimmt
signal access_granted
@export var correct_code = "1 7 9 1" # Dein Code hier!
var current_input = ""
@onready var display_label = $PanelContainer/VBoxContainer/Label
@onready var grid = $PanelContainer/VBoxContainer/GridContainer
func _ready():
# Alle Buttons im Grid automatisch verbinden
for button in grid.get_children():
if button is Button:
button.pressed.connect(_on_button_pressed.bind(button.text))
update_display()
func _on_button_pressed(value: String):
if value.ends_with("C") or value.ends_with(" C"):
current_input = ""
elif value.ends_with("E") or value.ends_with(" E"):
check_code()
else:
# Zahl hinzufügen (maximal 4 Stellen)
if current_input.length() < 8:
current_input += value
if current_input.length() < 6:
current_input += " "
update_display()
func update_display():
if current_input == "":
display_label.text = "- - - -"
else:
display_label.text = current_input
func check_code():
if current_input == correct_code:
display_label.text = "OPEN"
display_label.modulate = Color.GREEN
# Signal feuern!
emit_signal("access_granted")
else:
display_label.text = "ERR"
display_label.modulate = Color.RED
current_input = ""
# Kurzer Timer um Fehler anzuzeigen, dann reset
await get_tree().create_timer(1.0).timeout
display_label.modulate = Color.WHITE
update_display()

1
keypad_ui.gd.uid 100644
View File

@ -0,0 +1 @@
uid://cmml8njqoy1yt

92
keypad_ui.tscn 100644
View File

@ -0,0 +1,92 @@
[gd_scene load_steps=2 format=3 uid="uid://dw214jjrux7tl"]
[ext_resource type="Script" uid="uid://cmml8njqoy1yt" path="res://keypad_ui.gd" id="1_kckd0"]
[node name="KeypadUI" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_kckd0")
[node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 0
offset_right = 248.0
offset_bottom = 323.0
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
horizontal_alignment = 1
[node name="GridContainer" type="GridContainer" parent="PanelContainer/VBoxContainer"]
layout_mode = 2
columns = 3
[node name="Button" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "1"
[node name="Button2" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "2"
[node name="Button3" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
custom_minimum_size = Vector2(80, 0)
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "3"
[node name="Button4" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "4"
[node name="Button5" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "5"
[node name="Button6" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "6"
[node name="Button7" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "7"
[node name="Button8" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "8"
[node name="Button9" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "9"
[node name="Button10" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "C"
[node name="Button11" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "0"
[node name="Button12" type="Button" parent="PanelContainer/VBoxContainer/GridContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 40
text = "E"

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=8 format=3 uid="uid://srkkei4i3bwx"] [gd_scene load_steps=9 format=3 uid="uid://srkkei4i3bwx"]
[ext_resource type="PackedScene" uid="uid://njx823gyk04n" path="res://addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn" id="2_hqtel"] [ext_resource type="PackedScene" uid="uid://njx823gyk04n" path="res://addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn" id="2_hqtel"]
[ext_resource type="PackedScene" uid="uid://raeeicvvindd" path="res://addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn" id="2_i3pqv"] [ext_resource type="PackedScene" uid="uid://raeeicvvindd" path="res://addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn" id="2_i3pqv"]
@ -7,6 +7,7 @@
[ext_resource type="PackedScene" uid="uid://diyu06cw06syv" path="res://addons/godot-xr-tools/player/player_body.tscn" id="4_2hs0m"] [ext_resource type="PackedScene" uid="uid://diyu06cw06syv" path="res://addons/godot-xr-tools/player/player_body.tscn" id="4_2hs0m"]
[ext_resource type="Script" uid="uid://ceqc6auge0rjs" path="res://ChronoWatch.gd" id="4_sweqy"] [ext_resource type="Script" uid="uid://ceqc6auge0rjs" path="res://ChronoWatch.gd" id="4_sweqy"]
[ext_resource type="PackedScene" uid="uid://buevt1k3wgtq6" path="res://watch.tscn" id="6_1jxqw"] [ext_resource type="PackedScene" uid="uid://buevt1k3wgtq6" path="res://watch.tscn" id="6_1jxqw"]
[ext_resource type="PackedScene" uid="uid://cqhw276realc" path="res://addons/godot-xr-tools/functions/function_pointer.tscn" id="7_dw050"]
[node name="Player" type="XROrigin3D" groups=["Baby"]] [node name="Player" type="XROrigin3D" groups=["Baby"]]
@ -42,6 +43,10 @@ camera = NodePath("../../Camera")
[node name="Sketchfab_Scene" parent="RightController/Watch" instance=ExtResource("6_1jxqw")] [node name="Sketchfab_Scene" parent="RightController/Watch" instance=ExtResource("6_1jxqw")]
transform = Transform3D(0.00025759128, -0.0019833425, 0, 0.0018915471, 0.00024566916, -0.0006014116, 0.00059640256, 7.745919e-05, 0.001907434, 0, -0.034, 0.108) transform = Transform3D(0.00025759128, -0.0019833425, 0, 0.0018915471, 0.00024566916, -0.0006014116, 0.00059640256, 7.745919e-05, 0.001907434, 0, -0.034, 0.108)
[node name="FunctionPointer" parent="RightController" instance=ExtResource("7_dw050")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.02, 0.05, -0.1)
hand_offset_mode = 4
[node name="PlayerBody" parent="." instance=ExtResource("4_2hs0m")] [node name="PlayerBody" parent="." instance=ExtResource("4_2hs0m")]
player_height_rate = 20.0 player_height_rate = 20.0
head_behavior_mode = 2 head_behavior_mode = 2