Public repository for MUR pre alpha
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

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