X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=world.h;h=1b60ac6c2b48cbd74db530237db1db418e98ec4d;hp=2f2c8a787f2494d49191fd86b2a40f6f074581d4;hb=fe7a27c1f9ee6904eddecd54f0fcae461806d43c;hpb=991fc118ade1c81665292035b42b5434026dca7c diff --git a/world.h b/world.h index 2f2c8a78..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 @@ -35,33 +36,41 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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,9 +124,13 @@ 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);