Added base map drawing

This commit is contained in:
2025-12-08 17:59:07 +03:00
parent a19a5eeb80
commit 0d36b74fcd
31 changed files with 768 additions and 18 deletions
+45 -13
View File
@@ -36,12 +36,22 @@ func generate(seed_value: int) -> AreaData:
func _fill_stages(data : AreaData) -> void:
for i in range(STAGE_COUNT):
var is_endpoint := i == 0 or i == STAGE_COUNT - 1
var stage_type := _get_stage_type(i)
var seed_value := stage_seed_rng.randi()
var stage := stage_generator.generate(seed_value, is_endpoint)
var stage := stage_generator.generate(seed_value, stage_type)
data.stages.append(stage)
func _get_stage_type(stage_index: int) -> StageGenerator.StageType:
match stage_index:
0:
return StageGenerator.StageType.Start
STAGE_COUNT - 1:
return StageGenerator.StageType.Boss
_:
return StageGenerator.StageType.Inner
func _fill_passages(data : AreaData) -> void:
for i in range(data.stages.size() - 1):
var first_stage := data.stages[i]
@@ -92,21 +102,43 @@ func _fill_passages_for_unequal_pair(
is_sectors_flipped: bool
) -> void:
var lesser_size := lesser_sectors.size()
var greater_size := greater_sectors.size()
match lesser_size:
1:
for i in range(greater_size):
_connect_sectors(data, lesser_sectors[0], greater_sectors[i], is_sectors_flipped)
_fill_passages_for_unequal_pair_1_to_2_3(
data, lesser_sectors, greater_sectors, is_sectors_flipped
)
2:
_connect_sectors(data, lesser_sectors[0], greater_sectors[0], is_sectors_flipped)
_connect_sectors(data, lesser_sectors[1], greater_sectors[2], is_sectors_flipped)
if _extra_passage_needed():
_connect_sectors(data, lesser_sectors[0], greater_sectors[1], is_sectors_flipped)
_connect_sectors(data, lesser_sectors[1], greater_sectors[1], is_sectors_flipped)
else:
var from := 0 if _is_extra_passage_flipped() else 1
_connect_sectors(data, lesser_sectors[from], greater_sectors[1], is_sectors_flipped)
_fill_passages_for_unequal_pair_2_to_3(
data, lesser_sectors, greater_sectors, is_sectors_flipped
)
func _fill_passages_for_unequal_pair_1_to_2_3(
data : AreaData,
lesser_sectors: Array[SectorData],
greater_sectors: Array[SectorData],
is_sectors_flipped: bool
) -> void:
var greater_size := greater_sectors.size()
for i in range(greater_size):
_connect_sectors(data, lesser_sectors[0], greater_sectors[i], is_sectors_flipped)
func _fill_passages_for_unequal_pair_2_to_3(
data : AreaData,
lesser_sectors: Array[SectorData],
greater_sectors: Array[SectorData],
is_sectors_flipped: bool
) -> void:
_connect_sectors(data, lesser_sectors[0], greater_sectors[0], is_sectors_flipped)
_connect_sectors(data, lesser_sectors[1], greater_sectors[2], is_sectors_flipped)
if _extra_passage_needed():
_connect_sectors(data, lesser_sectors[0], greater_sectors[1], is_sectors_flipped)
_connect_sectors(data, lesser_sectors[1], greater_sectors[1], is_sectors_flipped)
else:
var from := 0 if _is_extra_passage_flipped() else 1
_connect_sectors(data, lesser_sectors[from], greater_sectors[1], is_sectors_flipped)
func _extra_passage_needed() -> bool:
+27 -1
View File
@@ -2,15 +2,41 @@ class_name SectorGenerator
extends Node
const CHANSES_BY_SECTOR_TYPE : Dictionary[SectorData.SectorType, int] = {
SectorData.SectorType.EmptySector: 45,
SectorData.SectorType.ShopSector: 30,
SectorData.SectorType.RepairSector: 20,
SectorData.SectorType.DebrisSector: 5,
}
var local_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
var sector_type_rng : RandomNumberGenerator = RandomNumberGenerator.new()
func generate(seed_value: int) -> SectorData:
local_seed_rng.seed = seed_value
sector_type_rng.seed = local_seed_rng.randi()
var data : SectorData = SectorData.new()
data.seed_value = seed_value
data.type = _get_sector_type()
return data
func _get_sector_type() -> SectorData.SectorType:
var total_chance := 0
for type in CHANSES_BY_SECTOR_TYPE:
total_chance += CHANSES_BY_SECTOR_TYPE[type]
var threshold := sector_type_rng.randi_range(1, total_chance)
var cumulative := 0
for type in CHANSES_BY_SECTOR_TYPE:
cumulative += CHANSES_BY_SECTOR_TYPE[type]
if threshold <= cumulative:
return type
return SectorData.SectorType.EmptySector
+16 -4
View File
@@ -2,6 +2,13 @@ class_name StageGenerator
extends Node
enum StageType {
Start,
Inner,
Boss,
}
const CHANSES_BY_SECTOR_COUNT : Dictionary[int, int] = {
1: 25,
2: 60,
@@ -17,7 +24,7 @@ var sector_count_rng : RandomNumberGenerator = RandomNumberGenerator.new()
@onready var sector_generator : SectorGenerator = $SectorGenerator
func generate(seed_value: int, is_endpoint: bool = false) -> StageData:
func generate(seed_value: int, type: StageType = StageType.Inner) -> StageData:
local_seed_rng.seed = seed_value
sector_seed_rng.seed = local_seed_rng.randi()
sector_count_rng.seed = local_seed_rng.randi()
@@ -25,17 +32,22 @@ func generate(seed_value: int, is_endpoint: bool = false) -> StageData:
var data : StageData = StageData.new()
data.seed_value = seed_value
_fill_sectors(data, is_endpoint)
_fill_sectors(data, type)
return data
func _fill_sectors(data : StageData, is_endpoint: bool = false) -> void:
var sector_count := 1 if is_endpoint else _get_sector_count()
func _fill_sectors(data : StageData, type: StageType = StageType.Inner) -> void:
var sector_count := _get_sector_count() if type == StageType.Inner else 1
for i in sector_count:
var seed_value := sector_seed_rng.randi()
var sector := sector_generator.generate(seed_value)
data.sectors.append(sector)
match type:
StageType.Start:
sector.type = SectorData.SectorType.StartSector
StageType.Boss:
sector.type = SectorData.SectorType.BossSector
func _get_sector_count() -> int: