first version of EU AI Act game
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bpjqsditshpyd"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://dka5ewv6regyf" path="res://Resources/meshes/arrow.tres" id="1_vl03t"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vl03t"]
|
||||
size = Vector3(1.8034668, 0.13964844, 1.7332764)
|
||||
|
||||
[node name="Arrow" type="StaticBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 15
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.44, 0, 0, 0, 0.057506055, 0, 0, 0, 0.44, 0, 0, 0)
|
||||
mesh = ExtResource("1_vl03t")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.42590332, 0.0043945313, 0.36663818)
|
||||
shape = SubResource("BoxShape3D_vl03t")
|
||||
@@ -0,0 +1,76 @@
|
||||
extends StaticBody3D
|
||||
class_name Balloon
|
||||
|
||||
@export var pop_up_text = ""
|
||||
@export var wait_time = 4.0
|
||||
@export var image_path = "res://assets/Images/spiel_ballon_text2.png"
|
||||
@onready var label_3d: Label3D = $Label3D
|
||||
@onready var balloon_model: MeshInstance3D = $Balloon_model
|
||||
@onready var collision_shape_3d: CollisionShape3D = $CollisionShape3D
|
||||
@onready var area_3d: Area3D = $Area3D
|
||||
signal balloon_popped
|
||||
|
||||
func _ready() -> void:
|
||||
for child in get_children():
|
||||
if child is RigidBody3D:
|
||||
child.freeze = true
|
||||
child.gravity_scale = 0.0
|
||||
$label.texture = load(image_path)
|
||||
|
||||
func _on_area_3d_body_entered(body: Node3D) -> void:
|
||||
if not body.is_in_group("throwable"):
|
||||
return
|
||||
$AudioStreamPlayer.play()
|
||||
balloon_popped.emit()
|
||||
# hide balloon, animation, make label visible
|
||||
balloon_model.visible = false
|
||||
$AnimationPlayer.play("pop")
|
||||
collision_shape_3d.call_deferred("queue_free")
|
||||
area_3d.call_deferred("queue_free")
|
||||
label_3d.text = pop_up_text
|
||||
label_3d.visible = true
|
||||
|
||||
# --- let objects hanging from balloons fall ---
|
||||
for child in get_children():
|
||||
print(child.name)
|
||||
if child is not RigidBody3D and child is not Area3D:
|
||||
print(child)
|
||||
continue # Label und Ballon ignorieren
|
||||
var global_tf = child.global_transform
|
||||
|
||||
remove_child(child)
|
||||
get_tree().current_scene.add_child(child) # zurück zur Welt
|
||||
child.global_transform = global_tf
|
||||
if child is Area3D and child.name.contains('Battery'):
|
||||
print('battery falling')
|
||||
print(child.position)
|
||||
child.position.y = child.position.y - child.new_y_diff
|
||||
print(child.position)
|
||||
child.set_picture()
|
||||
|
||||
# if RigidBody3D: activate physics again
|
||||
if child is RigidBody3D:
|
||||
child.freeze = false
|
||||
child.gravity_scale = 1.0
|
||||
|
||||
# start coroutine for delay + fade out
|
||||
await fade_and_destroy()
|
||||
|
||||
func fade_and_destroy() -> void:
|
||||
# wait 10 seconds
|
||||
await get_tree().create_timer(wait_time).timeout
|
||||
|
||||
# create tween and play it
|
||||
var tween = create_tween()
|
||||
tween.tween_property($label, "modulate:a", 0.0, 0.5) # 2 Sekunden FadeOut
|
||||
|
||||
# wait til tween is finished
|
||||
await tween.finished
|
||||
|
||||
# delete node
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == 'pop':
|
||||
$popped_balloon.visible = false
|
||||
@@ -0,0 +1 @@
|
||||
uid://dgai8blbmru22
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,16 @@
|
||||
extends Node3D
|
||||
|
||||
@export var balloon_resource: String = "res://Resources/meshes/dog.tres"
|
||||
signal balloon_chosen
|
||||
|
||||
func _ready() -> void:
|
||||
$Balloon_model.mesh = load(balloon_resource)
|
||||
|
||||
|
||||
func _on_area_3d_body_entered(body: Node3D) -> void:
|
||||
if not body.is_in_group("throwable") and not body is Player:
|
||||
return
|
||||
balloon_chosen.emit(balloon_resource)
|
||||
|
||||
func set_mesh(mesh: String):
|
||||
$Balloon_model.mesh = load(mesh)
|
||||
@@ -0,0 +1 @@
|
||||
uid://cffy3itwwknc7
|
||||
@@ -0,0 +1,31 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://ccdju064l1xg0"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cffy3itwwknc7" path="res://Resources/Objects/balloon_collectable.gd" id="1_3uo3v"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://jlkdee0elxgj" path="res://Resources/meshes/dog.tres" id="1_lsomq"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://m3hcjcox5dkf" path="res://Resources/meshes/balloon_string_curved.tres" id="2_3uo3v"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_l0yg6"]
|
||||
radius = 0.8
|
||||
|
||||
[node name="Balloon" type="Node3D"]
|
||||
script = ExtResource("1_3uo3v")
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.32942295, 0)
|
||||
collision_layer = 33
|
||||
collision_mask = 33
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||
shape = SubResource("CapsuleShape3D_l0yg6")
|
||||
|
||||
[node name="Balloon_model" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 0.28870273, 0)
|
||||
mesh = ExtResource("1_lsomq")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="Cylinder_049" type="MeshInstance3D" parent="Balloon_model"]
|
||||
transform = Transform3D(0.40000004, 0, 0, 0, 0.40000004, 0, 0, 0, 0.40000004, 0, -0.38572907, 0)
|
||||
mesh = ExtResource("2_3uo3v")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]
|
||||
@@ -0,0 +1,51 @@
|
||||
extends Grabbable_Object
|
||||
class_name Battery
|
||||
|
||||
@export var stored_power: int = 50
|
||||
@export var battery_label: String
|
||||
var connected_station: Node3D = null
|
||||
var original_transform: Transform3D
|
||||
var grabbed_parent
|
||||
var lamp_color
|
||||
@onready var battery_lamp_0: CSGSphere3D = $Battery/Battery_lamp_0
|
||||
@export var image_path: String = "res://assets/Images/EU_AI_Act_logo_main.png"
|
||||
|
||||
func _ready() -> void:
|
||||
lamp_color = battery_lamp_0.material.albedo_color
|
||||
$Sprite3D.texture = load(image_path)
|
||||
|
||||
func insert_into_station(station: Node3D):
|
||||
if connected_station:
|
||||
return
|
||||
connected_station = station
|
||||
grabbed_parent = get_parent()
|
||||
original_transform = global_transform
|
||||
|
||||
# put battery inot box
|
||||
grabbed_parent.remove_child(self)
|
||||
station.add_child(self)
|
||||
self.visible = false
|
||||
self.freeze = true
|
||||
|
||||
if station.has_method("insert_battery"):
|
||||
station.insert_battery(self)
|
||||
|
||||
func remove_from_station():
|
||||
if not connected_station:
|
||||
return null
|
||||
|
||||
var station = connected_station
|
||||
connected_station = null
|
||||
|
||||
|
||||
# get battery back out
|
||||
if original_parent:
|
||||
station.remove_child(self)
|
||||
grabbed_parent.add_child(self)
|
||||
global_transform = original_transform
|
||||
|
||||
self.visible = true
|
||||
self.freeze = false
|
||||
|
||||
return self
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://buxph0fig58vk
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,18 @@
|
||||
extends Area3D
|
||||
|
||||
@export var new_y_diff = 0.0
|
||||
@export var image_path: String = "res://assets/Images/EU_AI_Act_logo_main.png"
|
||||
|
||||
signal battery_collected
|
||||
|
||||
func set_picture() -> void:
|
||||
print('setting picture: ', image_path)
|
||||
$Sprite3D.texture = load(image_path)
|
||||
$Sprite3D.visible = true
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
Global.batteries += 1
|
||||
battery_collected.emit()
|
||||
queue_free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://blrm6oxhr4c5l
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,150 @@
|
||||
extends StaticBody3D
|
||||
class_name BatteryBox2
|
||||
|
||||
@onready var ai_threat: Label3D = $AI_threat/AI_threat_label
|
||||
@onready var box_battery = $Battery
|
||||
@onready var battery_lamp_0:= $battery_lamp_0
|
||||
@onready var battery_lamp_1:= $battery_lamp_1
|
||||
@onready var status_lamps = [
|
||||
$Status/status_0,
|
||||
$Status/status_1,
|
||||
$Status/status_2,
|
||||
$Status/status_3,
|
||||
$Status/status_4
|
||||
]
|
||||
|
||||
@export var power_needed: int = 50
|
||||
@export var max_power: int = 100
|
||||
@export var display_text: String
|
||||
var current_power: int = 0
|
||||
var battery_obj: Battery = null
|
||||
var blink_timer: Timer
|
||||
var color_dict = {25: Color(0.0, 1.697, 0.0),
|
||||
50: Color(1.697, 1.697, 0.0),
|
||||
75: Color(1.697, 0.85, 0.0),
|
||||
100: Color(1.697, 0.0, 0.0)}
|
||||
|
||||
signal removed_battery
|
||||
signal fully_charged
|
||||
|
||||
func _ready() -> void:
|
||||
blink_timer = Timer.new()
|
||||
blink_timer.wait_time = 0.3
|
||||
blink_timer.one_shot = false
|
||||
blink_timer.timeout.connect(_on_blink_timeout)
|
||||
add_child(blink_timer)
|
||||
ai_threat.text = display_text
|
||||
for lamp in status_lamps:
|
||||
lamp.visible = true
|
||||
if lamp.get_surface_override_material(0) == null:
|
||||
var material = StandardMaterial3D.new()
|
||||
lamp.set_surface_override_material(0, material)
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.DIM_GRAY
|
||||
var material_b0 = battery_lamp_0.mesh.surface_get_material(0).duplicate()
|
||||
battery_lamp_0.mesh.surface_set_material(0, material_b0)
|
||||
var material_b1 = battery_lamp_1.mesh.surface_get_material(0).duplicate()
|
||||
battery_lamp_1.mesh.surface_set_material(0, material_b1)
|
||||
|
||||
func insert_battery(battery: Battery) -> void:
|
||||
battery_obj = battery
|
||||
current_power = battery_obj.stored_power
|
||||
var lamp_color = color_dict[current_power]
|
||||
battery_lamp_0.mesh.surface_get_material(0).albedo_color = lamp_color
|
||||
battery_lamp_1.mesh.surface_get_material(0).albedo_color = lamp_color
|
||||
box_battery.visible = true
|
||||
update_status_lamps(battery_obj)
|
||||
|
||||
func remove_battery() -> Battery:
|
||||
$Sprite3D.visible = false
|
||||
var temp_battery = battery_obj
|
||||
battery_obj = null
|
||||
if current_power == power_needed:
|
||||
removed_battery.emit()
|
||||
current_power = 0
|
||||
box_battery.visible = false
|
||||
blink_timer.stop()
|
||||
|
||||
for lamp in status_lamps:
|
||||
if lamp.get_surface_override_material(0) == null:
|
||||
var material = StandardMaterial3D.new()
|
||||
lamp.set_surface_override_material(0, material)
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.DIM_GRAY
|
||||
lamp.visible = true
|
||||
|
||||
battery_lamp_0.mesh.surface_get_material(0).albedo_color = Color.DIM_GRAY
|
||||
battery_lamp_1.mesh.surface_get_material(0).albedo_color = Color.DIM_GRAY
|
||||
|
||||
temp_battery.remove_from_station()
|
||||
return temp_battery
|
||||
|
||||
func update_status_lamps(battery_obj: Battery) -> void:
|
||||
# ratio between current_power and power_needed
|
||||
var ratio: float = 0.0
|
||||
if power_needed != 0:
|
||||
ratio = float(current_power) / float(power_needed)
|
||||
ratio = clamp(ratio, 0.0, 1.0)
|
||||
|
||||
# count of lamps that should be colored (0..len)
|
||||
var lamps_to_light: int = ceil(ratio * status_lamps.size())
|
||||
# special cases: exactly full or overloaded
|
||||
var is_full := current_power == power_needed
|
||||
var is_over := current_power > power_needed
|
||||
if is_full:
|
||||
play_sounds('insert_correct')
|
||||
fully_charged.emit()
|
||||
$Sprite3D.texture = load(battery_obj.image_path)
|
||||
$Sprite3D.visible = true
|
||||
# update each lamp
|
||||
for i in range(lamps_to_light):
|
||||
var lamp = status_lamps[i]
|
||||
# secure that material is there
|
||||
if lamp.get_surface_override_material(0) == null:
|
||||
var material = StandardMaterial3D.new()
|
||||
lamp.set_surface_override_material(0, material)
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.GREEN
|
||||
|
||||
|
||||
if is_over:
|
||||
play_sounds('insert_false')
|
||||
# too much -> all red
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.RED
|
||||
lamp.visible = true
|
||||
elif is_full:
|
||||
# exaclty full -> all green
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.GREEN
|
||||
lamp.visible = true
|
||||
|
||||
else:
|
||||
# off / grey
|
||||
play_sounds('insert_false')
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.YELLOW
|
||||
lamp.visible = true
|
||||
await get_tree().create_timer(0.3).timeout
|
||||
|
||||
# blink if overloaded
|
||||
if is_over:
|
||||
if not blink_timer.is_stopped():
|
||||
# timer is running -> nothing
|
||||
pass
|
||||
else:
|
||||
blink_timer.start()
|
||||
else:
|
||||
blink_timer.stop()
|
||||
# make sure that all are visible (if blinking before)
|
||||
for lamp in status_lamps:
|
||||
lamp.visible = true
|
||||
|
||||
func _on_blink_timeout() -> void:
|
||||
# in case of too much power: lamps blink (toggle visibility)
|
||||
if current_power > power_needed:
|
||||
for lamp in status_lamps:
|
||||
if lamp.get_surface_override_material(0).albedo_color == Color.DIM_GRAY:
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.RED
|
||||
else:
|
||||
lamp.get_surface_override_material(0).albedo_color = Color.DIM_GRAY
|
||||
|
||||
func play_sounds(soundname: String) -> void:
|
||||
if soundname == 'insert_correct':
|
||||
$audio_right.play()
|
||||
elif soundname == 'insert_false':
|
||||
$audio_false.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://ctgkbxok3s47x
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,24 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dw48drx137ih2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b8c8vph26uu41" path="res://Interact/grabbable_object.gd" id="1_8qqxd"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qncar"]
|
||||
albedo_color = Color(0.53, 1, 0.9451667, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_qncar"]
|
||||
material = SubResource("StandardMaterial3D_qncar")
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_im0tn"]
|
||||
|
||||
[node name="Block" type="RigidBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 7
|
||||
mass = 0.001
|
||||
continuous_cd = true
|
||||
script = ExtResource("1_8qqxd")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_qncar")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("BoxShape3D_im0tn")
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cq0h8h7icvfe0"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://dxs6dl0kt33hf" path="res://Resources/meshes/bridge.tres" id="1_5r8xi"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_h7pgn"]
|
||||
size = Vector3(22, 0.2, 2.5)
|
||||
|
||||
[node name="bridge" type="StaticBody3D"]
|
||||
transform = Transform3D(0.99701, -0.0772759, 0, 0.0772759, 0.99701, 0, 0, 0, 1, 0, 0, 0)
|
||||
collision_layer = 2
|
||||
collision_mask = 13
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1.2, 0, 0, 0, 1.2, 0, 0, 0, 1.2, 0, 1.194, 0)
|
||||
mesh = ExtResource("1_5r8xi")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.195, 0)
|
||||
shape = SubResource("BoxShape3D_h7pgn")
|
||||
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cekwmmeqhnt8c"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://2k22inm231b5" path="res://Resources/meshes/fence.tres" id="1_cvhob"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||
size = Vector3(0.211, 10, 1.981)
|
||||
|
||||
[node name="Fence" type="StaticBody3D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 9
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.3103899, 0)
|
||||
mesh = ExtResource("1_cvhob")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 5.002912, -0.00012207031)
|
||||
shape = SubResource("BoxShape3D_mfgll")
|
||||
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cxdft2gl865c8"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://blqyd0o0ggy2t" path="res://Resources/meshes/fence_broken.tres" id="1_s6vr1"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||
size = Vector3(0.211, 0.9, 1.981)
|
||||
|
||||
[node name="Fence" type="StaticBody3D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 9
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.3234521, -0.02176714)
|
||||
mesh = ExtResource("1_s6vr1")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 0.4515351, -0.00012207031)
|
||||
shape = SubResource("BoxShape3D_mfgll")
|
||||
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cbiyc2os4l2le"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://cp8pmyubrkik5" path="res://Resources/meshes/fence_left.tres" id="1_xstg8"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||
size = Vector3(0.211, 10, 1.981)
|
||||
|
||||
[node name="FenceLeft" type="StaticBody3D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 9
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.230836, 0)
|
||||
mesh = ExtResource("1_xstg8")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 4.9100523, -0.00012207031)
|
||||
shape = SubResource("BoxShape3D_mfgll")
|
||||
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://78ini7csghyn"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://3dws0pbmut6j" path="res://Resources/meshes/fence_right.tres" id="1_2kidb"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mfgll"]
|
||||
size = Vector3(0.211, 10, 1.981)
|
||||
|
||||
[node name="FenceRight" type="StaticBody3D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 9
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, 0, 1, 0, 1.3164206, 0)
|
||||
mesh = ExtResource("1_2kidb")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0075683594, 4.9798994, -0.00012207031)
|
||||
shape = SubResource("BoxShape3D_mfgll")
|
||||
@@ -0,0 +1,53 @@
|
||||
[gd_scene load_steps=5 format=4 uid="uid://sdytd17xrx81"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xantc"]
|
||||
resource_name = "black"
|
||||
cull_mode = 2
|
||||
albedo_color = Color(0, 0, 0, 1)
|
||||
roughness = 0.5
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_2uyr3"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(0.609988, -7.67489e-09, -0.801522, 0.703757, 0.00369327, 1.60304),
|
||||
"format": 34896613377,
|
||||
"index_count": 18,
|
||||
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkA"),
|
||||
"name": "black",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 12,
|
||||
"vertex_data": PackedByteArray("2iEBAP//AAAATgAAAAAAAABOAAD//wAA2iEBAAAAAAAAAP//v90AAP///v/zywAA///+/7/dAAAAAP//88sAAAAA//9/NAAA///+/7MiAAD///7/fzQAAAAA//+zIgAA")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_duw40"]
|
||||
resource_name = "assets_Plane_007"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(0.609988, -7.67489e-09, -0.801522, 0.703757, 0.00369327, 1.60304),
|
||||
"attribute_data": PackedByteArray("AAD/////AAD/////AAAAAAAA/////wAA/////wAAAAAAAP////8AAP////8AAAAA"),
|
||||
"format": 34896613399,
|
||||
"index_count": 18,
|
||||
"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkA"),
|
||||
"material": SubResource("StandardMaterial3D_xantc"),
|
||||
"name": "black",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 12,
|
||||
"vertex_data": PackedByteArray("2iEBAP///78ATgAAAAD/vwBOAAD///+/2iEBAAAA/78AAP//v93/v////v/zy/+////+/7/d/78AAP//88v/vwAA//9/NP+////+/7Mi/7////7/fzT/vwAA//+zIv+//v//f/7//3/+//9//v//f////3////9/////f////3////9/////f////3////9/")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_2uyr3")
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_t0hol"]
|
||||
size = Vector3(0.3, 0.1, 1.55)
|
||||
|
||||
[node name="fence_small" type="StaticBody3D"]
|
||||
collision_layer = 4
|
||||
|
||||
[node name="Schranke" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("ArrayMesh_duw40")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(0.997626, -0.0688685, 0, 0.0688685, 0.997626, 0, 0, 0, 1, 0.81965, 0.0212097, -0.00942993)
|
||||
shape = SubResource("BoxShape3D_t0hol")
|
||||
@@ -0,0 +1,53 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://1oady27a34wi"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bivev0gbnbo5t" path="res://npc.gd" id="1_6jshr"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctx8osel3k43n" path="res://check_collision_wall.tscn" id="2_nwv0p"]
|
||||
[ext_resource type="PackedScene" uid="uid://bhihpqj7er21q" path="res://check_collision_npc.tscn" id="3_e80nv"]
|
||||
[ext_resource type="PackedScene" uid="uid://dl4nljdcflehk" path="res://helper.tscn" id="4_nwv0p"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_6jshr"]
|
||||
size = Vector3(0.5161743, 1.3706055, 0.501709)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_nwv0p"]
|
||||
size = Vector3(1.2747803, 1.223877, 1.4574585)
|
||||
|
||||
[node name="NPC" type="CharacterBody3D"]
|
||||
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)
|
||||
collision_layer = 8
|
||||
collision_mask = 7
|
||||
script = ExtResource("1_6jshr")
|
||||
prompt_message = "drücken Sie [t] oder [Enter]"
|
||||
talkable = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.037261963, -0.04911697, -0.022094727)
|
||||
shape = SubResource("BoxShape3D_6jshr")
|
||||
|
||||
[node name="RayCast3D" parent="." instance=ExtResource("2_nwv0p")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.55272627, -0.076056)
|
||||
|
||||
[node name="InteractionChecker" type="Area3D" parent="."]
|
||||
collision_layer = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractionChecker"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0037231457, -0.060058594, 0.22872925)
|
||||
shape = SubResource("BoxShape3D_nwv0p")
|
||||
|
||||
[node name="RayCast3D2" parent="." instance=ExtResource("3_e80nv")]
|
||||
|
||||
[node name="helper" parent="." instance=ExtResource("4_nwv0p")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.3250453e-09, -0.54445666, -0.060911417)
|
||||
|
||||
[node name="Label3D" type="Label3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3886542, 0)
|
||||
billboard = 1
|
||||
text = "Rede mit mir!
|
||||
(t / Enter)
|
||||
|
|
||||
|
|
||||
\\/"
|
||||
font_size = 42
|
||||
outline_size = 8
|
||||
|
||||
[connection signal="body_entered" from="InteractionChecker" to="." method="_on_interaction_checker_body_entered"]
|
||||
[connection signal="body_exited" from="InteractionChecker" to="." method="_on_interaction_checker_body_exited"]
|
||||
@@ -0,0 +1,17 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cbg71qd7mr1a5"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://cx3mytwy5a0ld" path="res://Resources/meshes/plane.tres" id="1_5clto"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_e4xu0"]
|
||||
size = Vector3(2.2, 0.1, 2.1)
|
||||
|
||||
[node name="bridge2" type="StaticBody3D"]
|
||||
collision_layer = 2
|
||||
collision_mask = 13
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.103683256, 0, 0, 0, 0.71690935, 0, 0, 0, 1.082177, 0, 0, 0)
|
||||
mesh = ExtResource("1_5clto")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("BoxShape3D_e4xu0")
|
||||
@@ -0,0 +1,72 @@
|
||||
extends Node3D
|
||||
|
||||
@export var required_weight: float = 5.0
|
||||
@export var active_color: Color = Color(0, 1, 0)
|
||||
@export var inactive_color: Color = Color(1, 0, 0)
|
||||
@export var text_on_activation: String
|
||||
|
||||
@onready var area: Area3D = $Area3D
|
||||
@onready var mesh: MeshInstance3D = $MeshInstance3D
|
||||
@onready var static_body: StaticBody3D = $StaticBody3D
|
||||
signal activated
|
||||
signal deactivated
|
||||
|
||||
var current_weight: float = 0.0
|
||||
var is_active: bool = false
|
||||
|
||||
func _ready():
|
||||
mesh.material_override = StandardMaterial3D.new()
|
||||
mesh.material_override.albedo_color = inactive_color
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
print("body entered")
|
||||
print(body)
|
||||
var w = _get_body_weight(body)
|
||||
if w > 0:
|
||||
current_weight += w
|
||||
_check_weight()
|
||||
|
||||
func _on_body_exited(body: Node3D) -> void:
|
||||
var w = _get_body_weight(body)
|
||||
if w > 0:
|
||||
current_weight -= w
|
||||
_check_weight()
|
||||
|
||||
func _get_body_weight(body: Node3D) -> float:
|
||||
if body.has_method("get_weight"):
|
||||
return body.get_weight()
|
||||
elif body is RigidBody3D:
|
||||
return body.mass
|
||||
return 0.0
|
||||
|
||||
func _check_weight() -> void:
|
||||
var active_now = current_weight >= required_weight
|
||||
if active_now != is_active:
|
||||
is_active = active_now
|
||||
_update_visuals()
|
||||
if is_active:
|
||||
_on_activated()
|
||||
else:
|
||||
_on_deactivated()
|
||||
|
||||
func _update_visuals():
|
||||
mesh.material_override.albedo_color = active_color if is_active else inactive_color
|
||||
|
||||
var target_pos_y = -0.05 if is_active else 0.0
|
||||
var tween = get_tree().create_tween()
|
||||
|
||||
# Bewege sowohl das sichtbare Mesh als auch den Kollisionskörper nach unten
|
||||
tween.tween_property(mesh, "position:y", target_pos_y, 0.2)\
|
||||
.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
|
||||
tween.tween_property(static_body, "position:y", target_pos_y, 0.2)\
|
||||
.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
|
||||
|
||||
|
||||
|
||||
func _on_activated():
|
||||
print("Pressure block activated! Total weight =", current_weight)
|
||||
activated.emit()
|
||||
|
||||
func _on_deactivated():
|
||||
print("Pressure block deactivated!")
|
||||
deactivated.emit()
|
||||
@@ -0,0 +1 @@
|
||||
uid://debptt7fdw0mw
|
||||
@@ -0,0 +1,38 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dvjxy8tyaxcjr"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://debptt7fdw0mw" path="res://Resources/Objects/pressure_block.gd" id="1_adrnk"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mjcge"]
|
||||
size = Vector3(1, 0.5, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_adrnk"]
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_adrnk"]
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[node name="PressureBlock" type="Node3D"]
|
||||
script = ExtResource("1_adrnk")
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.46808624, 0)
|
||||
collision_layer = 4
|
||||
collision_mask = 5
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.26072478, 0)
|
||||
shape = SubResource("BoxShape3D_mjcge")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_adrnk")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||
collision_layer = 4
|
||||
collision_mask = 4
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||
shape = SubResource("BoxShape3D_adrnk")
|
||||
disabled = true
|
||||
|
||||
[connection signal="body_entered" from="Area3D" to="." method="_on_body_entered"]
|
||||
[connection signal="body_exited" from="Area3D" to="." method="_on_body_exited"]
|
||||
@@ -0,0 +1,82 @@
|
||||
extends Node3D
|
||||
class_name QuizBox
|
||||
|
||||
@export var question: String
|
||||
@export var correct: int
|
||||
@export var answer_0: String
|
||||
@export var answer_1: String
|
||||
@export var answer_2: String
|
||||
@export var answer_3: String
|
||||
|
||||
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
||||
@onready var quiz_light: CSGSphere3D = $quiz_box_sb/quiz_box/quiz_light
|
||||
|
||||
@onready var answer_pad_0: Area3D = $answers/answer_pad_0/Area3D
|
||||
@onready var answer_pad_1: Area3D = $answers/answer_pad_1/Area3D
|
||||
@onready var answer_pad_2: Area3D = $answers/answer_pad_2/Area3D
|
||||
@onready var answer_pad_3: Area3D = $answers/answer_pad_3/Area3D
|
||||
|
||||
@onready var answer_0_label: Label3D = $answers/answer_pad_0/answer_0_label
|
||||
@onready var answer_1_label: Label3D = $answers/answer_pad_1/answer_1_label
|
||||
@onready var answer_2_label: Label3D = $answers/answer_pad_2/answer_2_label
|
||||
@onready var answer_3_label: Label3D = $answers/answer_pad_3/answer_3_label
|
||||
|
||||
@onready var question_label: Label3D = $StaticBody3D/Wall/question_label
|
||||
|
||||
var answered_correctly := false
|
||||
|
||||
func _ready() -> void:
|
||||
# Texte setzen
|
||||
question_label.text = question
|
||||
answer_0_label.text = answer_0
|
||||
answer_1_label.text = answer_1
|
||||
answer_2_label.text = answer_2
|
||||
answer_3_label.text = answer_3
|
||||
|
||||
# Signale verbinden
|
||||
answer_pad_0.body_entered.connect(_on_answer_entered.bind(0))
|
||||
answer_pad_1.body_entered.connect(_on_answer_entered.bind(1))
|
||||
answer_pad_2.body_entered.connect(_on_answer_entered.bind(2))
|
||||
answer_pad_3.body_entered.connect(_on_answer_entered.bind(3))
|
||||
|
||||
# WICHTIG: Material duplizieren, damit es nicht mit anderen Instanzen geteilt wird
|
||||
if quiz_light.material != null:
|
||||
# tiefe Kopie (alle Subressourcen mitduplizieren)
|
||||
quiz_light.material = quiz_light.material.duplicate(true)
|
||||
else:
|
||||
quiz_light.material = StandardMaterial3D.new()
|
||||
|
||||
# Grundeinstellungen für diese Instanz
|
||||
quiz_light.material.emission_enabled = true
|
||||
quiz_light.material.emission_energy = 0.5
|
||||
quiz_light.material.albedo_color = Color.WHITE
|
||||
quiz_light.material.emission = Color.WHITE
|
||||
|
||||
func _on_answer_entered(body: Node3D, answer_index: int) -> void:
|
||||
if not body.is_in_group("player"):
|
||||
return # Nur Player soll triggern
|
||||
|
||||
# Wenn schon korrekt beantwortet, nichts tun
|
||||
if answered_correctly:
|
||||
return
|
||||
|
||||
# Prüfen und nur DIESE Instanzlampe setzen
|
||||
if answer_index == correct:
|
||||
_set_light_color(Color.GREEN)
|
||||
question_label.visible = false
|
||||
animation_player.play("open_door")
|
||||
answered_correctly = true
|
||||
else:
|
||||
_set_light_color(Color.RED)
|
||||
# optional: nach kurzer Zeit zurücksetzen, damit neu versucht werden kann
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
_set_light_color(Color.WHITE)
|
||||
|
||||
func _set_light_color(color: Color) -> void:
|
||||
# Setze nur das Material dieser Instanz
|
||||
if quiz_light.material == null:
|
||||
quiz_light.material = StandardMaterial3D.new()
|
||||
quiz_light.material.albedo_color = color
|
||||
quiz_light.material.emission = color
|
||||
# erhöhe kurz die Emission für Sichtbarkeit bei Farben außer weiß
|
||||
quiz_light.material.emission_energy = 1.5 if color != Color.WHITE else 0.5
|
||||
@@ -0,0 +1 @@
|
||||
uid://caan28e6gl7fk
|
||||
@@ -0,0 +1,217 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://c45ex56io7rv7"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://caan28e6gl7fk" path="res://Resources/Objects/quiz_object.gd" id="1_ybh4a"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ybh4a"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_6mevd"]
|
||||
size = Vector3(1, 2, 1)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ybh4a"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_ybh4a"]
|
||||
length = 0.001
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, -2, 0, 0)
|
||||
tracks/1/type = "position_3d"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 2, 0, 0)
|
||||
tracks/2/type = "position_3d"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door_cs")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, -2, 0, 0)
|
||||
tracks/3/type = "position_3d"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door_cs")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, 2, 0, 0)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_5clbn"]
|
||||
resource_name = "open_door"
|
||||
length = 2.0
|
||||
tracks/0/type = "position_3d"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = PackedFloat32Array(0, 1, -2, 0, 0, 2, 1, -5, 0, 0)
|
||||
tracks/1/type = "position_3d"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = PackedFloat32Array(0, 1, 2, 0, 0, 2, 1, 5, 0, 0)
|
||||
tracks/2/type = "position_3d"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("StaticBody3D/Wall/right_door_sb/right_door_cs")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = PackedFloat32Array(0, 1, 2, 0, 0, 2, 1, 5, 0, 0)
|
||||
tracks/3/type = "position_3d"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("StaticBody3D/Wall/left_door_sb/left_door_cs")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = PackedFloat32Array(0, 1, -2, 0, 0, 2, 1, -5, 0, 0)
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_402uq"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_ybh4a"),
|
||||
&"open_door": SubResource("Animation_5clbn")
|
||||
}
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_402uq"]
|
||||
size = Vector3(5, 6, 0.5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_584uj"]
|
||||
size = Vector3(4, 6, 0.2)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_resk5"]
|
||||
size = Vector3(4, 6, 0.2)
|
||||
|
||||
[node name="quiz_object" type="Node3D"]
|
||||
script = ExtResource("1_ybh4a")
|
||||
|
||||
[node name="quiz_box_sb" type="StaticBody3D" parent="."]
|
||||
|
||||
[node name="quiz_box" type="CSGBox3D" parent="quiz_box_sb"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
|
||||
|
||||
[node name="quiz_light" type="CSGSphere3D" parent="quiz_box_sb/quiz_box"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9793253, 0)
|
||||
material = SubResource("StandardMaterial3D_ybh4a")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="quiz_box_sb"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_6mevd")
|
||||
|
||||
[node name="answers" type="Node3D" parent="."]
|
||||
|
||||
[node name="answer_pad_0" type="CSGBox3D" parent="answers"]
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[node name="answer_0_label" type="Label3D" parent="answers/answer_pad_0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
autowrap_mode = 2
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="answers/answer_pad_0"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_0/Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||
shape = SubResource("BoxShape3D_ybh4a")
|
||||
|
||||
[node name="answer_pad_1" type="CSGBox3D" parent="answers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0, 0)
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[node name="answer_1_label" type="Label3D" parent="answers/answer_pad_1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
autowrap_mode = 2
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="answers/answer_pad_1"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_1/Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||
shape = SubResource("BoxShape3D_ybh4a")
|
||||
|
||||
[node name="answer_pad_2" type="CSGBox3D" parent="answers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0)
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[node name="answer_2_label" type="Label3D" parent="answers/answer_pad_2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
autowrap_mode = 2
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="answers/answer_pad_2"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_2/Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||
shape = SubResource("BoxShape3D_ybh4a")
|
||||
|
||||
[node name="answer_pad_3" type="CSGBox3D" parent="answers"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0, 0)
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[node name="answer_3_label" type="Label3D" parent="answers/answer_pad_3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
autowrap_mode = 2
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="answers/answer_pad_3"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="answers/answer_pad_3/Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48036242, 0)
|
||||
shape = SubResource("BoxShape3D_ybh4a")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_402uq")
|
||||
}
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3, -4)
|
||||
shape = SubResource("BoxShape3D_402uq")
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 3, -4)
|
||||
shape = SubResource("BoxShape3D_402uq")
|
||||
|
||||
[node name="Wall" type="CSGBox3D" parent="StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.25, 3, -4)
|
||||
size = Vector3(16, 6, 0.5)
|
||||
|
||||
[node name="door_space" type="CSGSphere3D" parent="StaticBody3D/Wall"]
|
||||
operation = 2
|
||||
radius = 3.1
|
||||
rings = 10
|
||||
|
||||
[node name="question_label" type="Label3D" parent="StaticBody3D/Wall"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.18187094)
|
||||
font_size = 64
|
||||
autowrap_mode = 2
|
||||
width = 1000.0
|
||||
|
||||
[node name="left_door_sb" type="StaticBody3D" parent="StaticBody3D/Wall"]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
|
||||
[node name="left_door" type="CSGBox3D" parent="StaticBody3D/Wall/left_door_sb"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
|
||||
size = Vector3(4, 6, 0.2)
|
||||
|
||||
[node name="left_door_cs" type="CollisionShape3D" parent="StaticBody3D/Wall/left_door_sb"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, 0)
|
||||
shape = SubResource("BoxShape3D_584uj")
|
||||
|
||||
[node name="right_door_sb" type="StaticBody3D" parent="StaticBody3D/Wall"]
|
||||
collision_layer = 7
|
||||
collision_mask = 7
|
||||
|
||||
[node name="right_door" type="CSGBox3D" parent="StaticBody3D/Wall/right_door_sb"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
|
||||
size = Vector3(4, 6, 0.2)
|
||||
|
||||
[node name="right_door_cs" type="CollisionShape3D" parent="StaticBody3D/Wall/right_door_sb"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
|
||||
shape = SubResource("BoxShape3D_resk5")
|
||||
@@ -0,0 +1,9 @@
|
||||
extends RigidBody3D
|
||||
|
||||
func _ready():
|
||||
await get_tree().create_timer(10.0).timeout
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_body_entered(body: Node) -> void:
|
||||
gravity_scale = 1.0
|
||||
@@ -0,0 +1 @@
|
||||
uid://dwc5ak0wgd6aj
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user