mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-12 16:03:44 +00:00
refactor(*): Restructure game into reusable Arena/GameMode architecture with controller-driven ships, adding Free Play and Match modes
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
extends GameMode
|
||||
|
||||
# Timed match: two teams, score tracking, kickoff resets after each goal.
|
||||
# The opponent ship is currently inert (base ShipController, zero action) —
|
||||
# it becomes the AI opponent once an AIShipController exists (see TODO.md),
|
||||
# and additional player ships once multiplayer lands.
|
||||
|
||||
signal timer_updated(minutes: int, seconds: int)
|
||||
signal score_changed(score: Dictionary)
|
||||
|
||||
@export var match_length_seconds := 150.0
|
||||
|
||||
var score := {0: 0, 1: 0}
|
||||
var match_timer: Timer
|
||||
|
||||
|
||||
func _start() -> void:
|
||||
spawn_ball()
|
||||
var player_ship := spawn_ship(0, 0, PlayerShipController.new())
|
||||
spawn_camera_rig(player_ship)
|
||||
spawn_ship(1, 0, ShipController.new()) # inert placeholder opponent
|
||||
|
||||
match_timer = Timer.new()
|
||||
match_timer.one_shot = true
|
||||
match_timer.wait_time = match_length_seconds
|
||||
match_timer.timeout.connect(_on_match_timer_timeout)
|
||||
add_child(match_timer)
|
||||
match_timer.start()
|
||||
|
||||
|
||||
func _process(_delta):
|
||||
if match_timer and match_timer.time_left > 0:
|
||||
var remaining := ceili(match_timer.time_left)
|
||||
timer_updated.emit(floori(remaining / 60.0), remaining % 60)
|
||||
|
||||
|
||||
func _on_goal_scored(conceding_team: int) -> void:
|
||||
var scoring_team := 1 - conceding_team
|
||||
score[scoring_team] += 1
|
||||
score_changed.emit(score.duplicate())
|
||||
print("Goal for team %d! Score: %d - %d" % [scoring_team, score[0], score[1]])
|
||||
reset_ball()
|
||||
reset_ships()
|
||||
|
||||
|
||||
func _on_match_timer_timeout() -> void:
|
||||
print("Full time! Final score: %d - %d" % [score[0], score[1]])
|
||||
get_tree().change_scene_to_file(MAIN_MENU_SCENE_PATH)
|
||||
Reference in New Issue
Block a user