40 lines
1.6 KiB
GDScript
40 lines
1.6 KiB
GDScript
extends CharacterBody3D
|
|
|
|
|
|
const SPEED = 5.0
|
|
const JUMP_VELOCITY = 4.5
|
|
var physics_bones: Array[Node]
|
|
|
|
func _ready() -> void:
|
|
var anim: AnimationPlayer = $Base/model/AnimationPlayer
|
|
anim.play("riffle_idle")
|
|
var skel_ph: PhysicalBoneSimulator3D = $Base/model/Body/Skeleton3D/PhysicalBoneSimulator3D
|
|
physics_bones = skel_ph.get_children().filter(func(x): return x is PhysicalBone3D)
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if Input.is_action_just_pressed("jump"):
|
|
var anim: AnimationPlayer = $Base/model/AnimationPlayer
|
|
anim.stop()
|
|
|
|
var skel_ph: PhysicalBoneSimulator3D = $Base/model/Body/Skeleton3D/PhysicalBoneSimulator3D
|
|
var target_skeleton = $Base/model/Body/Skeleton3D
|
|
for b: PhysicalBone3D in physics_bones:
|
|
#var target_transforms: Vector3 = target_skeleton.global_position * target_skeleton.get_bone_global_pose(b.get_bone_id())
|
|
print(target_skeleton.to_global(target_skeleton.get_bone_global_pose(b.get_bone_id()).origin))
|
|
b.global_position = target_skeleton.to_global(target_skeleton.get_bone_global_pose(b.get_bone_id()).origin)
|
|
skel_ph.physical_bones_start_simulation()
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
for b: PhysicalBone3D in physics_bones:
|
|
var target_skeleton = $Base/model/Body/Skeleton3D
|
|
#var target_transforms: Vector3 = target_skeleton.global_position * target_skeleton.get_bone_global_pose(b.get_bone_id())
|
|
print(target_skeleton.to_global(target_skeleton.get_bone_global_pose(b.get_bone_id()).origin))
|
|
b.global_position = target_skeleton.to_global(target_skeleton.get_bone_global_pose(b.get_bone_id()).origin)
|
|
|
|
# Add the gravity.
|
|
if not is_on_floor():
|
|
velocity += get_gravity() * delta
|
|
|
|
move_and_slide()
|