first version of EU AI Act game
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,266 @@
|
||||
extends Node3D
|
||||
|
||||
const count_battery_boxes = 4
|
||||
var currently_charged_battery_boxes := 0
|
||||
signal show_door
|
||||
@onready var aliens = $"npcs/aliens"
|
||||
@onready var batteries = $"Objects/Balloons_A2"
|
||||
@onready var chatbot: Control = $npcs/helpers/Chatbot
|
||||
var aliens_start_count: int
|
||||
var batteries_start_count: int
|
||||
var helper_collected = false
|
||||
var not_congratulated_1 = true
|
||||
var not_congratulated_2 = true
|
||||
var release_generators = false
|
||||
var popped_balloons := 0
|
||||
var current_task := 0
|
||||
var current_text: String
|
||||
var rabbit_activated = false
|
||||
var audio_playing = true
|
||||
@onready var checkpoints = [$startpoint,
|
||||
$Objects/pressure_blocks/PressureBlock_A1,
|
||||
$Objects/pressure_blocks/PressureBlock_A2,
|
||||
$Objects/pressure_blocks/PressureBlock_A3,
|
||||
$Objects/pressure_blocks/PressureBlock_A3_1,
|
||||
]
|
||||
@onready var generators = $Objects/generators
|
||||
|
||||
func _ready() -> void:
|
||||
aliens_start_count = aliens.get_child_count()
|
||||
batteries_start_count = batteries.get_child_count()
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if Global.chatbot_opened:
|
||||
return
|
||||
if Input.is_action_just_pressed("Screenshot"):
|
||||
take_screenshot()
|
||||
if Input.is_action_just_pressed("fast_forward"):
|
||||
current_task = (current_task + 1 ) % len(checkpoints)
|
||||
print(current_task, checkpoints[current_task].position)
|
||||
$Player.position = checkpoints[current_task].position + Vector3(0.0, 0.5, 0.0)
|
||||
if Input.is_action_just_pressed("rewind"):
|
||||
current_task = (current_task - 1 ) % len(checkpoints)
|
||||
$Player.position = checkpoints[current_task].position
|
||||
if Input.is_action_just_pressed("inventory"):
|
||||
if current_task == 3:
|
||||
$Player.toggle_inventory()
|
||||
if current_task == 4 and Input.is_action_just_pressed("keypad"):
|
||||
reset_music_volume()
|
||||
$Keypad.visible = true
|
||||
$Hilfestellung/CanvasLayer.visible = false
|
||||
$Player.set_mode('aim')
|
||||
|
||||
if not_congratulated_1 and aliens.get_child_count() <= aliens_start_count-5:
|
||||
not_congratulated_1 = false
|
||||
show_congratulations("Glückwunsch!
|
||||
Die erste Aufgabe ist geschafft.", "Definitionen von KI")
|
||||
|
||||
|
||||
func show_congratulations(text, text_2) -> void:
|
||||
print(text)
|
||||
$Player/helper/helper.celebrate()
|
||||
$Hilfestellung/CanvasLayer.visible = false
|
||||
$Congratulations/CanvasLayer/Panel/Label.text = text
|
||||
$Congratulations/CanvasLayer.visible = true
|
||||
$Congratulations/CanvasLayer/Panel/Label_repeat.text = "(Um die "+ text_2 + " noch einmal nachzulesen, sprechen Sie mit ihrem Helfer)"
|
||||
await get_tree().create_timer(5.0).timeout
|
||||
$Player/helper/helper.stop_anim()
|
||||
$Congratulations/CanvasLayer.visible = false
|
||||
|
||||
func openLinkinBrowser(link):
|
||||
OS.shell_open(link)
|
||||
|
||||
func openAIActinBrowser():
|
||||
openLinkinBrowser("https://eur-lex.europa.eu/legal-content/DE/TXT/?uri=CELEX:32024R1689")
|
||||
|
||||
func openDSGVOinBrowser():
|
||||
openLinkinBrowser("https://dsgvo-gesetz.de/")
|
||||
|
||||
func _on_openChatBot():
|
||||
$Hilfestellung/CanvasLayer.visible = false
|
||||
$HUD.visible = false
|
||||
quiet_down_music()
|
||||
|
||||
|
||||
|
||||
func _on_battery_box_removed_battery() -> void:
|
||||
currently_charged_battery_boxes -= 1
|
||||
print(currently_charged_battery_boxes)
|
||||
|
||||
|
||||
func _on_show_door() -> void:
|
||||
print('showing door')
|
||||
$Objects/spaceship/Door.visible = true
|
||||
$Objects/spaceship/Door.position.y = 0.012
|
||||
$Objects/spaceship/door_cover/CollisionShape3D.disabled = true
|
||||
|
||||
|
||||
func _on_door_body_entered(body: Node3D) -> void:
|
||||
if $Objects/spaceship/Door.visible:
|
||||
DialogueState.currentTask = 5
|
||||
Transition.change_scene("res://quiz.tscn")
|
||||
|
||||
|
||||
func _on_pressure_block_a3_activated() -> void:
|
||||
quiet_down_music()
|
||||
$Objects/pressure_blocks/PressureBlock_A3.current_weight = 10.0
|
||||
DialogueManager.show_chosen_dialogue_balloon(load($Objects/pressure_blocks/PressureBlock_A3.text_on_activation), "/game_balloons/game_balloon_v_2.tscn", "start")
|
||||
|
||||
|
||||
func _on_pressure_block_a_1_activated() -> void:
|
||||
current_task = 1
|
||||
DialogueState.currentTask = 1
|
||||
current_text = "[Enter] oder [t] drücken, um mit den Aliens zu reden"
|
||||
$Hinweistexte/CanvasLayer/Panel/Label.text = "Wenn Sie weiterlaufen werden Ihnen einige Aliens begegnen. Sprechen Sie mit ihnen, um verschiedene Definitionen von Künstlicher Intelligenz (KI) kennenzulernen."
|
||||
$Hinweistexte/CanvasLayer.visible = true
|
||||
if $Tutorial:
|
||||
$Tutorial.queue_free()
|
||||
if $Objects/Bridges/walls_tutorial:
|
||||
$Objects/Bridges/walls_tutorial.queue_free()
|
||||
if $Objects/Chip0/block:
|
||||
$Objects/Chip0/block.queue_free()
|
||||
|
||||
|
||||
func _on_pressure_block_a_2_activated() -> void:
|
||||
current_task = 2
|
||||
current_text = "Zielen mit der Maus, Klicken zum Werfen, [r] zum Wechsel zwischen Wurf- und Kameramodus"
|
||||
$Hinweistexte/CanvasLayer/Panel/Label.text = "Laufen Sie weiter zur Wurfzone.
|
||||
Dort angekommen, können Sie die Ballons abwerfen, um zu entdecken, in was für Systemen KI bereits eingesetzt wird bzw. werden kann.
|
||||
Sammeln Sie danach die Batterien, Sie werden sie im weiteren Verlauf benötigen.
|
||||
Zur Erinnerung: Zielen mit der Maus (Fadenkreuz) und Werfen durch Klicken. Wenn Sie kein Fadenkreuz sehen, evtl. [r] drücken, um den Modus zu wechseln."
|
||||
$Hinweistexte/CanvasLayer.visible = true
|
||||
|
||||
|
||||
func _on_pressure_block_deactivated() -> void:
|
||||
$Hinweistexte/CanvasLayer.visible = false
|
||||
$Hilfestellung/CanvasLayer/Panel/Label.text = current_text
|
||||
$Hilfestellung/CanvasLayer.visible = true
|
||||
|
||||
|
||||
func _on_pressure_block_a_3_1_activated() -> void:
|
||||
reset_music_volume()
|
||||
current_task = 3
|
||||
DialogueState.currentTask = 3
|
||||
current_text = "Auswahl der Batterien im Inventar [c], Einfügen mit [f] - ([e] zum wieder rausholen, [q] ablegen)"
|
||||
$Objects/pressure_blocks/PressureBlock_A3_1.current_weight = 10.0
|
||||
$AnimationPlayer.play("start_ordering_game")
|
||||
_on_pressure_block_deactivated()
|
||||
|
||||
|
||||
func _on_balloon_tree_exited() -> void:
|
||||
popped_balloons += 1
|
||||
if popped_balloons == Global.TOTAL_BALLOONS_A2 and current_task == 2:
|
||||
not_congratulated_2 = false
|
||||
DialogueState.batteriesFlag = true
|
||||
show_congratulations("Glückwunsch!
|
||||
Die 2. Aufgabe ist geschafft.", "KI-Systeme")
|
||||
$Objects/arrows/after_throw.visible = true
|
||||
$Objects/Fences/no_arrows/barrier_throw.position.x = 4.0
|
||||
$Hilfestellung/CanvasLayer/Panel/Label.text = "Sammeln Sie die Batterien auf (durch Vorbeilaufen) - einen Counter dazu sehen Sie oben links"
|
||||
$Hilfestellung/CanvasLayer.visible = true
|
||||
|
||||
|
||||
func _on_pressure_block_a_4_activated() -> void:
|
||||
quiet_down_music()
|
||||
current_task = 4
|
||||
DialogueState.currentTask = 4
|
||||
DialogueState.personalDataFlag = true
|
||||
$Objects/spaceship/keypad.visible = true
|
||||
current_text = "[k] drücken zum Starten des nächsten Minispiels"
|
||||
$Hilfestellung/CanvasLayer.visible = true
|
||||
$Objects/pressure_blocks/PressureBlock_A4.current_weight = 10.0
|
||||
DialogueManager.show_chosen_dialogue_balloon(load($Objects/pressure_blocks/PressureBlock_A4.text_on_activation), "/game_balloons/game_balloon_v_2.tscn", "start")
|
||||
_on_pressure_block_deactivated()
|
||||
|
||||
|
||||
func _on_keypad_game_finished() -> void:
|
||||
$Keypad.visible = false
|
||||
$Objects/spaceship/keypad.visible = false
|
||||
$Hilfestellung/CanvasLayer/Panel/Label.text = "Gehen Sie durch die Tür ins Raumschiff"
|
||||
$Hilfestellung/CanvasLayer.visible = true
|
||||
show_door.emit()
|
||||
|
||||
|
||||
func _on_battery_3_battery_collected() -> void:
|
||||
$Player/helper.visible = true
|
||||
#TODO implement if helper should replace battery 3 (since it's also a chatbot)
|
||||
|
||||
|
||||
func _on_animation_player_animation_finished(anim_name: StringName) -> void:
|
||||
if anim_name == "collect_helper_part1":
|
||||
$Player/AnimationPlayer2.play("collect_helper_part2")
|
||||
if anim_name == 'follow_rabbit':
|
||||
$AnimationPlayer.play('rotate_label')
|
||||
if anim_name == "ordering_finished":
|
||||
generators.queue_free()
|
||||
show_congratulations("Glückwunsch!
|
||||
Die 3. Aufgabe ist geschafft.", "Risikostufen von KI")
|
||||
$Objects/pressure_blocks/PressureBlock_A4.position = Vector3(-87.26, 3.787, 209.9)
|
||||
|
||||
|
||||
func _on_helper_corner_dialogue_finished() -> void:
|
||||
if not helper_collected:
|
||||
$AnimationPlayer.play("collect_helper_part1")
|
||||
$npcs/helpers/helper_corner/CollisionShape3D.disabled = true
|
||||
helper_collected = true
|
||||
$Objects/chip1/star.queue_free()
|
||||
|
||||
|
||||
func _on_battery_box_fully_charged() -> void:
|
||||
currently_charged_battery_boxes += 1
|
||||
print('currently charged boxes: ', currently_charged_battery_boxes)
|
||||
if currently_charged_battery_boxes == count_battery_boxes:
|
||||
print('all boxes are full')
|
||||
await get_tree().create_timer(1.5).timeout
|
||||
$AnimationPlayer.play("ordering_finished")
|
||||
$Objects/Chip0/Arrows_A4.visible = true
|
||||
|
||||
|
||||
func _on_player_inventory_opened() -> void:
|
||||
$Hilfestellung/CanvasLayer.visible = false
|
||||
$HUD.visible = false
|
||||
|
||||
|
||||
func _on_player_inventory_closed() -> void:
|
||||
$Hilfestellung/CanvasLayer.visible = true
|
||||
$HUD.visible = true
|
||||
|
||||
|
||||
func _on_balloon_popped(balloon: Balloon) -> void:
|
||||
$Player/helper/helper.play_small_celebration()
|
||||
|
||||
|
||||
func _on_chatbot_closing_chatbot() -> void:
|
||||
if current_task > 0:
|
||||
$HUD.visible = true
|
||||
$Hilfestellung/CanvasLayer.visible = true
|
||||
reset_music_volume()
|
||||
|
||||
func take_screenshot():
|
||||
print('taking screenshot')
|
||||
var image = get_viewport().get_texture().get_image()
|
||||
image.save_png("user://screenshot"+Time.get_datetime_string_from_system()+".png")
|
||||
|
||||
|
||||
func _on_start_rabbit_body_entered(body: Node3D) -> void:
|
||||
if not rabbit_activated:
|
||||
$AnimationPlayer.play('follow_rabbit')
|
||||
rabbit_activated = true
|
||||
|
||||
func quiet_down_music() -> void:
|
||||
$AudioStreamPlayer.volume_db = -20.0
|
||||
|
||||
func reset_music_volume() -> void:
|
||||
$AudioStreamPlayer.volume_db = -10.0
|
||||
|
||||
func toggle_music() -> void:
|
||||
if not audio_playing:
|
||||
audio_playing = true
|
||||
$AudioStreamPlayer.play()
|
||||
else:
|
||||
$AudioStreamPlayer.stop()
|
||||
audio_playing = false
|
||||
|
||||
|
||||
func _on_audio_stream_player_finished() -> void:
|
||||
$AudioStreamPlayer.play()
|
||||
@@ -0,0 +1 @@
|
||||
uid://d0lyomtjfroou
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
[gd_resource type="Terrain3DMaterial" load_steps=2 format=3 uid="uid://dtdjnbbnpdyqg"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://01qauauvd8aa" path="res://addons/terrain_3d/extras/shaders/minimum.gdshader" id="1_yvehn"]
|
||||
|
||||
[resource]
|
||||
_shader_parameters = {
|
||||
&"color_high": Color(0.5019608, 0.4, 0.2, 1),
|
||||
&"color_low": Color(0.055, 0.216, 0.11, 1),
|
||||
&"flat_terrain_normals": false,
|
||||
&"height_scale": 1.0,
|
||||
&"height_split": 1.0
|
||||
}
|
||||
shader_override_enabled = true
|
||||
shader_override = ExtResource("1_yvehn")
|
||||
show_region_grid = true
|
||||
Reference in New Issue
Block a user