extends StaticBody2D # constants ## acceleration of the car while holding the accelerate button @export var acc := 600. ## acceleration of the car while driving backwards @export var rev := 500. ## natural deceleration of the car @export var dec := 400. ## maximum speed of the car @export var max_speed := 1200. ## maximum speed of the car while driving backwards @export var max_reverse := 500. ## how many radians the car turns per second, higher value -> faster turns @export var turn_speed := 1. ## affects how fast the brakes, higher value -> quicker to stand still @export var brake_strength := 30. ## regulates how much more you can turn while breaking, values below 1 mean you can turn worse while drifting @export var drift_factor := 1.5 ## maximum number of pixels how far the camera looks ahead of the player (affected by speed) @export var camera_offset = 400. # references @export var camera : Camera2D # variables var momentum: Vector2 #var direction = 0 # 1 for forward, 0 for standing still, -1 for reverse # Called when the node enters the scene tree for the first time. func _ready(): pass # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): var acc_d = acc * delta var dec_d = dec * delta var rev_d = rev * delta var turn_d = turn_speed * delta var brake_d = brake_strength * delta var turn_factor = 1 if momentum.length() > dec_d: momentum -= momentum.normalized()*dec_d else: momentum = Vector2(0,0) if Input.is_action_pressed("accelerate"): momentum += acc_d * Vector2(1,0).rotated(rotation) # if Input.is_action_pressed("reverse"): # print_debug("reverse vector: ", rev_d * Vector2(-1,0).rotated(rotation)) # momentum += rev_d * Vector2(-1,0).rotated(rotation) # print_debug("momentum vector = ", momentum) if Input.is_action_pressed("brake"): turn_factor = drift_factor if momentum.length() > brake_d: momentum -= momentum.normalized() * brake_d else: momentum = Vector2(0,0) if Input.is_action_pressed("left"): rotate(turn_d*turn_factor*-1) if Input.is_action_pressed("right"): rotate(turn_d*turn_factor) if !Input.is_action_pressed("brake"): momentum = Vector2(1,0).rotated(rotation) * momentum.length() camera.position = Vector2((momentum.length() / max_speed) * camera_offset, 0) camera.rotation_degrees = momentum.angle() + 90 if momentum.length() > max_speed: momentum = momentum.normalized() * max_speed move_and_collide(momentum * delta)