You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.8 KiB
105 lines
2.8 KiB
extends Player
|
|
|
|
export var MAX_SPEED = 40.0
|
|
export var MAX_ENGINE_FORCE = 40.0
|
|
export var MAX_BRAKE_FORCE = 7.0
|
|
export var MAX_STEER_ANGLE = 0.7
|
|
|
|
export var steer_speed = 1.0
|
|
export var brake_factor = 0.1
|
|
|
|
puppet var slave_steering = 0.0
|
|
|
|
var steer_target = 0.0
|
|
var steer_angle = 0.0
|
|
|
|
var had_throttle_or_brake_input = false
|
|
var is_reverse = false
|
|
var race_car
|
|
|
|
const start_offset_x = [-0.17257, 0.17257, -0.17257, 0.17257 ]
|
|
const start_offset_z = [1.70223, 1.20223, 0.702227, 0.202227 ]
|
|
|
|
func _ready():
|
|
race_car = get_race_car()
|
|
if is_network_master():
|
|
var camera = InterpolatedCamera.new()
|
|
camera.set_target_path("../raceCar/CameraTarget")
|
|
camera.set_interpolation_enabled(true)
|
|
camera.set_speed(10)
|
|
add_child(camera)
|
|
|
|
func _physics_process(delta):
|
|
if (is_network_master()):
|
|
var current_speed_mps = race_car.get_linear_velocity().length()
|
|
var current_speed_kph = floor(current_speed_mps * 3.6)
|
|
|
|
var steer_val = 0.0
|
|
var throttle_val = 0.0
|
|
var brake_val = 0.0
|
|
|
|
if (throttle_val < 0.0):
|
|
throttle_val = 0.0
|
|
|
|
if (brake_val < 0.0):
|
|
brake_val = 0.0
|
|
|
|
# overrules for keyboard
|
|
if Input.is_action_pressed("ui_up") && current_speed_kph <= MAX_SPEED:
|
|
throttle_val = 1.0
|
|
if Input.is_action_pressed("ui_down"):
|
|
brake_val = 1.0
|
|
if Input.is_action_pressed("ui_left"):
|
|
steer_val = 1.0
|
|
elif Input.is_action_pressed("ui_right"):
|
|
steer_val = -1.0
|
|
|
|
# check if we need to be in reverse
|
|
if (had_throttle_or_brake_input == false and brake_val > 0.0 and current_speed_mps < 1.0):
|
|
had_throttle_or_brake_input = true
|
|
is_reverse = true
|
|
elif (throttle_val > 0.0 or brake_val > 0.0):
|
|
had_throttle_or_brake_input = true
|
|
else:
|
|
is_reverse = false
|
|
had_throttle_or_brake_input = false
|
|
|
|
if (is_reverse):
|
|
var swap = throttle_val
|
|
throttle_val = -brake_val
|
|
brake_val = -swap
|
|
elif (throttle_val == 0.0 and brake_val == 0.0 and current_speed_mps < 3.0):
|
|
brake_val = brake_factor
|
|
|
|
race_car.engine_force = throttle_val * MAX_ENGINE_FORCE
|
|
race_car.brake = brake_val * MAX_BRAKE_FORCE
|
|
|
|
steer_target = steer_val * MAX_STEER_ANGLE
|
|
if (steer_target < steer_angle):
|
|
steer_angle -= steer_speed * delta
|
|
if (steer_target > steer_angle):
|
|
steer_angle = steer_target
|
|
elif (steer_target > steer_angle):
|
|
steer_angle += steer_speed * delta
|
|
if (steer_target < steer_angle):
|
|
steer_angle = steer_target
|
|
|
|
race_car.steering = steer_angle
|
|
|
|
rset_unreliable("slave_steering", steer_angle)
|
|
else:
|
|
race_car.steering = slave_steering
|
|
|
|
func get_race_car():
|
|
return get_node("raceCar")
|
|
|
|
func get_road():
|
|
return get_race_car().road
|
|
|
|
func _on_raceCar_road_entered(road):
|
|
road_index = road.get_index()
|
|
position = Vector2(road_index, 0)
|
|
rset("slave_position", position)
|
|
|
|
func set_start(position:int):
|
|
get_race_car().translate(Vector3(start_offset_x[position], 0, start_offset_z[position]))
|