How to correctly create this game_over function?

Godot Version

4.4

Question

I want to reset my game after loosing, if my player misses the next circle he loose and game starts again with same things like before taping it spins, after taping spawns the circle and he is playing as it must be but I can't make it, here is the code

Main

extends Node2D

@onready var orbit_scene := preload("res://Scenes/orbit.tscn")
@onready var orbit_spawner: Node2D = $OrbitSpawner
@onready var player: Player = $Player

var game_started: bool = false
var current_orbit_pos: Vector2
var next_orbit_node: Node2D = null

func start_game():
	game_started = true
	$TapUI.visible = false
	player.set_process(true)
	player.call_deferred("enable_camera")

	
func _ready():
	$TapUI.visible = true
	current_orbit_pos = $Orbit.position
	spawn_next_orbit()
	player.set_orbit_center(current_orbit_pos)

	
func spawn_next_orbit():
	var offset = Vector2(randf_range(-150, 150), -300)
	var next_pos = current_orbit_pos + offset 
	next_orbit_node = spawn_new_orbit(next_pos)
	
func player_landed_on_orbit(pos: Vector2):
	current_orbit_pos = pos
	player.set_orbit_center(current_orbit_pos)
	call_deferred("spawn_next_orbit")
	cleanup_old_orbits()
	
func spawn_new_orbit(pos: Vector2):
	var new_orbit = orbit_scene.instantiate()
	new_orbit.position = pos
	orbit_spawner.add_child(new_orbit)
	return new_orbit

func cleanup_old_orbits():
	for orbit in orbit_spawner.get_children():
		if orbit.position.y > player.global_position.y + 500:
			orbit.queue_free()
			
func _unhandled_input(event):
	if not game_started and (event is InputEventScreenTouch or event is InputEventMouseButton):
		if event.pressed:
			start_game()
			
func game_over():
	$TapUI.visible = true
	game_started = false

	if is_instance_valid(player):
		player.queue_free()

	for orbit in orbit_spawner.get_children():
		orbit.queue_free()

	current_orbit_pos = $Orbit.position
	
	player = preload("res://Scenes/player.tscn").instantiate()
	add_child(player)
	
	player.set_orbit_center(current_orbit_pos)
	player.global_position = current_orbit_pos + Vector2(player.orbit_radius, 0).rotated(player.orbit_angle)
	player.set_process(true)

In reality I just forgot to add this line

spawn_next_orbit()

in game_over func so it was broken but now it works fine .

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.