Added sector selection movement
This commit is contained in:
@@ -86,6 +86,21 @@ func _ready() -> void:
|
||||
selected_sector = _get_random_sector()
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if selected_sector == null: return
|
||||
|
||||
if event.is_action_pressed("ui_left"):
|
||||
_set_selected_sector(selected_sector.sector_to_left)
|
||||
if event.is_action_pressed("ui_right"):
|
||||
_set_selected_sector(selected_sector.sector_to_right)
|
||||
if event.is_action_pressed("ui_up"):
|
||||
_set_selected_sector(selected_sector.sector_above)
|
||||
if event.is_action_pressed("ui_down"):
|
||||
_set_selected_sector(selected_sector.sector_below)
|
||||
if event.is_action_pressed("ui_accept"):
|
||||
_load_text_test()
|
||||
|
||||
|
||||
func _set_area_data(data: AreaData) -> void:
|
||||
area_data = data
|
||||
|
||||
@@ -185,6 +200,8 @@ func _clear_node(node: Node) -> void:
|
||||
|
||||
|
||||
func _set_current_sector(sector: SectorData) -> void:
|
||||
if sector == null: return
|
||||
|
||||
if not sector in sector_positions:
|
||||
current_sector_indicator.hide()
|
||||
return
|
||||
@@ -199,6 +216,8 @@ func _set_current_sector(sector: SectorData) -> void:
|
||||
|
||||
|
||||
func _set_selected_sector(sector: SectorData) -> void:
|
||||
if sector == null: return
|
||||
|
||||
if not sector in sector_positions:
|
||||
selected_sector_indicator.hide()
|
||||
return
|
||||
@@ -229,7 +248,7 @@ func _is_sector_accessible(sector: SectorData) -> bool:
|
||||
return false
|
||||
|
||||
|
||||
func _on_test_timer_timeout() -> void:
|
||||
func _load_text_test() -> void:
|
||||
test_seed += 1
|
||||
area_data = test_area_generator.generate(test_seed)
|
||||
current_sector = _get_random_sector()
|
||||
|
||||
@@ -17,9 +17,3 @@ script = ExtResource("1_hkcry")
|
||||
[node name="SelectedSectorIndicator" parent="." instance=ExtResource("3_oxnrh")]
|
||||
|
||||
[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"]
|
||||
|
||||
@@ -21,6 +21,11 @@ enum SectorType {
|
||||
|
||||
@export var type : SectorType = SectorType.DebrisSector
|
||||
|
||||
@export var sector_to_left: SectorData = null
|
||||
@export var sector_to_right: SectorData = null
|
||||
@export var sector_above: SectorData = null
|
||||
@export var sector_below: SectorData = null
|
||||
|
||||
|
||||
var is_active: bool = true:
|
||||
set(value):
|
||||
|
||||
@@ -66,6 +66,8 @@ func _fill_stages(data : AreaData) -> void:
|
||||
var seed_value := stage_seed_rng.randi()
|
||||
var stage := stage_generator.generate(seed_value, stage_type)
|
||||
data.stages.append(stage)
|
||||
|
||||
_update_neighbors(data)
|
||||
|
||||
|
||||
func _get_stage_type(stage_index: int) -> StageGenerator.StageType:
|
||||
@@ -224,3 +226,49 @@ func _get_passage_type(
|
||||
|
||||
var key := "%d %d %d" % [from_size, to_size, diff]
|
||||
return PASSAGE_TYPES.get(key, PassageData.PassageType.ZeroGrad)
|
||||
|
||||
|
||||
func _update_neighbors(data : AreaData) -> void:
|
||||
for stage_index in range(data.stages.size()):
|
||||
var stage := data.stages[stage_index]
|
||||
for sector_index in range(stage.sectors.size()):
|
||||
var sector := stage.sectors[sector_index]
|
||||
sector.sector_to_left = _get_left_neighbor(data, stage_index, sector_index)
|
||||
sector.sector_to_right = _get_right_neighbor(data, stage_index, sector_index)
|
||||
|
||||
|
||||
func _get_left_neighbor(data : AreaData, stage_index: int, sector_index: int) -> SectorData:
|
||||
if stage_index == 0: return null
|
||||
|
||||
var current_stage := data.stages[stage_index]
|
||||
var left_stage := data.stages[stage_index-1]
|
||||
|
||||
return _get_side_neighbor(sector_index, current_stage, left_stage)
|
||||
|
||||
|
||||
func _get_right_neighbor(data : AreaData, stage_index: int, sector_index: int) -> SectorData:
|
||||
if stage_index == data.stages.size() - 1: return null
|
||||
|
||||
var current_stage := data.stages[stage_index]
|
||||
var right_stage := data.stages[stage_index+1]
|
||||
|
||||
return _get_side_neighbor(sector_index, current_stage, right_stage)
|
||||
|
||||
|
||||
func _get_side_neighbor(
|
||||
sector_index: int, current_stage: StageData, side_stage: StageData
|
||||
) -> SectorData:
|
||||
var current_size := current_stage.sectors.size()
|
||||
var side_size := side_stage.sectors.size()
|
||||
|
||||
if side_size == 0:
|
||||
return null
|
||||
|
||||
if current_size == 1:
|
||||
return side_stage.sectors[floori(side_size / 2.0)]
|
||||
|
||||
var normalized_position := float(sector_index) / float(current_size - 1)
|
||||
var side_index := floori(normalized_position * (side_size - 1))
|
||||
side_index = clampi(side_index, 0, side_size - 1)
|
||||
|
||||
return side_stage.sectors[side_index]
|
||||
|
||||
@@ -12,7 +12,7 @@ enum StageType {
|
||||
const CHANSES_BY_SECTOR_COUNT : Dictionary[int, int] = {
|
||||
1: 20,
|
||||
2: 30,
|
||||
3: 50
|
||||
3: 50,
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ func _fill_sectors(data : StageData, type: StageType = StageType.Inner) -> void:
|
||||
sector.type = SectorData.SectorType.StartSector
|
||||
StageType.Boss:
|
||||
sector.type = SectorData.SectorType.BossSector
|
||||
_update_neighbors(data)
|
||||
|
||||
|
||||
func _get_sector_count() -> int:
|
||||
@@ -64,3 +65,12 @@ func _get_sector_count() -> int:
|
||||
return count
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
func _update_neighbors(data : StageData) -> void:
|
||||
var size := data.sectors.size()
|
||||
for i in range(size):
|
||||
if i > 0:
|
||||
data.sectors[i].sector_above = data.sectors[i-1]
|
||||
if i < size - 1:
|
||||
data.sectors[i].sector_below = data.sectors[i+1]
|
||||
|
||||
Reference in New Issue
Block a user