28 lines
818 B
GDScript
28 lines
818 B
GDScript
extends Node
|
|
class_name DirModule
|
|
|
|
# in global coordinates
|
|
@export var target_position: Vector2
|
|
@export var active: bool = false
|
|
@export var offset: float = PI / 2
|
|
|
|
@export var pos_controll: Curve
|
|
@export var pos_factor: float = 1.0
|
|
@export var vel_controll: Curve
|
|
@export var vel_factor: float = 1.0
|
|
|
|
@onready var parent: RigidBody2D = get_parent()
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if not active:
|
|
return
|
|
|
|
var diff := parent.global_position.angle_to_point(target_position) - parent.global_rotation + offset
|
|
while diff < -PI:
|
|
diff += PI * 2
|
|
while diff > PI:
|
|
diff -= PI * 2
|
|
var closeness: float = abs(diff) / PI
|
|
parent.apply_torque_impulse(
|
|
pos_factor * sign(diff) * pos_controll.sample_baked(closeness)
|
|
- vel_factor * sign(parent.angular_velocity) * vel_controll.sample_baked(closeness))
|