]> de.git.xonotic.org Git - xonotic/darkplaces.git/blob - progs.h
support DP_SV_BOUNCEFACTOR and .float gravity for ODE objects (gravity however is...
[xonotic/darkplaces.git] / progs.h
1 /*
2 Copyright (C) 1996-1997 Id Software, Inc.
3
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.
8
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.
12
13 See the GNU General Public License for more details.
14
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.
18
19 */
20
21 #ifndef PROGS_H
22 #define PROGS_H
23 #include "pr_comp.h"                    // defs shared with qcc
24
25 #define ENTITYGRIDAREAS 16
26 #define MAX_ENTITYCLUSTERS 16
27
28 typedef struct edict_engineprivate_s
29 {
30         // true if this edict is unused
31         qboolean free;
32         // sv.time when the object was freed (to prevent early reuse which could
33         // mess up client interpolation or obscure severe QuakeC bugs)
34         float freetime;
35         // mark for the leak detector
36         int mark;
37         // place in the code where it was allocated (for the leak detector)
38         const char *allocation_origin;
39         // initially false to prevent projectiles from moving on their first frame
40         // (even if they were spawned by an synchronous client think)
41         qboolean move;
42
43         // cached cluster links for quick stationary object visibility checking
44         vec3_t cullmins, cullmaxs;
45         int pvs_numclusters;
46         int pvs_clusterlist[MAX_ENTITYCLUSTERS];
47
48         // physics grid areas this edict is linked into
49         link_t areagrid[ENTITYGRIDAREAS];
50         // since the areagrid can have multiple references to one entity,
51         // we should avoid extensive checking on entities already encountered
52         int areagridmarknumber;
53         // mins/maxs passed to World_LinkEdict
54         vec3_t areamins, areamaxs;
55
56         // PROTOCOL_QUAKE, PROTOCOL_QUAKEDP, PROTOCOL_NEHAHRAMOVIE, PROTOCOL_QUAKEWORLD
57         // baseline values
58         entity_state_t baseline;
59
60         // LordHavoc: gross hack to make floating items still work
61         int suspendedinairflag;
62
63         // cached position to avoid redundant SV_CheckWaterTransition calls on monsters
64         qboolean waterposition_forceupdate; // force an update on this entity (set by SV_PushMove code for moving water entities)
65         vec3_t waterposition_origin; // updates whenever this changes
66
67         // used by PushMove to keep track of where objects were before they were
68         // moved, in case they need to be moved back
69         vec3_t moved_from;
70         vec3_t moved_fromangles;
71
72         // physics parameters
73         qboolean ode_physics;
74         void *ode_body;
75         void *ode_geom;
76         float *ode_vertex3f;
77         int *ode_element3i;
78         int ode_numvertices;
79         int ode_numtriangles;
80         vec3_t ode_mins;
81         vec3_t ode_maxs;
82         vec_t ode_mass;
83         vec3_t ode_origin;
84         vec3_t ode_velocity;
85         vec3_t ode_angles;
86         vec3_t ode_avelocity;
87         qboolean ode_gravity;
88         int ode_modelindex;
89         vec_t ode_movelimit; // smallest component of (maxs[]-mins[])
90         matrix4x4_t ode_offsetmatrix;
91         matrix4x4_t ode_offsetimatrix;
92 }
93 edict_engineprivate_t;
94
95 #endif