37 lines
1.1 KiB
Plaintext
37 lines
1.1 KiB
Plaintext
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)
|