| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | class_name TinyPlaneextends RigidBody3D@export var thrust_power: float = 10000.0@export var turn_to_torque: float = 2000.0@export var move_to_pitch: float = 4000.0@export var wing_resistance: float = 10.0@export var lift: float = 500.0var target_torque: float = 0.0var target_pitch: float = 0.0var target_rotation := Vector3.ZEROvar target_thrust := Vector3.ZEROvar _current_commander: LocalInput = nullfunc trigger_thrust(activate: bool) -> void:	if activate:		target_thrust = Vector3.FORWARD * thrust_power	else:		target_thrust = Vector3.ZEROfunc trigger_direction(dir: Vector2) -> void:	target_torque = -dir.x * turn_to_torque	target_pitch = -dir.y * move_to_pitch## Make the vehicle responds to driver commandsfunc drive_with(commander: LocalInput) -> void:	commander.dir_changed.connect(_on_dir_changed)	commander.main_action.connect(_on_main_action)	_current_commander = commanderfunc get_out() -> void:	_current_commander.dir_changed.disconnect(_on_dir_changed)	_current_commander.main_action.disconnect(_on_main_action)func _physics_process(delta: float) -> void:	_apply_plane_rotation()	_apply_plane_thrust()	_apply_wing_resistance()	_apply_lift()func _apply_plane_rotation() -> void:	var torque: Vector3 = transform.basis * Vector3(target_pitch, 0.0, target_torque)	apply_torque(torque)func _apply_plane_thrust() -> void:	var force: Vector3 = transform.basis * target_thrust	apply_central_force(force)func _apply_wing_resistance() -> void:	var vertical_speed = linear_velocity.dot(transform.basis * Vector3.UP)	var local_wing_force = Vector3.UP * -wing_resistance * vertical_speed	var wing_force = transform.basis * local_wing_force	if _current_commander != null:		print("= = =")		print("Vertical speed : ", vertical_speed)		print("Wing force local :", local_wing_force)		print("Wing force : ", wing_force)	apply_central_force(wing_force)func _apply_lift() -> void:	var forward_speed = linear_velocity.dot(transform.basis * Vector3.FORWARD)	if forward_speed < 0.0 :		forward_speed = 0.0	var local_lift_force = Vector3.UP * lift * forward_speed	var lift_force = transform.basis * local_lift_force	if _current_commander != null:		print("- - -")		print("Forward speed : ", forward_speed)		print("Lift force local :", local_lift_force)		print("Lift force : ", lift_force)	apply_central_force(lift_force)func _on_dir_changed(dir: Vector2) -> void:	trigger_direction(dir)func _on_main_action(pressed: bool) -> void:	trigger_thrust(pressed)
 |