@icon("uid://3ugrjpybrl4e") extends RigidBody3D class_name Boat @export var max_thrust_force: float = 2048*3.0 @export var max_steering: float = 50.0 var steering: float = 0 # steering rudder angle in radians var thrust_force: float = 0 # forward thrust force in Newtons var cam_rotation:Vector3 var is_docked: bool = false var submerged := false func _ready(): add_to_group("boats",true) func _physics_process(delta): ## Code for user-input movement if thrust_force >0.0: apply_central_force(self.global_transform.basis.x.normalized() * Vector3(1, 0, 1) * thrust_force * delta) #apply_torque(Vector3.UP * steering * delta) apply_torque(global_transform.basis.y.normalized() * steering ) # for sideways motion reset_forces() func _process(_delta): if Input.get_action_strength("move_forward") > 0.0: thrust() if Input.get_action_strength("turn_right") > 0.0: steer_right() if Input.get_action_strength("turn_left") > 0.0: steer_left() if Input.get_action_strength("camera_left") > 0.0: cam_rotation += Vector3(0.0,1.0,0.0)*_delta if Input.get_action_strength("camera_right") > 0.0: cam_rotation += Vector3(0.0,-1.0,0.0)*_delta func thrust(_strength:=1.0): if not is_docked: thrust_force = max_thrust_force func steer_right(_strength:=1.0): if not is_docked: steering = -PI * max_steering func steer_left(_strength:=1.0): if not is_docked: steering = PI * max_steering func reset_forces(): thrust_force = 0 steering = 0