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)