fix spawn!
This commit is contained in:
@@ -105,6 +105,7 @@ var chunk_candidate_cache: Dictionary = {} #node cache (metadata)
|
|||||||
var prop_candidate_cache: Dictionary = {}
|
var prop_candidate_cache: Dictionary = {}
|
||||||
var entity_candidate_cache: Dictionary = {}
|
var entity_candidate_cache: Dictionary = {}
|
||||||
var static_entity_spawn_roots: Dictionary = {}
|
var static_entity_spawn_roots: Dictionary = {}
|
||||||
|
var spawned_entity_spawn_points: Dictionary = {}
|
||||||
var pending_generation_cells: Array[Vector2i] = []
|
var pending_generation_cells: Array[Vector2i] = []
|
||||||
var pending_cleanup_cells: Array[Vector2i] = []
|
var pending_cleanup_cells: Array[Vector2i] = []
|
||||||
var pending_wire_cells: Array[Vector2i] = []
|
var pending_wire_cells: Array[Vector2i] = []
|
||||||
@@ -824,8 +825,6 @@ func _get_static_spawn_chunk_root_from_point(spawn_point: Node) -> Node:
|
|||||||
return null
|
return null
|
||||||
|
|
||||||
func _get_static_entity_spawn_key(spawn_root: Node) -> String:
|
func _get_static_entity_spawn_key(spawn_root: Node) -> String:
|
||||||
if spawn_root.scene_file_path != "":
|
|
||||||
return spawn_root.scene_file_path
|
|
||||||
return "instance:%s" % spawn_root.get_instance_id()
|
return "instance:%s" % spawn_root.get_instance_id()
|
||||||
|
|
||||||
func _spawn_entities_for_static_spawn_points() -> void:
|
func _spawn_entities_for_static_spawn_points() -> void:
|
||||||
@@ -850,10 +849,12 @@ func _spawn_entities_for_static_obstacle(root: Node, grid_pos: Vector2i) -> void
|
|||||||
if root == null or not is_instance_valid(root):
|
if root == null or not is_instance_valid(root):
|
||||||
return
|
return
|
||||||
|
|
||||||
var spawn_root = _get_static_entity_spawn_root(root)
|
var spawn_points: Array[Node] = []
|
||||||
if spawn_root == null or not is_instance_valid(spawn_root):
|
collect_all_entity_spawn_points(root, spawn_points)
|
||||||
|
if spawn_points.is_empty():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
var spawn_root = root
|
||||||
var root_key: String = _get_static_entity_spawn_key(spawn_root)
|
var root_key: String = _get_static_entity_spawn_key(spawn_root)
|
||||||
if static_entity_spawn_roots.has(root_key):
|
if static_entity_spawn_roots.has(root_key):
|
||||||
var tracked_root = static_entity_spawn_roots[root_key]
|
var tracked_root = static_entity_spawn_roots[root_key]
|
||||||
@@ -882,6 +883,13 @@ func _spawn_entities_for_chunk(root: Node, biome_name: String) -> void:
|
|||||||
spawn_points.shuffle()
|
spawn_points.shuffle()
|
||||||
var spawned_count: int = 0
|
var spawned_count: int = 0
|
||||||
for spawn_point in spawn_points:
|
for spawn_point in spawn_points:
|
||||||
|
var spawn_point_id: int = spawn_point.get_instance_id()
|
||||||
|
if spawned_entity_spawn_points.has(spawn_point_id):
|
||||||
|
var tracked_spawn_point = spawned_entity_spawn_points[spawn_point_id]
|
||||||
|
if is_instance_valid(tracked_spawn_point):
|
||||||
|
continue
|
||||||
|
spawned_entity_spawn_points.erase(spawn_point_id)
|
||||||
|
|
||||||
if spawned_count >= max_entities_per_chunk:
|
if spawned_count >= max_entities_per_chunk:
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -909,6 +917,7 @@ func _spawn_entities_for_chunk(root: Node, biome_name: String) -> void:
|
|||||||
entity_node.global_transform = point_node.global_transform
|
entity_node.global_transform = point_node.global_transform
|
||||||
if "random_y_rotation" in spawn_point and spawn_point.random_y_rotation:
|
if "random_y_rotation" in spawn_point and spawn_point.random_y_rotation:
|
||||||
entity_node.rotate_y(randf() * TAU)
|
entity_node.rotate_y(randf() * TAU)
|
||||||
|
spawned_entity_spawn_points[spawn_point_id] = spawn_point
|
||||||
spawned_count += 1
|
spawned_count += 1
|
||||||
|
|
||||||
func _get_spawn_point_type_filter(spawn_point: Node) -> int:
|
func _get_spawn_point_type_filter(spawn_point: Node) -> int:
|
||||||
@@ -1029,7 +1038,8 @@ func _register_cell_with_ray(grid_pos: Vector2i) -> bool:
|
|||||||
if have_lamppost:
|
if have_lamppost:
|
||||||
_queue_lamppost_wire_connections_around(grid_pos)
|
_queue_lamppost_wire_connections_around(grid_pos)
|
||||||
|
|
||||||
_spawn_entities_for_static_obstacle(root_chunk, grid_pos)
|
var spawn_source = right_info_node if right_info_node != null else root_chunk
|
||||||
|
_spawn_entities_for_static_obstacle(spawn_source, grid_pos)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user