mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
171cd4a840
Introduce arena_02 (Nebula) and arena_03 (Asteroid Field) alongside arena_01, listed in a new ArenaRegistry (scripts/arena_registry.gd) as the single source of truth for available arenas. Free Play lets the player pick an arena from the main menu; Match/Spectate each pick one at random per session; Training keeps its own fixed arena_01. Nebula gets an RL-style visual treatment: a near-invisible glass boundary material shared by all arenas, a baked equirect nebula sky texture, a drifting-dust particle system, and a Blender-modeled station/debris/planet decoration set. GameMode gains a _get_arena_scene_path() hook so modes can instantiate their arena in code instead of hardcoding it in the scene.
29 lines
714 B
GDScript
29 lines
714 B
GDScript
extends GameMode
|
|
|
|
# Free Play: one player ship, one ball, no timer, no score — practice like
|
|
# Rocket League's free play. R resets the ball, Esc returns to the menu.
|
|
|
|
|
|
func _get_arena_scene_path() -> String:
|
|
if not GameSettings.selected_arena_path.is_empty():
|
|
return GameSettings.selected_arena_path
|
|
return ArenaRegistry.ARENAS[0]["path"]
|
|
|
|
|
|
func _start() -> void:
|
|
spawn_ball()
|
|
var player_ship := spawn_ship(0, 0, PlayerShipController.new())
|
|
spawn_camera_rig(player_ship)
|
|
|
|
|
|
func _on_goal_scored(conceding_team: int) -> void:
|
|
print("Goal! (into team %d's goal)" % conceding_team)
|
|
reset_ball()
|
|
|
|
|
|
func _unhandled_input(event):
|
|
if event.is_action_pressed("reset_ball"):
|
|
reset_ball()
|
|
else:
|
|
super(event)
|