4 * Copyright (C) 2021-2024 Mt.ZERO Software - All Rights Reserved
9 #include "player_api.h"
11 #include "vg/vg_rigidbody.h"
12 #include "vg/vg_rigidbody_constraints.h"
13 #include "player_render.h"
15 struct player_ragdoll
{
19 /* Collider transform relative to bone */
33 enum bone_collider type
;
44 rb_constr_pos position_constraints
[32];
45 u32 position_constraints_count
;
47 rb_constr_swingtwist cone_constraints
[32];
48 u32 cone_constraints_count
;
50 /* TODO: Fix duplicated data */
51 u32 constraint_associations
[32][2];
55 static float k_ragdoll_floatyiness
= 20.0f
,
56 k_ragdoll_floatydrag
= 1.0f
,
57 k_ragdoll_limit_scale
= 1.0f
,
58 k_ragdoll_spring
= 127.0f
,
59 k_ragdoll_dampening
= 15.0f
,
60 k_ragdoll_correction
= 0.5f
,
61 k_ragdoll_angular_drag
= 0.08f
,
62 k_ragdoll_active_threshold
= 5.0f
;
64 static int k_ragdoll_div
= 1,
66 k_ragdoll_debug_collider
= 1,
67 k_ragdoll_debug_constraints
= 0;
69 enum player_die_type
{
70 k_player_die_type_generic
,
71 k_player_die_type_head
,
72 k_player_die_type_feet
75 static void player_ragdoll_init(void);
76 static void player_init_ragdoll_bone_collider( struct skeleton_bone
*bone
,
77 struct ragdoll_part
*rp
);
78 static u32
ragdoll_bone_parent( struct player_ragdoll
*rd
, u32 bone_id
);
79 static void setup_ragdoll_from_skeleton( struct skeleton
*sk
,
80 struct player_ragdoll
*rd
);
81 static void copy_ragdoll_pose_to_localplayer( struct player_ragdoll
*rd
);
82 static void copy_localplayer_to_ragdoll( struct player_ragdoll
*rd
,
83 enum player_die_type type
);
85 static void player_debug_ragdoll(void);
86 static void player_ragdoll_iter( struct player_ragdoll
*rd
);