extends Resource class_name SpawnPattern @export var min_distance: int @export var max_distance: int @export var min_spread: int @export var quantity: int @export var cluster_size: int func get_spawn_locations() -> Array[Vector2i]: var spawns: Array[Vector2i] = [] var clusters: Array[Vector2] = [] for cluster_i in range(quantity): var cluster var is_valid_cluster := false while not is_valid_cluster: is_valid_cluster = true var dist = randf_range(min_distance, max_distance) var angle = randf_range(0, 2*PI) cluster = Vector2.RIGHT.rotated(angle) cluster *= dist for old_cluster: Vector2 in clusters: is_valid_cluster = is_valid_cluster and old_cluster.distance_to(cluster) > min_spread clusters.append(cluster) var local_spawns = [Vector2i(cluster)] for point in range(cluster_size - 1): var next = local_spawns.pick_random() while local_spawns.has(next): var next_change = [Vector2i.LEFT, Vector2i.RIGHT, Vector2i.UP, Vector2i.DOWN].pick_random() next = next + next_change local_spawns.append(next) spawns.append_array(local_spawns) return spawns