WIP: Damage/frag system is implemented without ragdolls
This commit is contained in:
39
scenes/_test/ragdoll/animated_skel.gd
Normal file
39
scenes/_test/ragdoll/animated_skel.gd
Normal file
@ -0,0 +1,39 @@
|
||||
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()
|
13
scenes/_test/ragdoll/character.gd
Normal file
13
scenes/_test/ragdoll/character.gd
Normal file
@ -0,0 +1,13 @@
|
||||
extends Node3D
|
||||
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
$"Y-Bot/AnimationPlayer".play("T-Pose")
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
31
scenes/_test/ragdoll/physics_man_skel.gd
Normal file
31
scenes/_test/ragdoll/physics_man_skel.gd
Normal file
@ -0,0 +1,31 @@
|
||||
extends Skeleton3D
|
||||
|
||||
@onready var physical_bone_sim = $PhysicalBoneSimulator3D
|
||||
var physics_bones: Array[Node]
|
||||
@export var target_skeleton: Skeleton3D = null
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
|
||||
func _ready() -> void:
|
||||
physics_bones = physical_bone_sim.get_children().filter(func(x): return x is PhysicalBone3D)
|
||||
physical_bone_sim.physical_bones_start_simulation()
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
func die() -> void:
|
||||
for b: PhysicalBone3D in physics_bones:
|
||||
#var target_transforms: Vector3 = target_skeleton.global_position * target_skeleton.get_bone_global_pose(b.get_bone_id())
|
||||
b.global_position = target_skeleton.to_global(target_skeleton.get_bone_global_pose(b.get_bone_id()).origin)
|
||||
#var current_transforn: Transform3D = global_transform * get_bone_global_pose(b.get_bone_id())
|
||||
#var position_difference: Vector3 = target_transforms.origin - current_transforn.origin
|
||||
#var force: Vector3 = hookes_law(position_difference, b.linear_velocity, 200.0, 40.0)
|
||||
#b.linear_velocity += force * delta
|
||||
#
|
||||
#var rotation_difference: Basis = target_transforms.basis * current_transforn.basis.inverse()
|
||||
#var torgue = hookes_law(rotation_difference.get_euler(), b.angular_velocity, 200.0, 40.0)
|
||||
#b.angular_velocity += torgue * delta
|
||||
|
||||
func hookes_law(dis: Vector3, cur_vel: Vector3, stif: float, damp: float):
|
||||
return (stif * dis) - (damp * cur_vel)
|
12
scenes/_test/ragdoll/skeleton_3d.gd
Normal file
12
scenes/_test/ragdoll/skeleton_3d.gd
Normal file
@ -0,0 +1,12 @@
|
||||
extends Skeleton3D
|
||||
|
||||
@export var target_skeleton: Skeleton3D
|
||||
var physical_bones
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
31
scenes/_test/ragdoll/test_ragdoll.tscn
Normal file
31
scenes/_test/ragdoll/test_ragdoll.tscn
Normal file
@ -0,0 +1,31 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://c3h6gm254tuoc"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/_test/ragdoll/animated_skel.gd" id="2_14gej"]
|
||||
[ext_resource type="PackedScene" uid="uid://dgb3r24su3er2" path="res://scenes/characters/base/base.tscn" id="2_vodd8"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_vwp6f"]
|
||||
height = 1.6
|
||||
|
||||
[node name="TestRagdoll" type="Node3D"]
|
||||
|
||||
[node name="Body" type="CharacterBody3D" parent="."]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1.33032, 1.47238, 0)
|
||||
collision_layer = 2
|
||||
script = ExtResource("2_14gej")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"]
|
||||
transform = Transform3D(1.06005, 0, 0, 0, 1.06005, 0, 0, 0, 1.06005, 0, 0.799564, 0)
|
||||
shape = SubResource("CapsuleShape3D_vwp6f")
|
||||
|
||||
[node name="Base" parent="Body" instance=ExtResource("2_vodd8")]
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||
use_collision = true
|
||||
collision_layer = 17
|
||||
size = Vector3(10, 0.5, 10)
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.16491, 0.986309, 0, -0.986309, 0.16491, 0, 3.4524, 0)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(0.999981, -0.00165754, 0.00588508, 0.00118019, 0.996777, 0.0802076, -0.00599906, -0.0801992, 0.996761, 1.27162, 2.37388, 2.16416)
|
Reference in New Issue
Block a user