Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5131 | clevermous | 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 | // world.h |
||
21 | |||
22 | typedef struct |
||
23 | { |
||
24 | vec3_t normal; |
||
25 | float dist; |
||
26 | } plane_t; |
||
27 | |||
28 | typedef struct |
||
29 | { |
||
30 | qboolean allsolid; // if true, plane is not valid |
||
31 | qboolean startsolid; // if true, the initial point was in a solid area |
||
32 | qboolean inopen, inwater; |
||
33 | float fraction; // time completed, 1.0 = didn't hit anything |
||
34 | vec3_t endpos; // final position |
||
35 | plane_t plane; // surface normal at impact |
||
36 | edict_t *ent; // entity the surface is on |
||
37 | } trace_t; |
||
38 | |||
39 | |||
40 | #define MOVE_NORMAL 0 |
||
41 | #define MOVE_NOMONSTERS 1 |
||
42 | #define MOVE_MISSILE 2 |
||
43 | |||
44 | |||
45 | void SV_ClearWorld (void); |
||
46 | // called after the world model has been loaded, before linking any entities |
||
47 | |||
48 | void SV_UnlinkEdict (edict_t *ent); |
||
49 | // call before removing an entity, and before trying to move one, |
||
50 | // so it doesn't clip against itself |
||
51 | // flags ent->v.modified |
||
52 | |||
53 | void SV_LinkEdict (edict_t *ent, qboolean touch_triggers); |
||
54 | // Needs to be called any time an entity changes origin, mins, maxs, or solid |
||
55 | // flags ent->v.modified |
||
56 | // sets ent->v.absmin and ent->v.absmax |
||
57 | // if touchtriggers, calls prog functions for the intersected triggers |
||
58 | |||
59 | int SV_PointContents (vec3_t p); |
||
60 | int SV_TruePointContents (vec3_t p); |
||
61 | // returns the CONTENTS_* value from the world at the given point. |
||
62 | // does not check any entities at all |
||
63 | // the non-true version remaps the water current contents to content_water |
||
64 | |||
65 | edict_t *SV_TestEntityPosition (edict_t *ent); |
||
66 | |||
67 | trace_t SV_Move (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int type, edict_t *passedict); |
||
68 | // mins and maxs are reletive |
||
69 | |||
70 | // if the entire move stays in a solid volume, trace.allsolid will be set |
||
71 | |||
72 | // if the starting point is in a solid, it will be allowed to move out |
||
73 | // to an open area |
||
74 | |||
75 | // nomonsters is used for line of sight or edge testing, where mosnters |
||
76 | // shouldn't be considered solid objects |
||
77 | |||
78 | // passedict is explicitly excluded from clipping checks (normally NULL) |