mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-28 13:27:10 +01:00
30 lines
915 B
GDScript3
30 lines
915 B
GDScript3
|
# Calculates angular acceleration to rotate a target to face its target's
|
||
|
# position. The behavior attemps to arrive with zero remaining angular velocity.
|
||
|
class_name GSAIFace
|
||
|
extends GSAIMatchOrientation
|
||
|
|
||
|
|
||
|
func _init(agent: GSAISteeringAgent, target: GSAIAgentLocation, use_z := false).(
|
||
|
agent, target, use_z
|
||
|
) -> void:
|
||
|
pass
|
||
|
|
||
|
|
||
|
func _face(acceleration: GSAITargetAcceleration, target_position: Vector3) -> void:
|
||
|
var to_target := target_position - agent.position
|
||
|
var distance_squared := to_target.length_squared()
|
||
|
|
||
|
if distance_squared < agent.zero_linear_speed_threshold:
|
||
|
acceleration.set_zero()
|
||
|
else:
|
||
|
var orientation = (
|
||
|
GSAIUtils.vector3_to_angle(to_target)
|
||
|
if use_z
|
||
|
else GSAIUtils.vector2_to_angle(GSAIUtils.to_vector2(to_target))
|
||
|
)
|
||
|
_match_orientation(acceleration, orientation)
|
||
|
|
||
|
|
||
|
func _calculate_steering(acceleration: GSAITargetAcceleration) -> void:
|
||
|
_face(acceleration, target.position)
|