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.
 
 
 
 
 

94 lines
2.6 KiB

extends VehicleBody
export var MAX_SPEED = 200.0
export var MAX_ENGINE_FORCE = 100.0
export var MAX_BRAKE_FORCE = 15.0
export var MAX_STEER_ANGLE = 0.5
export var steer_speed = 0.5
export var brake_factor = 0.1
puppet var slave_transform = Transform()
puppet var slave_velocity = Vector3()
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
func _physics_process(delta):
if (is_network_master()):
var current_speed_mps = get_linear_velocity().length()
var current_speed_kph = floor(current_speed_mps * 3.6)
get_node("HUD/speed").text = String(current_speed_kph) + " kph"
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
engine_force = throttle_val * MAX_ENGINE_FORCE
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
steering = steer_angle
rset_unreliable("slave_transform", get_global_transform())
rset_unreliable("slave_velocity", get_linear_velocity())
rset_unreliable("slave_steering", steer_angle)
else:
set_global_transform(slave_transform)
set_linear_velocity(slave_velocity)
steering = slave_steering
func set_color(new_color):
for i in range(get_node("body").get_surface_count()):
var material = get_node("body").surface_get_material(i)
var albedo = material.get_shader_param("albedo")
albedo.color = new_color