32 lines
1.2 KiB
GDScript
32 lines
1.2 KiB
GDScript
@tool
|
|
extends Node3D
|
|
class_name MechaLeg
|
|
|
|
const STEP_DURATION = 0.15
|
|
signal step
|
|
|
|
@export_node_path("Node3D") var step_target_path : NodePath
|
|
@onready var local_target : Node3D = %LocalTarget
|
|
|
|
@export var step_distance: float = 5
|
|
|
|
@export var can_step = true
|
|
|
|
func _process(_delta):
|
|
if step_target_path and can_step:
|
|
var step_target : Node3D = get_node(step_target_path) as Node3D
|
|
var dist := step_target.global_position.distance_to(local_target.global_position)
|
|
if dist > step_distance:
|
|
step.emit()
|
|
tween_step(get_node(step_target_path).global_position)
|
|
|
|
|
|
func tween_step(target_pos: Vector3):
|
|
var tween = create_tween().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_OUT)
|
|
|
|
tween.set_parallel(true)
|
|
tween.tween_property(local_target, "global_position:x", target_pos.x, STEP_DURATION * 0.7)
|
|
tween.tween_property(local_target, "global_position:z", target_pos.z, STEP_DURATION * 0.7)
|
|
tween.tween_property(local_target, "global_position:y", target_pos.y + 1.5, STEP_DURATION * 0.5)
|
|
tween.set_parallel(false)
|
|
tween.tween_property(local_target, "global_position:y", target_pos.y, STEP_DURATION * 0.3) |