feat: implement procedural arena generation system and support infrastructure
This commit is contained in:
+29
-13
@@ -87,17 +87,7 @@ func _ready() -> void:
|
||||
cards_hbox.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||||
_level_selector_panel.add_child(cards_hbox)
|
||||
|
||||
# Level 1: Dust 2
|
||||
var d2_gradient = Gradient.new()
|
||||
d2_gradient.add_point(0.0, Color(0.9, 0.8, 0.6)) # Sand
|
||||
d2_gradient.add_point(1.0, Color(0.6, 0.5, 0.3)) # Dark sand
|
||||
_build_level_card(cards_hbox, "Dust 2", "res://scenes/dust2_level/dust2_level.tscn", d2_gradient)
|
||||
|
||||
# Level 2: Test Level
|
||||
var tl_gradient = Gradient.new()
|
||||
tl_gradient.add_point(0.0, Color(0.2, 0.2, 0.25)) # Dark grey
|
||||
tl_gradient.add_point(1.0, Color(0.3, 0.5, 0.6)) # Steel blue
|
||||
_build_level_card(cards_hbox, "Test Level", "res://scenes/test_level/test_level.tscn", tl_gradient)
|
||||
_load_maps_modularly(cards_hbox, false, Vector2(300, 400))
|
||||
|
||||
var ls_spacer = Control.new()
|
||||
ls_spacer.custom_minimum_size = Vector2(0, 20)
|
||||
@@ -224,8 +214,7 @@ func _ready() -> void:
|
||||
hl_cards.add_theme_constant_override("separation", 20)
|
||||
hl_left.add_child(hl_cards)
|
||||
|
||||
_build_level_card(hl_cards, "Dust 2", "res://scenes/dust2_level/dust2_level.tscn", d2_gradient, true, Vector2(200, 250))
|
||||
_build_level_card(hl_cards, "Test Level", "res://scenes/test_level/test_level.tscn", tl_gradient, true, Vector2(200, 250))
|
||||
_load_maps_modularly(hl_cards, true, Vector2(200, 250))
|
||||
|
||||
var mode_label = Label.new()
|
||||
mode_label.text = "Gamemode"
|
||||
@@ -277,6 +266,33 @@ func _ready() -> void:
|
||||
_host_lobby_players_list.add_theme_font_size_override("font_size", 24)
|
||||
hl_right.add_child(_host_lobby_players_list)
|
||||
|
||||
func _load_maps_modularly(target_hbox: Container, is_multiplayer: bool, card_size: Vector2) -> void:
|
||||
var maps_dir = "res://scenes/maps/"
|
||||
var dir = DirAccess.open(maps_dir)
|
||||
if not dir:
|
||||
return
|
||||
|
||||
dir.list_dir_begin()
|
||||
var folder_name = dir.get_next()
|
||||
while folder_name != "":
|
||||
if dir.current_is_dir() and not folder_name.begins_with("."):
|
||||
var cfg_path = maps_dir + folder_name + "/map_meta.cfg"
|
||||
if FileAccess.file_exists(cfg_path):
|
||||
var cfg = ConfigFile.new()
|
||||
if cfg.load(cfg_path) == OK:
|
||||
var map_name = cfg.get_value("map", "name", "Unknown Map")
|
||||
var scene_path = cfg.get_value("map", "scene_path", "")
|
||||
var c1 = cfg.get_value("map", "color1", Color(0.5, 0.5, 0.5))
|
||||
var c2 = cfg.get_value("map", "color2", Color(0.2, 0.2, 0.2))
|
||||
|
||||
if scene_path != "":
|
||||
var grad = Gradient.new()
|
||||
# A new Gradient has 2 points at 0.0 and 1.0 by default. Set their colors directly.
|
||||
grad.set_color(0, c1)
|
||||
grad.set_color(1, c2)
|
||||
_build_level_card(target_hbox, map_name, scene_path, grad, is_multiplayer, card_size)
|
||||
folder_name = dir.get_next()
|
||||
|
||||
func _build_level_card(parent: Container, title: String, scene_path: String, gradient: Gradient, is_multiplayer: bool = false, card_size: Vector2 = Vector2(300, 400)) -> void:
|
||||
var btn = TextureButton.new()
|
||||
btn.custom_minimum_size = card_size
|
||||
|
||||
Reference in New Issue
Block a user