X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_ragdoll.h;h=08ab5e75d9ff56ce37129ed4b7ed248d7c3d913e;hb=5bb71fef0e63780f95f403fb14b824778cecbe9b;hp=6f5a33137a8e5a48ef53b21da64d86b1a21555d7;hpb=89b5a93c0fa9b72a14ce17c433127ef646ce338f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_ragdoll.h b/player_ragdoll.h index 6f5a331..08ab5e7 100644 --- a/player_ragdoll.h +++ b/player_ragdoll.h @@ -1,10 +1,15 @@ -#ifndef PLAYER_RAGDOLL_H -#define PLAYER_RAGDOLL_H +#pragma once + +/* + * Copyright (C) 2021-2024 Mt.ZERO Software - All Rights Reserved + * + * Ragdoll system + */ #include "player_api.h" #include "skeleton.h" -#include "rigidbody.h" -#include "player_render.h" +#include "vg/vg_rigidbody.h" +#include "vg/vg_rigidbody_constraints.h" struct player_ragdoll{ struct ragdoll_part{ @@ -20,9 +25,17 @@ struct player_ragdoll{ u32 use_limits; v3f limits[2]; - rb_object obj; u32 parent; u32 colour; + + rigidbody rb; + enum bone_collider type; + + union { + rb_capsule capsule; + boxf box; + } + inf; } parts[32]; u32 part_count; @@ -38,37 +51,21 @@ struct player_ragdoll{ int shoes[2]; }; -static float k_ragdoll_floatyiness = 20.0f, - k_ragdoll_floatydrag = 1.0f, - k_ragdoll_limit_scale = 1.0f, - k_ragdoll_spring = 127.0f, - k_ragdoll_dampening = 15.0f, - k_ragdoll_correction = 0.5f, - k_ragdoll_angular_drag = 0.08f, - k_ragdoll_active_threshold = 5.0f; - -static int k_ragdoll_div = 1, - ragdoll_frame = 0, - k_ragdoll_debug_collider = 1, - k_ragdoll_debug_constraints = 0; - enum player_die_type { k_player_die_type_generic, k_player_die_type_head, k_player_die_type_feet }; -static void player_ragdoll_init(void); -static void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, - struct ragdoll_part *rp ); -static u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id ); -static void setup_ragdoll_from_skeleton( struct skeleton *sk, - struct player_ragdoll *rd ); -static void copy_ragdoll_pose_to_localplayer( struct player_ragdoll *rd ); -static void copy_localplayer_to_ragdoll( struct player_ragdoll *rd, - enum player_die_type type ); - -static void player_debug_ragdoll(void); -static void player_ragdoll_iter( struct player_ragdoll *rd ); - -#endif /* PLAYER_RAGDOLL_H */ +void player_ragdoll_init(void); +void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, + struct ragdoll_part *rp ); +u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id ); +void setup_ragdoll_from_skeleton( struct skeleton *sk, + struct player_ragdoll *rd ); +void copy_ragdoll_pose_to_localplayer( struct player_ragdoll *rd ); +void copy_localplayer_to_ragdoll( struct player_ragdoll *rd, + enum player_die_type type ); + +void player_debug_ragdoll(void); +void player_ragdoll_iter( struct player_ragdoll *rd );