67 lines
1.9 KiB
GDScript
67 lines
1.9 KiB
GDScript
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()
|