aboutsummaryrefslogblamecommitdiffstats
path: root/Scripts/scene_control.gd
blob: ce3332f105fe86c63f5da7e783bf207383a14f64 (plain) (tree)
1
2
3
4
5
6
7
8
9



                       




                                                                          
                                



                      


                

              








                                                                             




                                     

                                                   


                                                       
                                     
                                      






                                                       
                                            
                             



                                 


                                 
        

                                         


                                                   
        

                          
                          














                                                

                                  


                          







                                 
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 drawing = $DrawNode

var is_driving = false
var current_time = 0.0

var game_control
var start


func _ready():
	game_control = get_tree().root.get_child(0)
	
	$FinishLine/Area2D.body_entered.connect(_on_finish_line_body_entered)
	$UI/Control/PostGameUI/RestartButton.pressed.connect(reset_level)
	$UI/Control/PostGameUI/NextLevelButton.pressed.connect(next_level)
	
	start = $Start as TextureButton
	start.pressed.connect(start_drawing)
	
	reset_level()

func _physics_process(delta):
	if car.driving:
		current_time += delta
		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):
	print('control driving: ' , driving)
	car.driving = driving
	is_driving = driving

func reset_level():
	ui.update_timer_label(-1)
	ui.switch_to_in_game_UI()
	
	$DrawNode.reset()
	
	for cp in checkpoints:
		cp.set_was_visited(false)
	
	car.global_position = start.global_position
	car.global_rotation = start.rotation;
	
	current_time = 0.0
	
	set_driving(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)
		return
	
	set_driving(false)
	reset_level()

func next_level():
	game_control.next_level()


func start_drawing():
	reset_level()
	drawing.start_drawing()