Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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)
  79.