proximity rotation

This commit is contained in:
Rendo 2025-11-13 21:31:06 +05:00
commit 3a6da57079
3 changed files with 23 additions and 12 deletions

View file

@ -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