-----------...
parent
ae352e59fc
commit
544065ae0b
|
|
@ -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()
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bv536pudp1y8m
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bld7vl75kp46e
|
||||||
|
|
@ -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()
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cmml8njqoy1yt
|
||||||
|
|
@ -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"
|
||||||
41
level.tscn
41
level.tscn
File diff suppressed because one or more lines are too long
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue