-#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{
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;
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 );