diff --git a/project/aircraft/aircraft.gd b/project/aircraft/aircraft.gd index f8c9918..a3285cd 100644 --- a/project/aircraft/aircraft.gd +++ b/project/aircraft/aircraft.gd @@ -1,19 +1,30 @@ extends Node3D -@onready var connector = $MarshConnector -@onready var skeleton = $"Mi-2/Armature/Skeleton3D" -@onready var attitude_root = $AttitudeRoot +## Rotation of cyclic stick model for full control deflection, in degrees +@export var range_cyclic: float = 30 + +@onready var connector: MarshConnector = $MarshConnector +@onready var skeleton: Skeleton3D = $"Mi-2/Armature/Skeleton3D" +@onready var attitude_root: Node3D = $AttitudeRoot @onready var bone_cg: int = skeleton.find_bone("BodyCG") +@onready var bone_cyclic: int = skeleton.find_bone("Cyclic") func _process(_delta: float) -> void: - var target: Transform3D = connector.get_aircraft() + var target := connector.get_aircraft() position = target.origin - # Add the rotation to the bone - var rest = skeleton.get_bone_rest(bone_cg).basis.get_rotation_quaternion() - var attitude = target.basis.get_rotation_quaternion() + # Add the rotation to the correct bone for rotation around CG + var rest := skeleton.get_bone_rest(bone_cg).basis.get_rotation_quaternion() + var attitude := target.basis.get_rotation_quaternion() skeleton.set_bone_pose_rotation(bone_cg, attitude * rest) # Rotate other children (not using BoneAttachment3D due to jitter) attitude_root.rotation = target.basis.get_euler() + + # Rotate the cyclic stick bone + var cyclic := connector.get_cyclic() + var cyc_rest := skeleton.get_bone_rest(bone_cyclic).basis.get_rotation_quaternion() + var cyc_angles_rad := cyclic * deg_to_rad(range_cyclic) + var cyc_att := Quaternion.from_euler(Vector3(cyc_angles_rad.y, cyc_angles_rad.x, 0)) + skeleton.set_bone_pose_rotation(bone_cyclic, cyc_att * cyc_rest) diff --git a/project/main.tscn b/project/main.tscn index 9b40194..60db560 100644 --- a/project/main.tscn +++ b/project/main.tscn @@ -22,6 +22,5 @@ transform = Transform3D(0.707107, 0.683013, -0.183013, 0, 0.258819, 0.965926, 0. [node name="StartVR" type="Node3D" parent="."] script = ExtResource("1_ig7tw") -maximum_refresh_rate = 144 [node name="Aircraft" parent="." instance=ExtResource("2_0xm2m")]