Files
gaim/Resources/Terrains/chip/terrain_chip.gd
2026-07-29 11:34:28 +02:00

261 lines
8.3 KiB
GDScript

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("TASK1_CONGRATS", "TOPIC_AI_DEFS")
func show_congratulations(text, text_2) -> void:
print(text)
$Player/helper/helper.celebrate()
$Hilfestellung/CanvasLayer.visible = false
$Congratulations/CanvasLayer/Panel/Label.text = tr(text)
$Congratulations/CanvasLayer.visible = true
$Congratulations/CanvasLayer/Panel/Label_repeat.text = tr("CONGRATS_REPEAT") % tr(text_2)
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 = tr("HINT_TALK_ALIENS")
$Hinweistexte/CanvasLayer/Panel/Label.text = tr("HINT_ALIENS")
$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 = tr("HINT_THROW_CONTROLS")
$Hinweistexte/CanvasLayer/Panel/Label.text = tr("HINT_THROW_ZONE")
$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 = tr("HINT_BATTERY_CONTROLS")
$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("TASK2_CONGRATS", "TOPIC_AI_SYSTEMS")
$Objects/arrows/after_throw.visible = true
$Objects/Fences/no_arrows/barrier_throw.position.x = 4.0
$Hilfestellung/CanvasLayer/Panel/Label.text = tr("HINT_COLLECT_BATTERIES")
$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 = tr("HINT_START_KEYPAD")
$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 = tr("HINT_ENTER_SHIP")
$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("TASK3_CONGRATS", "TOPIC_AI_RISKS")
$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()