spacegame/enemies/dirmodule.gd
2025-03-22 13:32:53 +01:00

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