2 Copyright (C) 1996-1997 Id Software, Inc.
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 See the GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #include "pr_comp.h" // defs shared with qcc
27 #define ENTITYGRIDAREAS 16
28 #define MAX_ENTITYCLUSTERS 16
31 #define PRVM_FLOAT_IS_TRUE_FOR_INT(x) DOUBLE_IS_TRUE_FOR_INT(x)
32 #define PRVM_FLOAT_LOSSLESS_FORMAT DOUBLE_LOSSLESS_FORMAT
33 #define PRVM_VECTOR_LOSSLESS_FORMAT DOUBLE_VECTOR_LOSSLESS_FORMAT
35 #define PRVM_FLOAT_IS_TRUE_FOR_INT(x) FLOAT_IS_TRUE_FOR_INT(x)
36 #define PRVM_FLOAT_LOSSLESS_FORMAT FLOAT_LOSSLESS_FORMAT
37 #define PRVM_VECTOR_LOSSLESS_FORMAT FLOAT_VECTOR_LOSSLESS_FORMAT
41 #define GEOMTYPE_NONE -1
42 #define GEOMTYPE_SOLID 0
43 #define GEOMTYPE_BOX 1
44 #define GEOMTYPE_SPHERE 2
45 #define GEOMTYPE_CAPSULE 3
46 #define GEOMTYPE_TRIMESH 4
47 #define GEOMTYPE_CYLINDER 5
48 #define GEOMTYPE_CAPSULE_X 6
49 #define GEOMTYPE_CAPSULE_Y 7
50 #define GEOMTYPE_CAPSULE_Z 8
51 #define GEOMTYPE_CYLINDER_X 9
52 #define GEOMTYPE_CYLINDER_Y 10
53 #define GEOMTYPE_CYLINDER_Z 11
55 #define JOINTTYPE_NONE 0
56 #define JOINTTYPE_POINT 1
57 #define JOINTTYPE_HINGE 2
58 #define JOINTTYPE_SLIDER 3
59 #define JOINTTYPE_UNIVERSAL 4
60 #define JOINTTYPE_HINGE2 5
61 #define JOINTTYPE_FIXED -1
63 #define FORCETYPE_NONE 0
64 #define FORCETYPE_FORCE 1
65 #define FORCETYPE_FORCEATPOS 2
66 #define FORCETYPE_TORQUE 3
68 #define ODEFUNC_ENABLE 1
69 #define ODEFUNC_DISABLE 2
70 #define ODEFUNC_FORCE 3
71 #define ODEFUNC_TORQUE 4
73 typedef struct edict_odefunc_s
78 struct edict_odefunc_s *next;
82 typedef struct edict_engineprivate_s
84 // mark for the leak detector
86 // place in the code where it was allocated (for the leak detector)
87 const char *allocation_origin;
89 // initially false to prevent projectiles from moving on their first frame
90 // (even if they were spawned by an synchronous client think)
93 // cached cluster links for quick stationary object visibility checking
94 vec3_t cullmins, cullmaxs;
96 int pvs_clusterlist[MAX_ENTITYCLUSTERS];
98 // physics grid areas this edict is linked into
99 link_t areagrid[ENTITYGRIDAREAS];
100 // since the areagrid can have multiple references to one entity,
101 // we should avoid extensive checking on entities already encountered
102 int areagridmarknumber;
103 // mins/maxs passed to World_LinkEdict
104 vec3_t areamins, areamaxs;
106 // PROTOCOL_QUAKE, PROTOCOL_QUAKEDP, PROTOCOL_NEHAHRAMOVIE, PROTOCOL_QUAKEWORLD
108 entity_state_t baseline;
110 // LadyHavoc: gross hack to make floating items still work
111 int suspendedinairflag;
113 // cached position to avoid redundant SV_CheckWaterTransition calls on monsters
114 qbool waterposition_forceupdate; // force an update on this entity (set by SV_PushMove code for moving water entities)
115 vec3_t waterposition_origin; // updates whenever this changes
117 // used by PushMove to keep track of where objects were before they were
118 // moved, in case they need to be moved back
120 vec3_t moved_fromangles;
122 framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS];
123 frameblend_t frameblend[MAX_FRAMEBLENDS];
127 // physics parameters
135 int ode_numtriangles;
136 edict_odefunc_t *ode_func;
145 vec3_t ode_avelocity;
148 vec_t ode_movelimit; // smallest component of (maxs[]-mins[])
149 matrix4x4_t ode_offsetmatrix;
150 matrix4x4_t ode_offsetimatrix;
153 int ode_joint_aiment;
154 vec3_t ode_joint_origin; // joint anchor
155 vec3_t ode_joint_angles; // joint axis
156 vec3_t ode_joint_velocity; // second joint axis
157 vec3_t ode_joint_movedir; // parameters
161 edict_engineprivate_t;