extends MeshInstance class_name Road export var end_rotation_axis:Vector3 = Vector3(0,0,0) export var end_rotation_phi:float = 0.0 export var first_speed_factor:float = 1.0 export var creator_speed_factor:float = 1.0 export var chasers_speed_factor:float = 1.0 export var reset_index:int = 0 export (PoolVector3Array) var speed_constrains = PoolVector3Array() export (PoolVector3Array) var force_penalties = PoolVector3Array() export (PoolVector3Array) var torque_penalties = PoolVector3Array() var creator:String = "" var preview:bool = false func _ready(): if not has_node("StaticBody"): var body = StaticBody.new() body.set_name("StaticBody") var shape = CollisionShape.new() shape.set_name("CollisionShape") shape.shape = mesh.create_trimesh_shape() body.add_child(shape) add_child(body) func get_creator(): return creator func set_creator(new_creator): creator = str(new_creator) # Artist TODO: func set_color(new_color): pass func get_path(): return get_node("Path") func get_curve(): return get_path().get_curve() func get_lane_curve(lane:int): if has_node("lanes"): return get_node("lanes").get_child(lane).get_curve() else: return get_path().get_curve() func get_end_rotation_axis(): return end_rotation_axis func get_end_rotation_phi(): return end_rotation_phi func set_preview(prev): preview = prev if prev: set_material_override(SpatialMaterial.new()) else: set_material_override(null) func is_preview(): return preview func get_next_lane(lane): return lane func penalty_index(distance:float, speed:float): for index in range(speed_constrains.size()): var constrain = speed_constrains[index] if constrain.x <= distance && constrain.y >= distance: if constrain.z < 0 && speed < constrain.z * -1 || constrain.z > 0 && speed > constrain.z: return index return -1 func get_torque_penalty(index:int): if index >= 0: while torque_penalties.size() < (index + 1): index-=1 return torque_penalties[index] return Vector3(0,0,0) func get_force_penalty(index:int): if index >= 0: while force_penalties.size() < (index + 1): index-=1 return force_penalties[index] return Vector3(0,0,0)