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]))