Added correct passage drawing
This commit is contained in:
+24
-12
@@ -8,16 +8,18 @@ const SECTOR_XS = [
|
|||||||
64 * 7, 64 * 8, 64 * 9,
|
64 * 7, 64 * 8, 64 * 9,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const SECTOR_Y_OFFSET = 24
|
||||||
|
|
||||||
const SECTOR_YS_FOR_ONE = [
|
const SECTOR_YS_FOR_ONE = [
|
||||||
64 * 2
|
SECTOR_Y_OFFSET + 64 * 1
|
||||||
]
|
]
|
||||||
|
|
||||||
const SECTOR_YS_FOR_TWO = [
|
const SECTOR_YS_FOR_TWO = [
|
||||||
64 * 1.5, 64 * 2.5,
|
SECTOR_Y_OFFSET + 64 * 0.5, SECTOR_Y_OFFSET + 64 * 1.5,
|
||||||
]
|
]
|
||||||
|
|
||||||
const SECTOR_YS_FOR_THREE = [
|
const SECTOR_YS_FOR_THREE = [
|
||||||
64 * 1, 64 * 2, 64 * 3,
|
SECTOR_Y_OFFSET + 64 * 0, SECTOR_Y_OFFSET + 64 * 1, SECTOR_Y_OFFSET + 64 * 2,
|
||||||
]
|
]
|
||||||
|
|
||||||
const CURRENT_SECTOR_INDICATOR_OFFSET = Vector2(0, 16)
|
const CURRENT_SECTOR_INDICATOR_OFFSET = Vector2(0, 16)
|
||||||
@@ -36,16 +38,16 @@ const SECTOR_SCENES : Dictionary[SectorData.SectorType, PackedScene] = {
|
|||||||
SectorData.SectorType.BossSector:
|
SectorData.SectorType.BossSector:
|
||||||
preload("res://game/area_map/indicators/sectors/boss_sector_indicator.tscn"),
|
preload("res://game/area_map/indicators/sectors/boss_sector_indicator.tscn"),
|
||||||
}
|
}
|
||||||
const PASSAGE_SCENES : Dictionary[PassageData.PassageAngle, PackedScene] = {
|
const PASSAGE_SCENES : Dictionary[PassageData.PassageType, PackedScene] = {
|
||||||
PassageData.PassageAngle.Minus45Grad:
|
PassageData.PassageType.Minus45Grad:
|
||||||
preload("res://game/area_map/indicators/passages/minus_45_grad_passage_indicator.tscn"),
|
preload("res://game/area_map/indicators/passages/minus_45_grad_passage_indicator.tscn"),
|
||||||
PassageData.PassageAngle.Minus26Grad:
|
PassageData.PassageType.Minus26Grad:
|
||||||
preload("res://game/area_map/indicators/passages/minus_26_grad_passage_indicator.tscn"),
|
preload("res://game/area_map/indicators/passages/minus_26_grad_passage_indicator.tscn"),
|
||||||
PassageData.PassageAngle.ZeroGrad:
|
PassageData.PassageType.ZeroGrad:
|
||||||
preload("res://game/area_map/indicators/passages/zero_grad_passage_indicator.tscn"),
|
preload("res://game/area_map/indicators/passages/zero_grad_passage_indicator.tscn"),
|
||||||
PassageData.PassageAngle.Plus26Grad:
|
PassageData.PassageType.Plus26Grad:
|
||||||
preload("res://game/area_map/indicators/passages/plus_26_grad_passage_indicator.tscn"),
|
preload("res://game/area_map/indicators/passages/plus_26_grad_passage_indicator.tscn"),
|
||||||
PassageData.PassageAngle.Plus45Grad:
|
PassageData.PassageType.Plus45Grad:
|
||||||
preload("res://game/area_map/indicators/passages/plus_45_grad_passage_indicator.tscn"),
|
preload("res://game/area_map/indicators/passages/plus_45_grad_passage_indicator.tscn"),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +69,7 @@ var selected_sector: SectorData = null:
|
|||||||
var sector_positions : Dictionary[SectorData, Vector2] = {}
|
var sector_positions : Dictionary[SectorData, Vector2] = {}
|
||||||
|
|
||||||
var test_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
var test_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||||
|
var test_seed := 0
|
||||||
|
|
||||||
|
|
||||||
@onready var passages_node : Node2D = $Passages
|
@onready var passages_node : Node2D = $Passages
|
||||||
@@ -79,7 +82,7 @@ var test_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
|||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
area_data = test_area_generator.generate(4)
|
area_data = test_area_generator.generate(test_seed)
|
||||||
test_rng.seed = 0
|
test_rng.seed = 0
|
||||||
current_sector = _get_random_sector()
|
current_sector = _get_random_sector()
|
||||||
selected_sector = _get_random_sector()
|
selected_sector = _get_random_sector()
|
||||||
@@ -148,16 +151,18 @@ func _fill_sectors(stage: StageData) -> void:
|
|||||||
var sector_instance : AbstractSectorIndicator = scene.instantiate()
|
var sector_instance : AbstractSectorIndicator = scene.instantiate()
|
||||||
sector_instance.position = sector_position
|
sector_instance.position = sector_position
|
||||||
sectors_node.add_child(sector_instance)
|
sectors_node.add_child(sector_instance)
|
||||||
|
sector.activity_changed.connect(sector_instance.set_active)
|
||||||
|
|
||||||
|
|
||||||
func _fill_passages(passages: Array[PassageData], sector_position: Vector2) -> void:
|
func _fill_passages(passages: Array[PassageData], sector_position: Vector2) -> void:
|
||||||
for passage in passages:
|
for passage in passages:
|
||||||
if not passage.angle in PASSAGE_SCENES: continue
|
if not passage.type in PASSAGE_SCENES: continue
|
||||||
|
|
||||||
var scene := PASSAGE_SCENES[passage.angle]
|
var scene := PASSAGE_SCENES[passage.type]
|
||||||
var passage_instance : AbstractPassageIndicator = scene.instantiate()
|
var passage_instance : AbstractPassageIndicator = scene.instantiate()
|
||||||
passage_instance.position = sector_position
|
passage_instance.position = sector_position
|
||||||
passages_node.add_child(passage_instance)
|
passages_node.add_child(passage_instance)
|
||||||
|
passage.activity_changed.connect(passage_instance.set_active)
|
||||||
|
|
||||||
|
|
||||||
func _get_sector_position(stage_index: int, sector_index: int, sector_count: int) -> Vector2:
|
func _get_sector_position(stage_index: int, sector_index: int, sector_count: int) -> Vector2:
|
||||||
@@ -205,3 +210,10 @@ func _set_selected_sector(sector: SectorData) -> void:
|
|||||||
selected_sector_indicator.position = sector_position
|
selected_sector_indicator.position = sector_position
|
||||||
|
|
||||||
selected_sector_indicator.show()
|
selected_sector_indicator.show()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_test_timer_timeout() -> void:
|
||||||
|
test_seed += 1
|
||||||
|
area_data = test_area_generator.generate(test_seed)
|
||||||
|
current_sector = _get_random_sector()
|
||||||
|
selected_sector = _get_random_sector()
|
||||||
|
|||||||
@@ -17,3 +17,9 @@ script = ExtResource("1_hkcry")
|
|||||||
[node name="SelectedSectorIndicator" parent="." instance=ExtResource("3_oxnrh")]
|
[node name="SelectedSectorIndicator" parent="." instance=ExtResource("3_oxnrh")]
|
||||||
|
|
||||||
[node name="TestAreaGenerator" parent="." instance=ExtResource("2_0o0gd")]
|
[node name="TestAreaGenerator" parent="." instance=ExtResource("2_0o0gd")]
|
||||||
|
|
||||||
|
[node name="TestTimer" type="Timer" parent="."]
|
||||||
|
wait_time = 10.0
|
||||||
|
autostart = true
|
||||||
|
|
||||||
|
[connection signal="timeout" from="TestTimer" to="." method="_on_test_timer_timeout"]
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ shader_type canvas_item;
|
|||||||
uniform float speed = 5.0;
|
uniform float speed = 5.0;
|
||||||
uniform float scale = 20.0;
|
uniform float scale = 20.0;
|
||||||
uniform float intensity = 1;
|
uniform float intensity = 1;
|
||||||
|
uniform sampler2D noise;
|
||||||
|
|
||||||
float rand(vec2 coord) {
|
float rand(vec2 coord) {
|
||||||
return fract(sin(dot(coord, vec2(12.9898, 78.233))) * 43758.5453);
|
return fract(sin(dot(coord, vec2(12.9898, 78.233))) * 43758.5453);
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ class_name PassageData
|
|||||||
extends Resource
|
extends Resource
|
||||||
|
|
||||||
|
|
||||||
enum PassageAngle {
|
signal activity_changed(is_active: bool)
|
||||||
|
|
||||||
|
|
||||||
|
enum PassageType {
|
||||||
Minus45Grad,
|
Minus45Grad,
|
||||||
Minus26Grad,
|
Minus26Grad,
|
||||||
ZeroGrad,
|
ZeroGrad,
|
||||||
@@ -17,4 +20,11 @@ enum PassageAngle {
|
|||||||
|
|
||||||
@export var seed_value : int = 0
|
@export var seed_value : int = 0
|
||||||
|
|
||||||
@export var angle : PassageAngle = PassageAngle.ZeroGrad
|
@export var type : PassageType = PassageType.ZeroGrad
|
||||||
|
|
||||||
|
|
||||||
|
var is_active: bool = true:
|
||||||
|
set(value):
|
||||||
|
if is_active == value: return
|
||||||
|
is_active = value
|
||||||
|
activity_changed.emit(is_active)
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ class_name SectorData
|
|||||||
extends Resource
|
extends Resource
|
||||||
|
|
||||||
|
|
||||||
|
signal activity_changed(is_active: bool)
|
||||||
|
|
||||||
|
|
||||||
enum SectorType {
|
enum SectorType {
|
||||||
EmptySector,
|
EmptySector,
|
||||||
ShopSector,
|
ShopSector,
|
||||||
@@ -18,3 +21,10 @@ enum SectorType {
|
|||||||
@export var seed_value : int = 0
|
@export var seed_value : int = 0
|
||||||
|
|
||||||
@export var type : SectorType = SectorType.EmptySector
|
@export var type : SectorType = SectorType.EmptySector
|
||||||
|
|
||||||
|
|
||||||
|
var is_active: bool = true:
|
||||||
|
set(value):
|
||||||
|
if is_active == value: return
|
||||||
|
is_active = value
|
||||||
|
activity_changed.emit(is_active)
|
||||||
|
|||||||
@@ -4,7 +4,33 @@ extends Node
|
|||||||
|
|
||||||
const STAGE_COUNT = 9
|
const STAGE_COUNT = 9
|
||||||
|
|
||||||
const EXTRA_PASSAGE_CHANCE = 20
|
const EXTRA_PASSAGE_CHANCE = 33
|
||||||
|
|
||||||
|
const PASSAGE_TYPES = {
|
||||||
|
"1 1 0": PassageData.PassageType.ZeroGrad,
|
||||||
|
"1 2 0": PassageData.PassageType.Minus26Grad,
|
||||||
|
"1 2 -1": PassageData.PassageType.Plus26Grad,
|
||||||
|
"1 3 0": PassageData.PassageType.Plus45Grad,
|
||||||
|
"1 3 -1": PassageData.PassageType.ZeroGrad,
|
||||||
|
"1 3 -2": PassageData.PassageType.Minus45Grad,
|
||||||
|
|
||||||
|
"2 1 1": PassageData.PassageType.Minus26Grad,
|
||||||
|
"2 1 0": PassageData.PassageType.Plus26Grad,
|
||||||
|
"2 2 1": PassageData.PassageType.Minus45Grad,
|
||||||
|
"2 2 0": PassageData.PassageType.ZeroGrad,
|
||||||
|
"2 2 -1": PassageData.PassageType.Plus45Grad,
|
||||||
|
"2 3 0": PassageData.PassageType.Minus26Grad,
|
||||||
|
"2 3 -1": PassageData.PassageType.Plus26Grad,
|
||||||
|
|
||||||
|
"3 1 2": PassageData.PassageType.Minus45Grad,
|
||||||
|
"3 1 1": PassageData.PassageType.ZeroGrad,
|
||||||
|
"3 1 0": PassageData.PassageType.Plus45Grad,
|
||||||
|
"3 2 1": PassageData.PassageType.Minus26Grad,
|
||||||
|
"3 2 0": PassageData.PassageType.Plus26Grad,
|
||||||
|
"3 3 1": PassageData.PassageType.Minus45Grad,
|
||||||
|
"3 3 0": PassageData.PassageType.ZeroGrad,
|
||||||
|
"3 3 -1": PassageData.PassageType.Plus45Grad,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var local_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
var local_seed_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||||
@@ -18,7 +44,7 @@ var passage_direction_rng : RandomNumberGenerator = RandomNumberGenerator.new()
|
|||||||
@onready var passage_generator : PassageGenerator = $PassageGenerator
|
@onready var passage_generator : PassageGenerator = $PassageGenerator
|
||||||
|
|
||||||
|
|
||||||
func generate(seed_value: int) -> AreaData:
|
func generate(seed_value: int) -> AreaData:
|
||||||
local_seed_rng.seed = seed_value
|
local_seed_rng.seed = seed_value
|
||||||
stage_seed_rng.seed = local_seed_rng.randi()
|
stage_seed_rng.seed = local_seed_rng.randi()
|
||||||
passage_seed_rng.seed = local_seed_rng.randi()
|
passage_seed_rng.seed = local_seed_rng.randi()
|
||||||
@@ -68,11 +94,13 @@ func _fill_passages_for_pair(
|
|||||||
var second_size := second_stage.sectors.size()
|
var second_size := second_stage.sectors.size()
|
||||||
|
|
||||||
if first_size < second_size:
|
if first_size < second_size:
|
||||||
var is_flipped := false
|
_fill_passages_for_unequal_pair(
|
||||||
_fill_passages_for_unequal_pair(data, first_stage.sectors, second_stage.sectors, is_flipped)
|
data, first_stage.sectors, second_stage.sectors, _connect_sectors
|
||||||
|
)
|
||||||
elif first_size > second_size:
|
elif first_size > second_size:
|
||||||
var is_flipped := true
|
_fill_passages_for_unequal_pair(
|
||||||
_fill_passages_for_unequal_pair(data, second_stage.sectors, first_stage.sectors, is_flipped)
|
data, second_stage.sectors, first_stage.sectors, _connect_sectors_flipped
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
_fill_passages_for_equal_pair(data, first_stage.sectors, second_stage.sectors)
|
_fill_passages_for_equal_pair(data, first_stage.sectors, second_stage.sectors)
|
||||||
|
|
||||||
@@ -85,32 +113,32 @@ func _fill_passages_for_equal_pair(
|
|||||||
var size := first_sectors.size()
|
var size := first_sectors.size()
|
||||||
|
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
_connect_sectors(data, first_sectors[i], second_sectors[i])
|
_connect_sectors(data, first_sectors, i, second_sectors, i)
|
||||||
|
|
||||||
for i in range(size - 1):
|
for i in range(size - 1):
|
||||||
if _extra_passage_needed():
|
if _extra_passage_needed():
|
||||||
var is_passage_fliped := _is_extra_passage_flipped()
|
var is_passage_fliped := _is_extra_passage_flipped()
|
||||||
var from := i if is_passage_fliped else i + 1
|
var from := i if is_passage_fliped else i + 1
|
||||||
var to := i + 1 if is_passage_fliped else i
|
var to := i + 1 if is_passage_fliped else i
|
||||||
_connect_sectors(data, first_sectors[from], second_sectors[to])
|
_connect_sectors(data, first_sectors, from, second_sectors, to)
|
||||||
|
|
||||||
|
|
||||||
func _fill_passages_for_unequal_pair(
|
func _fill_passages_for_unequal_pair(
|
||||||
data : AreaData,
|
data : AreaData,
|
||||||
lesser_sectors: Array[SectorData],
|
lesser_sectors: Array[SectorData],
|
||||||
greater_sectors: Array[SectorData],
|
greater_sectors: Array[SectorData],
|
||||||
is_sectors_flipped: bool
|
connect_method: Callable
|
||||||
) -> void:
|
) -> void:
|
||||||
var lesser_size := lesser_sectors.size()
|
var lesser_size := lesser_sectors.size()
|
||||||
|
|
||||||
match lesser_size:
|
match lesser_size:
|
||||||
1:
|
1:
|
||||||
_fill_passages_for_unequal_pair_1_to_2_3(
|
_fill_passages_for_unequal_pair_1_to_2_3(
|
||||||
data, lesser_sectors, greater_sectors, is_sectors_flipped
|
data, lesser_sectors, greater_sectors, connect_method
|
||||||
)
|
)
|
||||||
2:
|
2:
|
||||||
_fill_passages_for_unequal_pair_2_to_3(
|
_fill_passages_for_unequal_pair_2_to_3(
|
||||||
data, lesser_sectors, greater_sectors, is_sectors_flipped
|
data, lesser_sectors, greater_sectors, connect_method
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -118,27 +146,30 @@ func _fill_passages_for_unequal_pair_1_to_2_3(
|
|||||||
data : AreaData,
|
data : AreaData,
|
||||||
lesser_sectors: Array[SectorData],
|
lesser_sectors: Array[SectorData],
|
||||||
greater_sectors: Array[SectorData],
|
greater_sectors: Array[SectorData],
|
||||||
is_sectors_flipped: bool
|
connect_method: Callable
|
||||||
) -> void:
|
) -> void:
|
||||||
var greater_size := greater_sectors.size()
|
var greater_size := greater_sectors.size()
|
||||||
for i in range(greater_size):
|
for i in range(greater_size):
|
||||||
_connect_sectors(data, lesser_sectors[0], greater_sectors[i], is_sectors_flipped)
|
connect_method.call(data, lesser_sectors, 0, greater_sectors, i)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _fill_passages_for_unequal_pair_2_to_3(
|
func _fill_passages_for_unequal_pair_2_to_3(
|
||||||
data : AreaData,
|
data : AreaData,
|
||||||
lesser_sectors: Array[SectorData],
|
lesser_sectors: Array[SectorData],
|
||||||
greater_sectors: Array[SectorData],
|
greater_sectors: Array[SectorData],
|
||||||
is_sectors_flipped: bool
|
connect_method: Callable
|
||||||
) -> void:
|
) -> 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)
|
connect_method.call(data, lesser_sectors, 0, greater_sectors, 0)
|
||||||
|
connect_method.call(data, lesser_sectors, 1, greater_sectors, 2)
|
||||||
|
|
||||||
if _extra_passage_needed():
|
if _extra_passage_needed():
|
||||||
_connect_sectors(data, lesser_sectors[0], greater_sectors[1], is_sectors_flipped)
|
connect_method.call(data, lesser_sectors, 0, greater_sectors, 1)
|
||||||
_connect_sectors(data, lesser_sectors[1], greater_sectors[1], is_sectors_flipped)
|
connect_method.call(data, lesser_sectors, 1, greater_sectors, 1)
|
||||||
else:
|
else:
|
||||||
var from := 0 if _is_extra_passage_flipped() else 1
|
var from := 0 if _is_extra_passage_flipped() else 1
|
||||||
_connect_sectors(data, lesser_sectors[from], greater_sectors[1], is_sectors_flipped)
|
connect_method.call(data, lesser_sectors, from, greater_sectors, 1)
|
||||||
|
|
||||||
|
|
||||||
func _extra_passage_needed() -> bool:
|
func _extra_passage_needed() -> bool:
|
||||||
@@ -151,20 +182,45 @@ func _is_extra_passage_flipped() -> bool:
|
|||||||
|
|
||||||
func _connect_sectors(
|
func _connect_sectors(
|
||||||
data : AreaData,
|
data : AreaData,
|
||||||
first_sector: SectorData,
|
first_sectors: Array[SectorData],
|
||||||
second_sector: SectorData,
|
first_index: int,
|
||||||
is_flipped: bool = false
|
second_sectors: Array[SectorData],
|
||||||
|
second_index: int
|
||||||
) -> void:
|
) -> void:
|
||||||
var seed_value := passage_seed_rng.randi()
|
var seed_value := passage_seed_rng.randi()
|
||||||
var passage := passage_generator.generate(seed_value)
|
var passage := passage_generator.generate(seed_value)
|
||||||
|
|
||||||
var previous_sector := second_sector if is_flipped else first_sector
|
passage.type = _get_passage_type(
|
||||||
var next_sector := first_sector if is_flipped else second_sector
|
first_sectors.size(), first_index,
|
||||||
|
second_sectors.size(), second_index,
|
||||||
|
)
|
||||||
|
|
||||||
passage.previous_sector = previous_sector
|
var first_sector := first_sectors[first_index]
|
||||||
passage.next_sector = next_sector
|
var second_sector := second_sectors[second_index]
|
||||||
|
|
||||||
previous_sector.next_passages.append(passage)
|
passage.previous_sector = first_sector
|
||||||
next_sector.previous_passages.append(passage)
|
passage.next_sector = second_sector
|
||||||
|
|
||||||
|
first_sector.next_passages.append(passage)
|
||||||
|
second_sector.previous_passages.append(passage)
|
||||||
|
|
||||||
data.passages.append(passage)
|
data.passages.append(passage)
|
||||||
|
|
||||||
|
|
||||||
|
func _connect_sectors_flipped(
|
||||||
|
data : AreaData,
|
||||||
|
first_sectors: Array[SectorData],
|
||||||
|
first_index: int,
|
||||||
|
second_sectors: Array[SectorData],
|
||||||
|
second_index: int
|
||||||
|
) -> void:
|
||||||
|
_connect_sectors(data, second_sectors, second_index, first_sectors, first_index)
|
||||||
|
|
||||||
|
|
||||||
|
func _get_passage_type(
|
||||||
|
from_size: int, from_index: int, to_size: int, to_index: int
|
||||||
|
) -> PassageData.PassageType:
|
||||||
|
var diff := from_index - to_index
|
||||||
|
|
||||||
|
var key := "%d %d %d" % [from_size, to_size, diff]
|
||||||
|
return PASSAGE_TYPES.get(key, PassageData.PassageType.ZeroGrad)
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ enum StageType {
|
|||||||
|
|
||||||
|
|
||||||
const CHANSES_BY_SECTOR_COUNT : Dictionary[int, int] = {
|
const CHANSES_BY_SECTOR_COUNT : Dictionary[int, int] = {
|
||||||
1: 25,
|
1: 20,
|
||||||
2: 60,
|
2: 30,
|
||||||
3: 15
|
3: 50
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user