aboutsummaryrefslogblamecommitdiffstats
path: root/Scripts/scene_control.gd
blob: 0b55d0fc6a80a7e03f8ceef47b4caaed978a469c (plain) (tree)
1
2
3
4



                       





















                                                                          


                                                       
                                     
                                      







                                                       


























                                                
extends Node

class_name SceneControl

@onready var path: Path2D = $DrawNode/TrackPath
@onready var path_follow: PathFollow2D = $DrawNode/TrackPath/TrackFollower
@onready var car = $Car
@onready var checkpoints = $Checkpoints.get_children()
@onready var ui = $UI/Control
@onready var finish_line: Area2D

var is_driving = false
var current_time = 0.0


func _ready():
	finish_line = $FinishLine as Area2D
	finish_line.body_entered.connect(_on_finish_line_body_entered)
	reset_level()

func _physics_process(delta):
	if car.driving:
		current_time += delta
		print(current_time)
		ui.update_timer_label(current_time)


func get_path_direction(pos):
	var offset = path.curve.get_closest_offset(pos)
	path_follow.progress = offset
	return path_follow.transform.x

func get_path_next_position(pos):
	var offset = path.curve.get_closest_offset(pos)
	path_follow.progress = offset + 50
	return path_follow.position

func set_driving(driving: bool):
	car.driving = driving
	is_driving = driving

func reset_level():
	ui.update_timer_label(-1)
	for cp in checkpoints:
		cp.set_was_visited(false)

func start_driving():
	current_time = 0.0
	set_driving(true)

func evaluate_driving():
	for cp in checkpoints:
		if not cp.was_visited:
			return false
	return true


func _on_finish_line_body_entered(node: Node2D):
	if evaluate_driving():
		ui.switch_to_post_game_UI()
	
	set_driving(false)
	reset_level()
	# TODO get this from the start position
	car.global_position = Vector2.ZERO
	car.global_rotation = 0;