From d1c4c1a35d3513bb13a50b0ffb5ac5dfa4840bda Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Sun, 10 May 2026 18:48:40 +0100 Subject: [PATCH] Added title screen and onboarding prompt --- scenes/elevator_panel.gd | 18 +++++++++++-- scenes/game.tscn | 3 +++ scenes/screen.gd | 9 +++++++ scenes/title_screen.gd | 14 ++++++++++ scenes/title_screen.gd.uid | 1 + scenes/title_screen.tscn | 55 ++++++++++++++++++++++++++++++++++++++ scripts/event_bus.gd | 1 + 7 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 scenes/title_screen.gd create mode 100644 scenes/title_screen.gd.uid create mode 100644 scenes/title_screen.tscn diff --git a/scenes/elevator_panel.gd b/scenes/elevator_panel.gd index 3825515..442d3ca 100644 --- a/scenes/elevator_panel.gd +++ b/scenes/elevator_panel.gd @@ -4,6 +4,7 @@ extends PanelContainer var current_floor := 10 var saved_count := 0 var doors_closing_flag := false +var _onboarded := false # Survivors per floor: more at top, fewer as you descend var base_survivors := 2 @@ -28,12 +29,14 @@ func _ready(): screen.pulse_blocked.connect(_on_pulse_blocked) screen.doors_closing.connect(_on_doors_closing) - _start_floor() + EventBus.game_started.connect(_start_floor) func _unhandled_input(event): if event is InputEventKey and event.pressed and not event.echo: if event.keycode == KEY_SPACE: _on_block_pressed() + elif event.keycode == KEY_R: + get_tree().reload_current_scene() # --- Floor lifecycle --- @@ -52,7 +55,18 @@ func _start_floor(): var screen = $PanelMargin/PanelColumn/Screen screen.start() - screen.launch_pulse() # first survivor arrives + + if not _onboarded: + _onboarded = true + screen.show_onboarding("BLOCK\nIN GREEN ZONE") + get_tree().create_timer(3.0).timeout.connect( + func(): + screen.end_onboarding() + screen.launch_pulse(), + CONNECT_ONE_SHOT + ) + else: + screen.launch_pulse() # first survivor arrives # --- Input --- diff --git a/scenes/game.tscn b/scenes/game.tscn index a5e8b08..75d323d 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -9,6 +9,7 @@ [ext_resource type="AudioStream" uid="uid://dgqb1rovgwuan" path="res://audio/ElevatorClose1.wav" id="6_gee14"] [ext_resource type="PackedScene" path="res://scenes/component_spawn.tscn" id="9_0tnpc"] [ext_resource type="PackedScene" path="res://scenes/end_screen.tscn" id="10_endsc"] +[ext_resource type="PackedScene" path="res://scenes/title_screen.tscn" id="11_title"] [node name="Game" type="Node3D" unique_id=1456297160] script = ExtResource("1_lbhrr") @@ -38,3 +39,5 @@ stream = ExtResource("6_gee14") [node name="ComponentSpawn" parent="." unique_id=649225939 instance=ExtResource("9_0tnpc")] [node name="EndScreen" parent="." instance=ExtResource("10_endsc")] + +[node name="TitleScreen" parent="." instance=ExtResource("11_title")] diff --git a/scenes/screen.gd b/scenes/screen.gd index 44baa32..b47da16 100644 --- a/scenes/screen.gd +++ b/scenes/screen.gd @@ -163,3 +163,12 @@ func show_loss(message: String): $TargetZone.visible = false $AIFace.text = message flash(Color.RED) + +func show_onboarding(msg: String): + $AIFace.add_theme_font_size_override("font_size", 18) + $AIFace.size = Vector2(size.x, 60) + $AIFace.text = msg + +func end_onboarding(): + $AIFace.add_theme_font_size_override("font_size", 32) + $AIFace.size = Vector2(size.x, 30) diff --git a/scenes/title_screen.gd b/scenes/title_screen.gd new file mode 100644 index 0000000..902ffe3 --- /dev/null +++ b/scenes/title_screen.gd @@ -0,0 +1,14 @@ +extends CanvasLayer + +func _ready(): + get_tree().paused = true + +func _unhandled_input(event): + if event is InputEventKey and event.pressed and not event.echo: + if event.keycode == KEY_SPACE or event.keycode == KEY_ENTER: + _start() + +func _start(): + get_tree().paused = false + EventBus.game_started.emit() + queue_free() diff --git a/scenes/title_screen.gd.uid b/scenes/title_screen.gd.uid new file mode 100644 index 0000000..bb0ae14 --- /dev/null +++ b/scenes/title_screen.gd.uid @@ -0,0 +1 @@ +uid://ba3of2ykdjqcl diff --git a/scenes/title_screen.tscn b/scenes/title_screen.tscn new file mode 100644 index 0000000..7aca8c6 --- /dev/null +++ b/scenes/title_screen.tscn @@ -0,0 +1,55 @@ +[gd_scene load_steps=3 format=3] + +[ext_resource type="Script" path="res://scenes/title_screen.gd" id="1"] + +[sub_resource type="StyleBoxFlat" id="CardStyle"] +bg_color = Color(0.05, 0.18, 0.05, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.2, 1, 0.2, 1) +corner_radius_top_left = 6 +corner_radius_top_right = 6 +corner_radius_bottom_right = 6 +corner_radius_bottom_left = 6 + +[node name="TitleScreen" type="CanvasLayer"] +layer = 20 +process_mode = 3 +script = ExtResource("1") + +[node name="Dim" type="ColorRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 2 +color = Color(0, 0, 0, 0.85) + +[node name="Center" type="CenterContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +mouse_filter = 1 + +[node name="Card" type="PanelContainer" parent="Center"] +theme_override_styles/panel = SubResource("CardStyle") + +[node name="Margin" type="MarginContainer" parent="Center/Card"] +theme_override_constants/margin_left = 64 +theme_override_constants/margin_right = 64 +theme_override_constants/margin_top = 48 +theme_override_constants/margin_bottom = 48 + +[node name="Column" type="VBoxContainer" parent="Center/Card/Margin"] +theme_override_constants/separation = 24 + +[node name="Title" type="Label" parent="Center/Card/Margin/Column"] +text = "ELEVATOR" +horizontal_alignment = 1 +theme_override_colors/font_color = Color(0.2, 1, 0.2, 1) +theme_override_font_sizes/font_size = 72 + +[node name="Prompt" type="Label" parent="Center/Card/Margin/Column"] +text = "PRESS SPACE TO START" +horizontal_alignment = 1 +theme_override_colors/font_color = Color(0.5, 1, 0.5, 1) +theme_override_font_sizes/font_size = 28 diff --git a/scripts/event_bus.gd b/scripts/event_bus.gd index bbad6fa..31e016e 100644 --- a/scripts/event_bus.gd +++ b/scripts/event_bus.gd @@ -6,6 +6,7 @@ signal floor_changed(floor_num: int) signal saved_changed(count: int) signal score_changed(new_score: int) signal people_changed(count: int, threshold: int) +signal game_started signal game_won signal game_lost signal floor_started(survivor_count: int)