Initial commit — Godot space roguelite source
- Touch controls: direct InputEventScreenTouch in shop_ui (bypass relay) - ItemDB: static preload list instead of DirAccess scan (export fix) - All 18 items with EN localisation (name_en, desc_en, category_en) - Ship playstyles: NOVA-1 shield, INFERNO ram, AURORA agile/tank - Quasar: SMBH visual, jet boost, merge, push, BH-eating - Atlas & UI text updated EN+DE Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+101
@@ -0,0 +1,101 @@
|
||||
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
|
||||
Reference in New Issue
Block a user