first version of EU AI Act game
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user