Added base map drawing
This commit is contained in:
@@ -2,9 +2,19 @@ class_name PassageData
|
||||
extends Resource
|
||||
|
||||
|
||||
enum PassageAngle {
|
||||
Minus45Grad,
|
||||
Minus26Grad,
|
||||
ZeroGrad,
|
||||
Plus26Grad,
|
||||
Plus45Grad,
|
||||
}
|
||||
|
||||
@export var previous_sector : SectorData
|
||||
@export var next_sector : SectorData
|
||||
|
||||
@export var enemies : Array[EnemyData] = []
|
||||
|
||||
@export var seed_value : int = 0
|
||||
|
||||
@export var angle : PassageAngle = PassageAngle.ZeroGrad
|
||||
|
||||
@@ -2,7 +2,19 @@ class_name SectorData
|
||||
extends Resource
|
||||
|
||||
|
||||
enum SectorType {
|
||||
EmptySector,
|
||||
ShopSector,
|
||||
RepairSector,
|
||||
DebrisSector,
|
||||
StartSector,
|
||||
BossSector,
|
||||
}
|
||||
|
||||
|
||||
@export var previous_passages : Array[PassageData] = []
|
||||
@export var next_passages : Array[PassageData] = []
|
||||
|
||||
@export var seed_value : int = 0
|
||||
|
||||
@export var type : SectorType = SectorType.EmptySector
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user