mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
Start of support for rotated bboxes. shouldn't do anything yet
This commit is contained in:
parent
8fc5e5e372
commit
619b12375c
3 changed files with 30 additions and 18 deletions
|
@ -148,6 +148,7 @@ typedef struct
|
|||
int owner; //int
|
||||
int message; //string_t
|
||||
int sounds; //float
|
||||
int rotated_bbox; //int
|
||||
|
||||
int alpha;
|
||||
int scale;
|
||||
|
|
|
@ -253,6 +253,7 @@ SV_LoadProgs (void)
|
|||
sv_fields.owner = PR_GetFieldOffset (&sv_pr_state, "owner");
|
||||
sv_fields.message = PR_GetFieldOffset (&sv_pr_state, "message");
|
||||
sv_fields.sounds = PR_GetFieldOffset (&sv_pr_state, "sounds");
|
||||
sv_fields.rotated_bbox = ED_GetFieldOffset (&sv_pr_state, "rotated_bbox");
|
||||
|
||||
// Zoid, find the spectator functions
|
||||
SpectatorConnect = SpectatorThink = SpectatorDisconnect = 0;
|
||||
|
|
|
@ -612,8 +612,8 @@ SV_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f, vec3_t p1,
|
|||
eventually rotation) of the end points
|
||||
*/
|
||||
trace_t
|
||||
SV_ClipMoveToEntity (edict_t *ent, vec3_t start, vec3_t mins, vec3_t maxs,
|
||||
vec3_t end)
|
||||
SV_ClipMoveToEntity (edict_t *touched, edict_t *mover, vec3_t start,
|
||||
vec3_t mins, vec3_t maxs, vec3_t end)
|
||||
{
|
||||
trace_t trace;
|
||||
vec3_t offset;
|
||||
|
@ -627,23 +627,33 @@ SV_ClipMoveToEntity (edict_t *ent, vec3_t start, vec3_t mins, vec3_t maxs,
|
|||
trace.allsolid = true;
|
||||
VectorCopy (end, trace.endpos);
|
||||
|
||||
// get the clipping hull
|
||||
hull = SV_HullForEntity (ent, mins, maxs, offset);
|
||||
if (sv_fields.rotated_bbox != -1
|
||||
&& (SVFIELD (mover, rotated_bbox, integer)
|
||||
|| SVFIELD (touched, rotated_bbox, integer))) {
|
||||
// get the hull
|
||||
// get relative start and end locations
|
||||
// rotate hull(?) and start/end locations
|
||||
// run the hull check
|
||||
// unrotate the trace
|
||||
} else {
|
||||
// get the clipping hull
|
||||
hull = SV_HullForEntity (touched, mins, maxs, offset);
|
||||
|
||||
VectorSubtract (start, offset, start_l);
|
||||
VectorSubtract (end, offset, end_l);
|
||||
VectorSubtract (start, offset, start_l);
|
||||
VectorSubtract (end, offset, end_l);
|
||||
|
||||
// trace a line through the apropriate clipping hull
|
||||
SV_RecursiveHullCheck (hull, hull->firstclipnode, 0, 1, start_l, end_l,
|
||||
&trace);
|
||||
// trace a line through the apropriate clipping hull
|
||||
SV_RecursiveHullCheck (hull, hull->firstclipnode, 0, 1, start_l, end_l,
|
||||
&trace);
|
||||
|
||||
// fix trace up by the offset
|
||||
if (trace.fraction != 1)
|
||||
VectorAdd (trace.endpos, offset, trace.endpos);
|
||||
// fix trace up by the offset
|
||||
if (trace.fraction != 1)
|
||||
VectorAdd (trace.endpos, offset, trace.endpos);
|
||||
}
|
||||
|
||||
// did we clip the move?
|
||||
if (trace.fraction < 1 || trace.startsolid)
|
||||
trace.ent = ent;
|
||||
trace.ent = touched;
|
||||
|
||||
return trace;
|
||||
}
|
||||
|
@ -701,11 +711,11 @@ SV_ClipToLinks (areanode_t *node, moveclip_t * clip)
|
|||
}
|
||||
|
||||
if ((int) SVFIELD (touch, flags, float) & FL_MONSTER)
|
||||
trace = SV_ClipMoveToEntity (touch, clip->start, clip->mins2,
|
||||
clip->maxs2, clip->end);
|
||||
trace = SV_ClipMoveToEntity (touch, clip->passedict, clip->start,
|
||||
clip->mins2, clip->maxs2, clip->end);
|
||||
else
|
||||
trace = SV_ClipMoveToEntity (touch, clip->start, clip->mins,
|
||||
clip->maxs, clip->end);
|
||||
trace = SV_ClipMoveToEntity (touch, clip->passedict, clip->start,
|
||||
clip->mins, clip->maxs, clip->end);
|
||||
if (trace.allsolid || trace.startsolid
|
||||
|| trace.fraction < clip->trace.fraction) {
|
||||
trace.ent = touch;
|
||||
|
@ -763,7 +773,7 @@ SV_Move (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int type,
|
|||
memset (&clip, 0, sizeof (moveclip_t));
|
||||
|
||||
// clip to world
|
||||
clip.trace = SV_ClipMoveToEntity (sv.edicts, start, mins, maxs, end);
|
||||
clip.trace = SV_ClipMoveToEntity (sv.edicts, passedict, start, mins, maxs, end);
|
||||
|
||||
clip.start = start;
|
||||
clip.end = end;
|
||||
|
|
Loading…
Reference in a new issue