class_name BaseTrackLevel extends Spatial const CAMERA_CONTROLLER = preload("res://player/cameras/camera_controller.gd") const PLAYER_CONTROLLER = preload("res://player/vehicle_controller.gd") var player_node: BuggedVehicle var gui: Node var camera_controller: CameraController var player_controller: PlayerVehicleController var ready = false onready var track = $Track func _ready() -> void: if player_node != null: _spawn_in_player() ready = true func spawn_player(player_node: BuggedVehicle, gui: Node) -> void: self.player_node = player_node self.gui = gui if ready: _spawn_in_player() func spawn_vehicle(vehicle: BuggedVehicle) -> void: vehicle.connect("position_updated", track, "_on_player_position_updated") reset_player_to(track.get_furthest_checkpoint(), vehicle) add_child(vehicle) func remove_player(peer_id: String) -> void: get_node(peer_id).queue_free() func reset_player_to(node_to_reset_to: Node, player_node: BuggedVehicle) -> void: player_node.reset_transform = node_to_reset_to.global_transform.looking_at( node_to_reset_to.global_transform.translated( node_to_reset_to.global_transform.basis.z ).origin, node_to_reset_to.global_transform.basis.y ) player_node.reset_transform.origin += node_to_reset_to.global_transform.basis.y * 2 func _spawn_in_player(): reset_player_to(track.get_furthest_checkpoint(), player_node) player_node.connect("position_updated", track, "_on_player_position_updated") add_child(player_node) add_child(gui) player_controller = PLAYER_CONTROLLER.new() player_controller.input_sink_path = player_node.get_path() player_node.add_child(player_controller) camera_controller = CAMERA_CONTROLLER.new() camera_controller.attach_cameras_to(player_node) func _process(_delta: float) -> void: if Input.is_action_just_released("reset_vehicle"): reset_player_to(track.get_furthest_checkpoint(), player_node) if Input.is_action_just_released("next_camera"): camera_controller.next_camera() camera_controller.update_camera( ( Input.get_action_strength("turn_camera_right") - Input.get_action_strength("turn_camera_left") ), Input.get_action_strength("turn_camera_up") - Input.get_action_strength("turn_camera_down"), Input.is_action_pressed("look_backwards") ) func _on_ResetArea_body_entered(body: Node) -> void: if body.get_groups().has("car"): reset_player_to(track.get_furthest_checkpoint(), body)