// Returns distance or 9999 if invalid for some reason static float Cam_TryFlyby(player_state_t *self, player_state_t *player, vec3_t vec, qbool checkvis) { vec3_t v; trace_t trace; float len; vectoangles(vec, v); VectorCopy (v, pmove.angles); VectorNormalizeFast(vec); VectorMA(player->origin, 800, vec, v); // v is endpos // fake a player move trace = Cam_DoTrace(player->origin, v); if (trace.inwater) return 9999; VectorCopy(trace.endpos, vec); VectorSubtract(trace.endpos, player->origin, v); len = VectorLength(v); if (len < 32 || len > 800) return 9999; if (checkvis) { VectorSubtract(trace.endpos, self->origin, v); len = VectorLength(v); trace = Cam_DoTrace(self->origin, vec); if (trace.fraction != 1 || trace.inwater) return 9999; } return len; }
// Returns distance or 9999 if invalid for some reason static float Cam_TryFlyby(player_state_t *self, player_state_t *player, vec3_t vec, qboolean checkvis) { vec3_t v; pmtrace_t trace; float len; vectoangles(vec, v); // v[0] = -v[0]; VectorCopy (v, pmove.angles); VectorNormalize(vec); VectorMA(player->origin, 800, vec, v); // v is endpos // fake a player move trace = Cam_DoTrace(player->origin, v); if (/*trace.inopen ||*/ trace.inwater) return 9999; VectorCopy(trace.endpos, vec); VectorSubtract(trace.endpos, player->origin, v); len = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); if (len < 32 || len > 800) return 9999; if (checkvis) { VectorSubtract(trace.endpos, self->origin, v); len = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); trace = Cam_DoTrace(self->origin, vec); if (trace.fraction != 1 || trace.inwater) return 9999; } return len; }
// Returns distance or 9999 if invalid for some reason static float Cam_TryFlyby (player_state_t * self, player_state_t * player, vec3_t vec, qboolean checkvis) { float len; trace_t trace; vec3_t v; vectoangles (vec, v); VectorCopy (v, pmove.angles); VectorNormalize (vec); VectorMultAdd (player->pls.origin, 800, vec, v); // v is endpos // fake a player move trace = Cam_DoTrace (player->pls.origin, v); if ( /* trace.inopen || */ trace.inwater) return 9999; VectorCopy (trace.endpos, vec); len = VectorDistance (trace.endpos, player->pls.origin); if (len < 32 || len > 800) return 9999; if (checkvis) { trace = Cam_DoTrace (self->pls.origin, vec); if (trace.fraction != 1 || trace.inwater) return 9999; len = VectorDistance (trace.endpos, self->pls.origin); } return len; }
// Is player visible? static qbool Cam_IsVisible(player_state_t *player, vec3_t vec) { trace_t trace; vec3_t v; trace = Cam_DoTrace(player->origin, vec); if (trace.fraction != 1 || /*trace.inopen ||*/ trace.inwater) return false; // check distance, don't let the player get too far away or too close VectorSubtract(player->origin, vec, v); return ((v[0]*v[0]+v[1]*v[1]+v[2]*v[2]) >= 256); }
// Is player visible? static qboolean Cam_IsVisible(player_state_t *player, vec3_t vec) { pmtrace_t trace; vec3_t v; float d; trace = Cam_DoTrace(player->origin, vec); if (trace.fraction != 1 || /*trace.inopen ||*/ trace.inwater) return false; // check distance, don't let the player get too far away or too close VectorSubtract(player->origin, vec, v); d = vlen(v); if (d < 16) return false; return true; }
// Is player visible? static qboolean Cam_IsVisible (player_state_t * player, vec3_t vec) { float d; trace_t trace; vec3_t v; trace = Cam_DoTrace (player->pls.origin, vec); if (trace.fraction != 1 || /* trace.inopen || */ trace.inwater) return false; // check distance, don't let the player get too far away or too close VectorSubtract (player->pls.origin, vec, v); d = VectorLength (v); return (d > 16.0); }