Added title screen and onboarding prompt

This commit is contained in:
Jennie Robinson Faber 2026-05-10 18:48:40 +01:00
parent 89c811473b
commit d1c4c1a35d
7 changed files with 99 additions and 2 deletions

View file

@ -4,6 +4,7 @@ extends PanelContainer
var current_floor := 10 var current_floor := 10
var saved_count := 0 var saved_count := 0
var doors_closing_flag := false var doors_closing_flag := false
var _onboarded := false
# Survivors per floor: more at top, fewer as you descend # Survivors per floor: more at top, fewer as you descend
var base_survivors := 2 var base_survivors := 2
@ -28,12 +29,14 @@ func _ready():
screen.pulse_blocked.connect(_on_pulse_blocked) screen.pulse_blocked.connect(_on_pulse_blocked)
screen.doors_closing.connect(_on_doors_closing) screen.doors_closing.connect(_on_doors_closing)
_start_floor() EventBus.game_started.connect(_start_floor)
func _unhandled_input(event): func _unhandled_input(event):
if event is InputEventKey and event.pressed and not event.echo: if event is InputEventKey and event.pressed and not event.echo:
if event.keycode == KEY_SPACE: if event.keycode == KEY_SPACE:
_on_block_pressed() _on_block_pressed()
elif event.keycode == KEY_R:
get_tree().reload_current_scene()
# --- Floor lifecycle --- # --- Floor lifecycle ---
@ -52,6 +55,17 @@ func _start_floor():
var screen = $PanelMargin/PanelColumn/Screen var screen = $PanelMargin/PanelColumn/Screen
screen.start() screen.start()
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 screen.launch_pulse() # first survivor arrives
# --- Input --- # --- Input ---

View file

@ -9,6 +9,7 @@
[ext_resource type="AudioStream" uid="uid://dgqb1rovgwuan" path="res://audio/ElevatorClose1.wav" id="6_gee14"] [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/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/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] [node name="Game" type="Node3D" unique_id=1456297160]
script = ExtResource("1_lbhrr") 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="ComponentSpawn" parent="." unique_id=649225939 instance=ExtResource("9_0tnpc")]
[node name="EndScreen" parent="." instance=ExtResource("10_endsc")] [node name="EndScreen" parent="." instance=ExtResource("10_endsc")]
[node name="TitleScreen" parent="." instance=ExtResource("11_title")]

View file

@ -163,3 +163,12 @@ func show_loss(message: String):
$TargetZone.visible = false $TargetZone.visible = false
$AIFace.text = message $AIFace.text = message
flash(Color.RED) 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)

14
scenes/title_screen.gd Normal file
View file

@ -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()

View file

@ -0,0 +1 @@
uid://ba3of2ykdjqcl

55
scenes/title_screen.tscn Normal file
View file

@ -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

View file

@ -6,6 +6,7 @@ signal floor_changed(floor_num: int)
signal saved_changed(count: int) signal saved_changed(count: int)
signal score_changed(new_score: int) signal score_changed(new_score: int)
signal people_changed(count: int, threshold: int) signal people_changed(count: int, threshold: int)
signal game_started
signal game_won signal game_won
signal game_lost signal game_lost
signal floor_started(survivor_count: int) signal floor_started(survivor_count: int)