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
25 #define ENTITYGRIDAREAS 16
26 #define MAX_ENTITYCLUSTERS 16
28 #define JOINTTYPE_POINT 1
29 #define JOINTTYPE_HINGE 2
30 #define JOINTTYPE_SLIDER 3
31 #define JOINTTYPE_UNIVERSAL 4
32 #define JOINTTYPE_HINGE2 5
33 #define JOINTTYPE_FIXED -1
35 #define ODEFUNC_ENABLE 1
36 #define ODEFUNC_DISABLE 2
37 #define ODEFUNC_RELFORCEATPOS 3
38 #define ODEFUNC_RELTORQUE 4
40 typedef struct edict_odefunc_s
45 struct edict_odefunc_s *next;
48 typedef struct edict_engineprivate_s
50 // true if this edict is unused
52 // sv.time when the object was freed (to prevent early reuse which could
53 // mess up client interpolation or obscure severe QuakeC bugs)
55 // mark for the leak detector
57 // place in the code where it was allocated (for the leak detector)
58 const char *allocation_origin;
59 // initially false to prevent projectiles from moving on their first frame
60 // (even if they were spawned by an synchronous client think)
63 // cached cluster links for quick stationary object visibility checking
64 vec3_t cullmins, cullmaxs;
66 int pvs_clusterlist[MAX_ENTITYCLUSTERS];
68 // physics grid areas this edict is linked into
69 link_t areagrid[ENTITYGRIDAREAS];
70 // since the areagrid can have multiple references to one entity,
71 // we should avoid extensive checking on entities already encountered
72 int areagridmarknumber;
73 // mins/maxs passed to World_LinkEdict
74 vec3_t areamins, areamaxs;
76 // PROTOCOL_QUAKE, PROTOCOL_QUAKEDP, PROTOCOL_NEHAHRAMOVIE, PROTOCOL_QUAKEWORLD
78 entity_state_t baseline;
80 // LordHavoc: gross hack to make floating items still work
81 int suspendedinairflag;
83 // cached position to avoid redundant SV_CheckWaterTransition calls on monsters
84 qboolean waterposition_forceupdate; // force an update on this entity (set by SV_PushMove code for moving water entities)
85 vec3_t waterposition_origin; // updates whenever this changes
87 // used by PushMove to keep track of where objects were before they were
88 // moved, in case they need to be moved back
90 vec3_t moved_fromangles;
92 framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS];
93 frameblend_t frameblend[MAX_FRAMEBLENDS];
104 int ode_numtriangles;
105 edict_odefunc_t *ode_func;
112 vec3_t ode_avelocity;
113 qboolean ode_gravity;
115 vec_t ode_movelimit; // smallest component of (maxs[]-mins[])
116 matrix4x4_t ode_offsetmatrix;
117 matrix4x4_t ode_offsetimatrix;
120 int ode_joint_aiment;
121 vec3_t ode_joint_origin; // joint anchor
122 vec3_t ode_joint_angles; // joint axis
123 vec3_t ode_joint_velocity; // second joint axis
124 vec3_t ode_joint_movedir; // parameters
127 edict_engineprivate_t;