update helpers/location to 'frosted' ui
[carveJwlIkooP6JGAAIwe30JlM.git] / player_ragdoll.h
index 0afc330486d6be8e96bd82790a5b5dc9746ebff8..08ab5e75d9ff56ce37129ed4b7ed248d7c3d913e 100644 (file)
@@ -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;
@@ -33,35 +46,26 @@ struct player_ragdoll{
    rb_constr_swingtwist cone_constraints[32];
    u32                  cone_constraints_count;
 
+   /* TODO: Fix duplicated data */
+   u32 constraint_associations[32][2];
    int shoes[2];
 };
 
-static float k_ragdoll_floatyiness = 20.0f,
-                k_ragdoll_floatydrag  = 1.0f,
-                k_ragdoll_limit_scale = 1.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 );