@xyz said:
Let's see the actual code.
`func _process(delta):
window_activity()
var softness = 3.0
var cam_basis_last_frame = Basis()
var player_basis_last_frame = Basis()
var cam_basis_this_frame = $CamRoot.transform.basis
var player_basis_this_frame = self.transform.basis
var offset1 = calculate_sway_offset(cam_basis_last_frame, cam_basis_this_frame)
var offset2 = calculate_sway_offset(player_basis_last_frame, player_basis_this_frame)
var offset = Vector2(offset2.x, offset1.y) #may need to swap 1 and 2
do_sway(weaponsway, offset, delta * softness)
cam_basis_last_frame = cam_basis_this_frame;
player_basis_last_frame = player_basis_this_frame;
func calculate_sway_offset(basis_last_frame: Basis, basis_current_frame: Basis):
var q1 = basis_last_frame.get_rotation_quat()
var q2 = basis_current_frame.get_rotation_quat()
var q = q1.inverse() * q2
var eu = q.get_euler()
return Vector2(eu.y, eu.x)
func do_sway(sway_node, offset: Vector2, fract: float):
var offset_quaternion: Quat = Quat(Vector3.UP, offset.x) * Quat(Vector3.RIGHT, offset.y)
sway_node.transform.basis = Basis(Quat(sway_node.transform.basis).slerp(offset_quaternion, fract))
`