Files
SpaceBots/actors/Enemies/Spider/ik_target.gd
2026-01-21 23:40:20 +01:00

37 lines
1.1 KiB
GDScript

extends Marker3D
class_name SpiderIKTarget
@export var step_target: Marker3D
@export var step_distance: float = 1.75
@export var tween_duration: float = 0.45
@export var adjacent_target: SpiderIKTarget
@export var opposite_target: SpiderIKTarget
var spider_body: CharacterBody3D
var is_stepping := false
var can_step : = false
func _ready() -> void:
top_level = true
spider_body = get_parent()
step_distance = step_distance * owner.scale.x
tween_duration = tween_duration * owner.scale.x
func _process(_delta: float) -> void:
if !is_stepping && !adjacent_target.is_stepping && abs(self.global_position.distance_to(step_target.global_position)) >= step_distance:
step()
opposite_target.step()
func step():
var target_pos = step_target.global_position
var half_way = (global_position + step_target.global_position) /2
is_stepping = true
var t = create_tween()
t.tween_property(self,"global_position",half_way + owner.basis.y-Vector3(0,0.45,0)*owner.scale.x,tween_duration / spider_body.velocity.length())
t.tween_property(self,"global_position", target_pos,tween_duration / spider_body.velocity.length())
t.tween_callback(func(): is_stepping = false)