extends Node2D const ASTEROID = preload("res://scenes/asteroid.tscn") const FUEL_TANK = preload("res://scenes/fuel_tank.tscn") const STAR_FRAGMENT = preload("res://scenes/star_fragment.tscn") @onready var rocket: Rocket = %Rocket @onready var spawn_timer = %SpawnTimer var noise: Noise @export var delim_value: float = 0.34 @export var fuel_value: float = 0.3#-0.58 @export var star_rarity: float = 0.5#0.1 func _ready(): noise = FastNoiseLite.new() noise.seed = randi() % 1000000 noise.frequency = 0.007 for pod: SpacePod in DataHandler.spawn_pods(): add_child(pod) func _on_spawn_timer_timeout(): spawn_timer.wait_time = 9.5 / max(rocket.velocity.length(), 8) for a in range(-36, 36): var angle = rocket.rotation + (a / 30.0) + (randf() / 25.0) var pos = rocket.position + (Vector2.from_angle(angle) * 420.0) var value = noise.get_noise_2d(pos.x, pos.y) if value > delim_value: if _check_spawn_loc(pos, 13): var asteroid_spawn = ASTEROID.instantiate() asteroid_spawn.position = pos add_child(asteroid_spawn) if value < fuel_value: var rand_pickup = randf() if _check_spawn_loc(pos, 82): if rand_pickup < star_rarity: var star = STAR_FRAGMENT.instantiate() star.position = pos add_child(star) else: var fuel_spawn = FUEL_TANK.instantiate() fuel_spawn.position = pos add_child(fuel_spawn) func _check_spawn_loc(pos: Vector2, radius: int): var shape_rid = PhysicsServer2D.circle_shape_create() PhysicsServer2D.shape_set_data(shape_rid, radius) var params = PhysicsShapeQueryParameters2D.new() params.shape_rid = shape_rid params.transform = Transform2D(0.0, pos) params.collision_mask = 1 # Execute physics queries here... var space_state = get_world_2d().direct_space_state var results = space_state.intersect_shape(params) # Release the shape when done with physics queries. PhysicsServer2D.free_rid(shape_rid) return results.is_empty()