]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - progs.h
qdefs: Define separate FLOAT_ and DOUBLE_ versions of lossless format and true for...
[xonotic/darkplaces.git] / progs.h
diff --git a/progs.h b/progs.h
index cf0239bfca46bb0ead7adc9241b8e698a8067f6e..466521a7530cdc1cc3cd1f7e9b6a53e073c7c65b 100644 (file)
--- a/progs.h
+++ b/progs.h
@@ -21,24 +21,74 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef PROGS_H
 #define PROGS_H
 #include "pr_comp.h"                   // defs shared with qcc
+#include "qtypes.h"
+
 
 #define ENTITYGRIDAREAS 16
 #define MAX_ENTITYCLUSTERS 16
 
+#ifdef PRVM_64
+#define PRVM_FLOAT_IS_TRUE_FOR_INT(x) DOUBLE_IS_TRUE_FOR_INT(x)
+#define PRVM_FLOAT_LOSSLESS_FORMAT DOUBLE_LOSSLESS_FORMAT
+#define PRVM_VECTOR_LOSSLESS_FORMAT DOUBLE_VECTOR_LOSSLESS_FORMAT
+#else
+#define PRVM_FLOAT_IS_TRUE_FOR_INT(x) FLOAT_IS_TRUE_FOR_INT(x)
+#define PRVM_FLOAT_LOSSLESS_FORMAT FLOAT_LOSSLESS_FORMAT
+#define PRVM_VECTOR_LOSSLESS_FORMAT FLOAT_VECTOR_LOSSLESS_FORMAT
+#endif
+
+#ifdef USEODE
+#define        GEOMTYPE_NONE      -1
+#define        GEOMTYPE_SOLID      0
+#define        GEOMTYPE_BOX            1
+#define        GEOMTYPE_SPHERE         2
+#define        GEOMTYPE_CAPSULE        3
+#define        GEOMTYPE_TRIMESH        4
+#define        GEOMTYPE_CYLINDER       5
+#define        GEOMTYPE_CAPSULE_X      6
+#define        GEOMTYPE_CAPSULE_Y      7
+#define        GEOMTYPE_CAPSULE_Z      8
+#define        GEOMTYPE_CYLINDER_X     9
+#define        GEOMTYPE_CYLINDER_Y     10
+#define        GEOMTYPE_CYLINDER_Z     11
+
+#define JOINTTYPE_NONE      0
+#define JOINTTYPE_POINT     1
+#define JOINTTYPE_HINGE     2
+#define JOINTTYPE_SLIDER    3
+#define JOINTTYPE_UNIVERSAL 4
+#define JOINTTYPE_HINGE2    5
+#define JOINTTYPE_FIXED    -1
+
+#define FORCETYPE_NONE       0
+#define FORCETYPE_FORCE      1
+#define FORCETYPE_FORCEATPOS 2
+#define FORCETYPE_TORQUE     3
+
+#define ODEFUNC_ENABLE         1
+#define ODEFUNC_DISABLE                2
+#define ODEFUNC_FORCE       3
+#define ODEFUNC_TORQUE      4
+
+typedef struct edict_odefunc_s
+{
+       int type;
+       vec3_t v1;
+       vec3_t v2;
+       struct edict_odefunc_s *next;
+}edict_odefunc_t;
+#endif
+
 typedef struct edict_engineprivate_s
 {
-       // true if this edict is unused
-       qboolean free;
-       // sv.time when the object was freed (to prevent early reuse which could
-       // mess up client interpolation or obscure severe QuakeC bugs)
-       float freetime;
        // mark for the leak detector
        int mark;
        // place in the code where it was allocated (for the leak detector)
        const char *allocation_origin;
+
        // initially false to prevent projectiles from moving on their first frame
        // (even if they were spawned by an synchronous client think)
-       qboolean move;
+       qbool move;
 
        // cached cluster links for quick stationary object visibility checking
        vec3_t cullmins, cullmaxs;
@@ -57,11 +107,11 @@ typedef struct edict_engineprivate_s
        // baseline values
        entity_state_t baseline;
 
-       // LordHavoc: gross hack to make floating items still work
+       // LadyHavoc: gross hack to make floating items still work
        int suspendedinairflag;
 
        // cached position to avoid redundant SV_CheckWaterTransition calls on monsters
-       qboolean waterposition_forceupdate; // force an update on this entity (set by SV_PushMove code for moving water entities)
+       qbool waterposition_forceupdate; // force an update on this entity (set by SV_PushMove code for moving water entities)
        vec3_t waterposition_origin; // updates whenever this changes
 
        // used by PushMove to keep track of where objects were before they were
@@ -69,21 +119,44 @@ typedef struct edict_engineprivate_s
        vec3_t moved_from;
        vec3_t moved_fromangles;
 
+       framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS];
+       frameblend_t frameblend[MAX_FRAMEBLENDS];
+       skeleton_t skeleton;
+
+#ifdef USEODE
        // physics parameters
-       qboolean ode_physics;
+       qbool ode_physics;
        void *ode_body;
        void *ode_geom;
+       void *ode_joint;
        float *ode_vertex3f;
        int *ode_element3i;
        int ode_numvertices;
        int ode_numtriangles;
+       edict_odefunc_t *ode_func;
        vec3_t ode_mins;
        vec3_t ode_maxs;
+       vec3_t ode_scale;
        vec_t ode_mass;
+       float ode_friction;
+       vec3_t ode_origin;
+       vec3_t ode_velocity;
+       vec3_t ode_angles;
+       vec3_t ode_avelocity;
+       qbool ode_gravity;
        int ode_modelindex;
        vec_t ode_movelimit; // smallest component of (maxs[]-mins[])
        matrix4x4_t ode_offsetmatrix;
        matrix4x4_t ode_offsetimatrix;
+       int ode_joint_type;
+       int ode_joint_enemy;
+       int ode_joint_aiment;
+       vec3_t ode_joint_origin; // joint anchor
+       vec3_t ode_joint_angles; // joint axis
+       vec3_t ode_joint_velocity; // second joint axis
+       vec3_t ode_joint_movedir; // parameters
+       void *ode_massbuf;
+#endif
 }
 edict_engineprivate_t;