Added sector selection movement
This commit is contained in:
@@ -86,6 +86,21 @@ func _ready() -> void:
|
|||||||
selected_sector = _get_random_sector()
|
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:
|
func _set_area_data(data: AreaData) -> void:
|
||||||
area_data = data
|
area_data = data
|
||||||
|
|
||||||
@@ -185,6 +200,8 @@ func _clear_node(node: Node) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _set_current_sector(sector: SectorData) -> void:
|
func _set_current_sector(sector: SectorData) -> void:
|
||||||
|
if sector == null: return
|
||||||
|
|
||||||
if not sector in sector_positions:
|
if not sector in sector_positions:
|
||||||
current_sector_indicator.hide()
|
current_sector_indicator.hide()
|
||||||
return
|
return
|
||||||
@@ -199,6 +216,8 @@ func _set_current_sector(sector: SectorData) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _set_selected_sector(sector: SectorData) -> void:
|
func _set_selected_sector(sector: SectorData) -> void:
|
||||||
|
if sector == null: return
|
||||||
|
|
||||||
if not sector in sector_positions:
|
if not sector in sector_positions:
|
||||||
selected_sector_indicator.hide()
|
selected_sector_indicator.hide()
|
||||||
return
|
return
|
||||||
@@ -229,7 +248,7 @@ func _is_sector_accessible(sector: SectorData) -> bool:
|
|||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
||||||
func _on_test_timer_timeout() -> void:
|
func _load_text_test() -> void:
|
||||||
test_seed += 1
|
test_seed += 1
|
||||||
area_data = test_area_generator.generate(test_seed)
|
area_data = test_area_generator.generate(test_seed)
|
||||||
current_sector = _get_random_sector()
|
current_sector = _get_random_sector()
|
||||||
|
|||||||
@@ -17,9 +17,3 @@ 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"]
|
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ enum SectorType {
|
|||||||
|
|
||||||
@export var type : SectorType = SectorType.DebrisSector
|
@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:
|
var is_active: bool = true:
|
||||||
set(value):
|
set(value):
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ func _fill_stages(data : AreaData) -> void:
|
|||||||
var seed_value := stage_seed_rng.randi()
|
var seed_value := stage_seed_rng.randi()
|
||||||
var stage := stage_generator.generate(seed_value, stage_type)
|
var stage := stage_generator.generate(seed_value, stage_type)
|
||||||
data.stages.append(stage)
|
data.stages.append(stage)
|
||||||
|
|
||||||
|
_update_neighbors(data)
|
||||||
|
|
||||||
|
|
||||||
func _get_stage_type(stage_index: int) -> StageGenerator.StageType:
|
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]
|
var key := "%d %d %d" % [from_size, to_size, diff]
|
||||||
return PASSAGE_TYPES.get(key, PassageData.PassageType.ZeroGrad)
|
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] = {
|
const CHANSES_BY_SECTOR_COUNT : Dictionary[int, int] = {
|
||||||
1: 20,
|
1: 20,
|
||||||
2: 30,
|
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
|
sector.type = SectorData.SectorType.StartSector
|
||||||
StageType.Boss:
|
StageType.Boss:
|
||||||
sector.type = SectorData.SectorType.BossSector
|
sector.type = SectorData.SectorType.BossSector
|
||||||
|
_update_neighbors(data)
|
||||||
|
|
||||||
|
|
||||||
func _get_sector_count() -> int:
|
func _get_sector_count() -> int:
|
||||||
@@ -64,3 +65,12 @@ func _get_sector_count() -> int:
|
|||||||
return count
|
return count
|
||||||
|
|
||||||
return 1
|
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