Added stage and passage generators
This commit is contained in:
@@ -2,6 +2,13 @@ class_name AreaGenerator
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
@onready var stage_generator : StageGenerator = $StageGenerator
|
||||||
|
@onready var passage_generator : PassageGenerator = $PassageGenerator
|
||||||
|
|
||||||
|
|
||||||
|
const INNER_STAGE_COUNT = 3
|
||||||
|
|
||||||
|
|
||||||
func generate(seed_value: int) -> AreaData:
|
func generate(seed_value: int) -> AreaData:
|
||||||
var rng := RandomNumberGenerator.new()
|
var rng := RandomNumberGenerator.new()
|
||||||
rng.seed = seed_value
|
rng.seed = seed_value
|
||||||
@@ -10,9 +17,77 @@ func generate(seed_value: int) -> AreaData:
|
|||||||
data.seed_value = seed_value
|
data.seed_value = seed_value
|
||||||
|
|
||||||
_fill_stages(rng, data)
|
_fill_stages(rng, data)
|
||||||
|
_fill_passages(rng, data)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
func _fill_stages(rng: RandomNumberGenerator, data : AreaData) -> void:
|
func _fill_stages(rng: RandomNumberGenerator, data : AreaData) -> void:
|
||||||
pass
|
_fill_first_stage(rng, data)
|
||||||
|
_fill_last_stage(rng, data)
|
||||||
|
_fill_inner_stages(rng, data)
|
||||||
|
|
||||||
|
|
||||||
|
func _fill_first_stage(rng: RandomNumberGenerator, data : AreaData) -> void:
|
||||||
|
var stage := _get_stage(rng, true)
|
||||||
|
data.first_stage = stage
|
||||||
|
|
||||||
|
|
||||||
|
func _fill_last_stage(rng: RandomNumberGenerator, data : AreaData) -> void:
|
||||||
|
var stage := _get_stage(rng, true)
|
||||||
|
data.last_stage = stage
|
||||||
|
|
||||||
|
|
||||||
|
func _fill_inner_stages(rng: RandomNumberGenerator, data : AreaData) -> void:
|
||||||
|
for i in INNER_STAGE_COUNT:
|
||||||
|
var stage := _get_stage(rng)
|
||||||
|
data.inner_stages.append(stage)
|
||||||
|
|
||||||
|
|
||||||
|
func _fill_passages(rng: RandomNumberGenerator, data : AreaData) -> void:
|
||||||
|
var all_stages : Array[StageData] = [data.first_stage] + data.inner_stages + [data.last_stage]
|
||||||
|
|
||||||
|
for i in range(all_stages.size() - 1):
|
||||||
|
var first_stage := all_stages[i]
|
||||||
|
var second_stage := all_stages[i + 1]
|
||||||
|
_fill_passages_for_pair(rng, data, first_stage, second_stage)
|
||||||
|
|
||||||
|
|
||||||
|
func _fill_passages_for_pair(
|
||||||
|
rng: RandomNumberGenerator,
|
||||||
|
data : AreaData,
|
||||||
|
first_stage: StageData,
|
||||||
|
second_stage: StageData
|
||||||
|
) -> void:
|
||||||
|
var first_size := first_stage.sectors.size()
|
||||||
|
var second_size := second_stage.sectors.size()
|
||||||
|
|
||||||
|
if first_size == second_size:
|
||||||
|
match first_size:
|
||||||
|
1:
|
||||||
|
pass
|
||||||
|
2:
|
||||||
|
pass
|
||||||
|
3:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
var lesser_stage := first_stage if first_size < second_size else second_stage
|
||||||
|
var greater_stage := first_stage if first_size > second_size else second_stage
|
||||||
|
var lesser_size := lesser_stage.sectors.size()
|
||||||
|
var greater_size := greater_stage.sectors.size()
|
||||||
|
|
||||||
|
match lesser_size:
|
||||||
|
1:
|
||||||
|
match greater_size:
|
||||||
|
2:
|
||||||
|
pass
|
||||||
|
3:
|
||||||
|
pass
|
||||||
|
2:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func _get_stage(rng: RandomNumberGenerator, is_endpoint: bool = false) -> StageData:
|
||||||
|
var seed_value := rng.randi()
|
||||||
|
var stage := stage_generator.generate(seed_value, is_endpoint)
|
||||||
|
return stage
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://c4l1cv3o25lhv"]
|
[gd_scene load_steps=4 format=3 uid="uid://c4l1cv3o25lhv"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bcq74qwnbylg2" path="res://game/world/generators/area_generator.gd" id="1_hahgo"]
|
[ext_resource type="Script" uid="uid://bcq74qwnbylg2" path="res://game/world/generators/area_generator.gd" id="1_hahgo"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bn4r4f3str55v" path="res://game/world/generators/stage_generator.tscn" id="2_b1pkv"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cfcpr07j58cvx" path="res://game/world/generators/passage_generator.tscn" id="3_q2vfj"]
|
||||||
|
|
||||||
[node name="AreaGenerator" type="Node"]
|
[node name="AreaGenerator" type="Node"]
|
||||||
script = ExtResource("1_hahgo")
|
script = ExtResource("1_hahgo")
|
||||||
|
|
||||||
|
[node name="StageGenerator" parent="." instance=ExtResource("2_b1pkv")]
|
||||||
|
|
||||||
|
[node name="PassageGenerator" parent="." instance=ExtResource("3_q2vfj")]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ extends Node
|
|||||||
@onready var area_generator : AreaGenerator = $AreaGenerator
|
@onready var area_generator : AreaGenerator = $AreaGenerator
|
||||||
|
|
||||||
|
|
||||||
const MAX_AREA_COUNT = 3
|
const AREA_COUNT = 3
|
||||||
|
|
||||||
|
|
||||||
func generate(seed_value: int) -> WorldData:
|
func generate(seed_value: int) -> WorldData:
|
||||||
@@ -21,7 +21,7 @@ func generate(seed_value: int) -> WorldData:
|
|||||||
|
|
||||||
|
|
||||||
func _fill_areas(rng: RandomNumberGenerator, data : WorldData) -> void:
|
func _fill_areas(rng: RandomNumberGenerator, data : WorldData) -> void:
|
||||||
for i in MAX_AREA_COUNT:
|
for i in AREA_COUNT:
|
||||||
var seed_value := rng.randi()
|
var seed_value := rng.randi()
|
||||||
var area := area_generator.generate(seed_value)
|
var area := area_generator.generate(seed_value)
|
||||||
data.areas.append(area)
|
data.areas.append(area)
|
||||||
|
|||||||
Reference in New Issue
Block a user