qboolean G_VisibleFromBinoculars ( gentity_t* viewer, gentity_t* ent, vec3_t origin ) { vec3_t vieworg; trace_t trace; VectorCopy(viewer->client->ps.origin, vieworg); vieworg[2] += viewer->client->ps.viewheight; if(!G_CullPointAndRadius( origin, 0 )) { return qfalse; } if(!trap_InPVS( vieworg, origin )) { return qfalse; } trap_Trace( &trace, vieworg, NULL, NULL, origin, viewer->s.number, MASK_SHOT ); /* if( ent && trace.entityNum != ent-g_entities ) { return qfalse; }*/ if( trace.fraction != 1.f ) { if( ent ) { if( trace.entityNum != ent->s.number ) { return qfalse; } else { return qtrue; } } else { return qfalse; } } return qtrue; }
/** * @brief G_VisibleFromBinoculars_Box * @param[in] viewer * @param[in] ent * @param[in,out] origin * @param[in] mins * @param[in] maxs * @return */ qboolean G_VisibleFromBinoculars_Box(gentity_t *viewer, gentity_t *ent, vec3_t origin, vec3_t mins, vec3_t maxs) { vec3_t vieworg; trace_t trace; VectorCopy(viewer->client->ps.origin, vieworg); vieworg[2] += viewer->client->ps.viewheight; // check if head is visible if (ent->methodOfDeath != MOD_LANDMINE) { origin[2] += ent->client->ps.viewheight; } if (!G_CullPointAndRadius(origin, 0)) { return qfalse; } if (!trap_InPVS(vieworg, origin)) { return qfalse; } trap_Trace(&trace, vieworg, mins, maxs, origin, viewer->s.number, MASK_SHOT); if (trace.fraction != 1.f) { if (trace.entityNum != ent->s.number) { return qfalse; } else { return qtrue; } } return qtrue; }