Files
alpacaman 47c37316fb
/ build (push) Failing after 51s
test
2026-04-21 16:14:02 +02:00

104 lines
3.0 KiB
GDScript

extends CanvasLayer
const W := 400.0
const H := 300.0
var countdown_value: int = 0
var show_countdown_flag: bool = false
var score_data: Dictionary = {}
var is_gameover: bool = false
var blink_phase: float = 0.0
var gameover_blink: bool = true
var gameover_blink_timer: float = 0.0
var is_returning: bool = false
var wipe_warning: bool = false
var credits: int = 0
var lives: int = 3
var wave_number: int = 1
var wave_cleared: bool = false
# References to game_world for live data
var game_world: Node = null
# Name entry after game over
var awaiting_name: bool = false
var name_input: String = ""
var name_saved: bool = false
var _name_saved_timer: float = 0.0
var _pending_score: int = 0
var _pending_wave: int = 0
var _online_lb: Node = null
func _ready() -> void:
var hud_draw := Node2D.new()
hud_draw.set_script(load("res://scripts/hud_draw.gd"))
hud_draw.name = "HUDDraw"
add_child(hud_draw)
hud_draw.hud = self
_online_lb = load("res://scripts/online_leaderboard.gd").new()
add_child(_online_lb)
func show_countdown(val: int) -> void:
show_countdown_flag = true
countdown_value = val
func show_gameover(data: Dictionary) -> void:
score_data = data
is_gameover = true
is_returning = false
var total := int(data.get("p1_time", 0.0)) + int(data.get("p1_kills", 0)) * 50 + int(data.get("p1_wipe", 0))
if data.get("multiplayer", false):
total += int(data.get("p2_time", 0.0)) + int(data.get("p2_kills", 0)) * 50 + int(data.get("p2_wipe", 0))
_pending_score = total
_pending_wave = wave_number
if total > 0:
awaiting_name = true
name_input = ""
name_saved = false
func _confirm_name() -> void:
var n := name_input.strip_edges()
if n.length() == 0:
return
Leaderboard.add_score(n, _pending_score, _pending_wave)
if _online_lb:
_online_lb.submit_score(n, _pending_score, _pending_wave)
name_saved = true
_name_saved_timer = 0.0
awaiting_name = false
func _unhandled_input(event: InputEvent) -> void:
if not awaiting_name:
return
if not (event is InputEventKey and (event as InputEventKey).pressed):
return
var phk := (event as InputEventKey).physical_keycode
if phk == KEY_BACKSPACE or phk == KEY_DELETE:
if name_input.length() > 0:
name_input = name_input.left(name_input.length() - 1)
elif phk == KEY_ENTER or phk == KEY_KP_ENTER:
if name_input.strip_edges().length() > 0:
_confirm_name()
elif phk == KEY_ESCAPE:
awaiting_name = false
elif name_input.length() < 12:
var uc := (event as InputEventKey).unicode
if uc >= 32 and uc < 127:
name_input += char(uc)
get_viewport().set_input_as_handled()
func _process(delta: float) -> void:
blink_phase += delta
gameover_blink_timer += delta
if gameover_blink_timer >= 0.5:
gameover_blink_timer = 0.0
gameover_blink = not gameover_blink
if name_saved:
_name_saved_timer += delta
if _name_saved_timer > 1.5:
name_saved = false
if game_world and game_world.big_wipe:
wipe_warning = game_world.big_wipe.is_active() and game_world.big_wipe.phase == BigWipe.Phase.COLLAPSE