mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-11 08:23:45 +00:00
feat: add Nebula and Asteroid Field arenas
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.
This commit is contained in:
@@ -26,6 +26,11 @@ func _ready():
|
||||
if child is Arena:
|
||||
arena = child
|
||||
break
|
||||
if not arena:
|
||||
var path := _get_arena_scene_path()
|
||||
if not path.is_empty():
|
||||
arena = (load(path) as PackedScene).instantiate()
|
||||
add_child(arena)
|
||||
if not arena:
|
||||
push_error("GameMode: scene has no Arena child")
|
||||
return
|
||||
@@ -34,6 +39,13 @@ func _ready():
|
||||
_start()
|
||||
|
||||
|
||||
# Virtual: subclasses whose scene has no fixed Arena child override this to
|
||||
# pick which arena scene to instantiate in code (see ArenaRegistry). Modes
|
||||
# that keep a fixed Arena child (training.tscn) never call this.
|
||||
func _get_arena_scene_path() -> String:
|
||||
return ""
|
||||
|
||||
|
||||
# Virtual: subclasses spawn their ball/ships/camera here.
|
||||
func _start() -> void:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user