X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=world.h;h=1b60ac6c2b48cbd74db530237db1db418e98ec4d;hp=7e3cf3a112735958f8d51ae913ec7bb158cab06d;hb=8289ce6a72d06635b6667d7e6e80ee0890ea7c09;hpb=f68ef7b22979928fb6b8d2ba6b28e14c4caeb7c2 diff --git a/world.h b/world.h index 7e3cf3a1..1b60ac6c 100644 --- a/world.h +++ b/world.h @@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef WORLD_H #define WORLD_H +#include "qtypes.h" #include "collision.h" #define MOVE_NORMAL 0 @@ -30,38 +31,46 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define MOVE_WORLDONLY 3 #define MOVE_HITMODEL 4 -#define AREA_GRID 512 +#define AREA_GRID 128 #define AREA_GRIDNODES (AREA_GRID * AREA_GRID) typedef struct link_s { + llist_t list; int entitynumber; - struct link_s *prev, *next; } link_t; typedef struct world_physics_s { // for ODE physics engine - qboolean ode; // if true then ode is activated + qbool ode; // if true then ode is activated void *ode_world; void *ode_space; void *ode_contactgroup; - // number of constraint solver iterations to use (for dWorldStepFast) + // number of constraint solver iterations to use (for dWorldQuickStep) int ode_iterations; // actual step (server frametime / ode_iterations) vec_t ode_step; + // time we need to simulate, for constantstep + vec_t ode_time; + // stats + int ode_numobjects; // total objects cound + int ode_activeovjects; // active objects count // max velocity for a 1-unit radius object at current step to prevent // missed collisions vec_t ode_movelimit; } world_physics_t; +struct prvm_prog_s; + typedef struct world_s { // convenient fields char filename[MAX_QPATH]; vec3_t mins; vec3_t maxs; + struct prvm_prog_s *prog; int areagrid_stats_calls; int areagrid_stats_nodechecks; @@ -92,7 +101,7 @@ void World_Init(void); void World_Shutdown(void); /// called after the world model has been loaded, before linking any entities -void World_SetSize(world_t *world, const char *filename, const vec3_t mins, const vec3_t maxs); +void World_SetSize(world_t *world, const char *filename, const vec3_t mins, const vec3_t maxs, struct prvm_prog_s *prog); /// unlinks all entities (used before reallocation of edicts) void World_UnlinkAll(world_t *world); @@ -115,10 +124,15 @@ void World_End(world_t *world); // this is called by SV_Physics void World_Physics_Frame(world_t *world, double frametime, double gravity); +// change physics properties of entity +struct prvm_edict_s; +struct edict_odefunc_s; +void World_Physics_ApplyCmd(struct prvm_edict_s *ed, struct edict_odefunc_s *f); + // remove physics data from entity // this is called by entity removal -struct prvm_edict_s; void World_Physics_RemoveFromEntity(world_t *world, struct prvm_edict_s *ed); +void World_Physics_RemoveJointFromEntity(world_t *world, struct prvm_edict_s *ed); #endif