Move cyclic stick visually
This commit is contained in:
parent
c83135a67b
commit
ab91016524
2 changed files with 18 additions and 8 deletions
|
|
@ -1,19 +1,30 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
@onready var connector = $MarshConnector
|
## Rotation of cyclic stick model for full control deflection, in degrees
|
||||||
@onready var skeleton = $"Mi-2/Armature/Skeleton3D"
|
@export var range_cyclic: float = 30
|
||||||
@onready var attitude_root = $AttitudeRoot
|
|
||||||
|
@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_cg: int = skeleton.find_bone("BodyCG")
|
||||||
|
@onready var bone_cyclic: int = skeleton.find_bone("Cyclic")
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
var target: Transform3D = connector.get_aircraft()
|
var target := connector.get_aircraft()
|
||||||
position = target.origin
|
position = target.origin
|
||||||
|
|
||||||
# Add the rotation to the bone
|
# Add the rotation to the correct bone for rotation around CG
|
||||||
var rest = skeleton.get_bone_rest(bone_cg).basis.get_rotation_quaternion()
|
var rest := skeleton.get_bone_rest(bone_cg).basis.get_rotation_quaternion()
|
||||||
var attitude = target.basis.get_rotation_quaternion()
|
var attitude := target.basis.get_rotation_quaternion()
|
||||||
skeleton.set_bone_pose_rotation(bone_cg, attitude * rest)
|
skeleton.set_bone_pose_rotation(bone_cg, attitude * rest)
|
||||||
|
|
||||||
# Rotate other children (not using BoneAttachment3D due to jitter)
|
# Rotate other children (not using BoneAttachment3D due to jitter)
|
||||||
attitude_root.rotation = target.basis.get_euler()
|
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)
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,5 @@ transform = Transform3D(0.707107, 0.683013, -0.183013, 0, 0.258819, 0.965926, 0.
|
||||||
|
|
||||||
[node name="StartVR" type="Node3D" parent="."]
|
[node name="StartVR" type="Node3D" parent="."]
|
||||||
script = ExtResource("1_ig7tw")
|
script = ExtResource("1_ig7tw")
|
||||||
maximum_refresh_rate = 144
|
|
||||||
|
|
||||||
[node name="Aircraft" parent="." instance=ExtResource("2_0xm2m")]
|
[node name="Aircraft" parent="." instance=ExtResource("2_0xm2m")]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue