add prewarm chunk generation

This commit is contained in:
2026-07-08 11:22:21 +02:00
parent 185b1b4744
commit 2358dc8b53
5 changed files with 73 additions and 140 deletions

View File

@@ -212,6 +212,17 @@ func _physics_process(_delta: float) -> void:
last_pos_train = current_pos
_refresh_world(current_pos)
func generate_initial_world_now() -> void:
if rail_path == null or rail_path.train_instance == null:
return
var train_pos = rail_path.train_instance.global_position
var current_pos = Vector2i(roundi(train_pos.x / chunk_size), roundi(train_pos.z / chunk_size))
last_pos_train = current_pos
_rebuild_generation_queue(current_pos)
_drain_generation_queue_now()
_drain_wire_queue_now()
func collect_all_chunkinfo(root: Node, list: Array[Node]) -> void:
if root == null: return
@@ -535,6 +546,20 @@ func _drain_generation_queue() -> void:
pending_generation_cells.clear()
pending_generation_cursor = 0
func _drain_generation_queue_now() -> void:
while pending_generation_cursor < pending_generation_cells.size():
var grid_pos: Vector2i = pending_generation_cells[pending_generation_cursor]
pending_generation_cursor += 1
if board.has(grid_pos):
continue
var is_obstacle = _register_cell_with_ray(grid_pos)
if not is_obstacle:
_add_compatible_biome(grid_pos)
pending_generation_cells.clear()
pending_generation_cursor = 0
func _drain_cleanup_queue() -> void:
var processed: int = 0
var start_usec: int = Time.get_ticks_usec()
@@ -595,6 +620,22 @@ func _drain_wire_queue() -> void:
pending_wire_cells.clear()
pending_wire_cursor = 0
func _drain_wire_queue_now() -> void:
while pending_wire_cursor < pending_wire_cells.size():
var grid_pos: Vector2i = pending_wire_cells[pending_wire_cursor]
pending_wire_cursor += 1
pending_wire_lookup.erase(grid_pos)
if not board.has(grid_pos):
continue
if not board[grid_pos].get("have_lamppost", false):
continue
_connect_lamppost_wires(grid_pos)
pending_wire_cells.clear()
pending_wire_cursor = 0
func _generate_pieces_around_train(center: Vector2i) -> void:
for x in range(-eye_line, eye_line + 1):
for z in range(-eye_line, eye_line + 1):