SchildDerStaerke/scripts/skeleton.gd

45 lines
1.4 KiB
GDScript

extends CharacterBody3D
class_name Skeleton
@export var speed := 4.0
@export var acceleration := 4.0
@export var jump_speed := 8.0
@export var nearest_player : CharacterBody3D
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
var jumping := false
var attacks := ["Unarmed_Melee_Attack_Punch_A","Unarmed_Melee_Attack_Punch_A 2","Unarmed_Melee_Attack_Punch_B"]
var last_floor := true
var map_ready := false
@onready var model := $Rig
@onready var anim_tree := $AnimationTree
@onready var anim_state = $AnimationTree.get("parameters/playback")
@onready var nav_agent: NavigationAgent3D = $NavigationAgent3D
func _physics_process(delta: float) -> void:
set_movement_target(nearest_player.position)
if nav_agent.is_navigation_finished():
return
var next_path_position: Vector3 = nav_agent.get_next_path_position()
model.look_at(next_path_position)
var new_velocity: Vector3 = global_position.direction_to(next_path_position) * speed
if nav_agent.avoidance_enabled:
nav_agent.set_velocity(new_velocity)
else:
_on_velocity_computed(new_velocity)
func _on_velocity_computed(safe_velocity: Vector3):
velocity = safe_velocity
var vy = velocity.y
velocity.y = 0
var vl = velocity * model.transform.basis
anim_tree.set("parameters/IWR/blend_position", Vector2(vl.x, -vl.z) / speed)
velocity.y = vy
move_and_slide()
func set_movement_target(movement_target: Vector3):
nav_agent.set_target_position(movement_target)