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)