proximity rotation
This commit is contained in:
parent
4525ab50ff
commit
3a6da57079
3 changed files with 23 additions and 12 deletions
|
|
@ -1,23 +1,26 @@
|
|||
extends Node
|
||||
|
||||
@export var rotated: Node3D
|
||||
@export var proximity_radius: float
|
||||
@onready var start_rotation = rotated.quaternion
|
||||
var reiciever: InteractionReciever
|
||||
var reciever: InteractionReciever
|
||||
|
||||
func _on_interaction_area_interaction_reciever_entered(reicever: InteractionReciever) -> void:
|
||||
if self.reicever == null:
|
||||
self.reciever = reicever
|
||||
func _on_interaction_area_interaction_reciever_entered(rec: InteractionReciever) -> void:
|
||||
if reciever == null:
|
||||
reciever = rec
|
||||
|
||||
|
||||
func _on_interaction_area_interaction_reciever_exited(reicever: InteractionReciever) -> void:
|
||||
if self.reicever == reicever:
|
||||
self.reciever = null
|
||||
func _on_interaction_area_interaction_reciever_exited(rec: InteractionReciever) -> void:
|
||||
if reciever == rec:
|
||||
reciever = null
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if reiciever == null:
|
||||
if reciever == null:
|
||||
rotated.quaternion = start_rotation
|
||||
return
|
||||
|
||||
var camera: Camera3D = get_viewport().get_camera_3d()
|
||||
var angle_to: Quaternion = Quaternion(-camera.basis.z,1.5707963267948966)
|
||||
var calculated_angle: Quaternion = start_rotation.slerp()
|
||||
var rotation_direction : float = -sign(camera.basis.x.dot(reciever.global_position - rotated.global_position))
|
||||
var result_quaternion: Quaternion = Quaternion(-camera.basis.z,PI + 1.5707963267948966 * rotation_direction)
|
||||
var calculated_angle: Quaternion = start_rotation.slerp(result_quaternion,clamp(proximity_radius/rotated.global_position.distance_to(reciever.global_position),0,1))
|
||||
rotated.quaternion = calculated_angle
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue