X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=collision.h;h=0da12477b785b6393fb4baaf1c3e43b3a40a48b3;hb=33e798ded42578ed4b8315247b41ce685466ea01;hp=1b41f0540d364c4184fd68ecbe29b9b250012881;hpb=503f6fef27f5b87b9d71aa290f5a0890b159ff15;p=xonotic%2Fdarkplaces.git diff --git a/collision.h b/collision.h index 1b41f054..0da12477 100644 --- a/collision.h +++ b/collision.h @@ -16,6 +16,8 @@ typedef struct trace_s int allsolid; // if true, the initial point was in solid (see hitsupercontentsmask) int startsolid; + // this is set to true in world.c if startsolid was set in a trace against world + int worldstartsolid; // this is set to true in world.c if startsolid was set in a trace against a SOLID_BSP entity, in other words this is true if the entity is stuck in a door or wall, but not if stuck in another normal entity int bmodelstartsolid; // if true, the trace passed through empty somewhere @@ -63,6 +65,10 @@ void Collision_Init(void); void Collision_ClipTrace_Box(trace_t *trace, const vec3_t cmins, const vec3_t cmaxs, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int hitsupercontentsmask, int boxsupercontents, int boxq3surfaceflags, const texture_t *boxtexture); void Collision_ClipTrace_Point(trace_t *trace, const vec3_t cmins, const vec3_t cmaxs, const vec3_t start, int hitsupercontentsmask, int boxsupercontents, int boxq3surfaceflags, const texture_t *boxtexture); +void Collision_Cache_Reset(qboolean resetlimits); +void Collision_Cache_Init(mempool_t *mempool); +void Collision_Cache_NewFrame(void); + typedef struct colpointf_s { vec3_t v; @@ -117,7 +123,7 @@ typedef struct colboxbrushf_s } colboxbrushf_t; -void Collision_CalcPlanesForPolygonBrushFloat(colbrushf_t *brush); +void Collision_CalcPlanesForTriangleBrushFloat(colbrushf_t *brush); colbrushf_t *Collision_AllocBrushFromPermanentPolygonFloat(mempool_t *mempool, int numpoints, float *points, int supercontents, int q3surfaceflags, const texture_t *texture); colbrushf_t *Collision_NewBrushFromPlanes(mempool_t *mempool, int numoriginalplanes, const colplanef_t *originalplanes, int supercontents, int q3surfaceflags, const texture_t *texture, int hasaabbplanes); void Collision_TraceBrushBrushFloat(trace_t *trace, const colbrushf_t *thisbrush_start, const colbrushf_t *thisbrush_end, const colbrushf_t *thatbrush_start, const colbrushf_t *thatbrush_end); @@ -156,6 +162,9 @@ void Collision_ClipPointToGenericEntity(trace_t *trace, dp_model_t *model, const void Collision_ClipToWorld(trace_t *trace, dp_model_t *model, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int hitsupercontents); void Collision_ClipLineToWorld(trace_t *trace, dp_model_t *model, const vec3_t start, const vec3_t end, int hitsupercontents, qboolean hitsurfaces); void Collision_ClipPointToWorld(trace_t *trace, dp_model_t *model, const vec3_t start, int hitsupercontents); +// caching surface trace for renderer (NOT THREAD SAFE) +void Collision_Cache_ClipLineToGenericEntitySurfaces(trace_t *trace, dp_model_t *model, matrix4x4_t *matrix, matrix4x4_t *inversematrix, const vec3_t start, const vec3_t end, int hitsupercontentsmask); +void Collision_Cache_ClipLineToWorldSurfaces(trace_t *trace, dp_model_t *model, const vec3_t start, const vec3_t end, int hitsupercontents); // combines data from two traces: // merges contents flags, startsolid, allsolid, inwater // updates fraction, endpos, plane and surface info if new fraction is shorter