super-coop/source/common.qc

78 lines
1.5 KiB
Plaintext

// common.qc: common functions
float() crandom = {
return 2 * (random() - 0.5);
};
float(float x, float y) max = {
return x < y ? y : x;
};
float(float x, float y) min = {
return x < y ? x : y;
};
float(float x, float mi, float ma) minmax = {
return min(max(x, mi), ma);
};
/* returns the range catagorization of an entity reletive to self
* 0 melee range, will become hostile even if back is turned
* 1 visibility and infront, or visibility and show hostile
* 2 infront and show hostile
* 3 only triggered by damage
*/
float(entity targ) range = {
vector spot1, spot2;
float r;
spot1 = self.origin + self.view_ofs;
spot2 = targ.origin + targ.view_ofs;
r = vlen(spot1 - spot2);
if(r < 120) {
return RANGE_MELEE;
}
if(r < 500) {
return RANGE_NEAR;
}
if(r < 1000) {
return RANGE_MID;
}
return RANGE_FAR;
};
// returns 1 if the entity is visible to self, even if not infront()
float(entity targ) visible = {
vector spot1, spot2;
spot1 = self.origin + self.view_ofs;
spot2 = targ.origin + targ.view_ofs;
traceline(spot1, spot2, TRUE, self); // see through other monsters
if(trace_inopen && trace_inwater) {
return FALSE; // sight line crossed contents
}
if(trace_fraction == 1) {
return TRUE;
}
return FALSE;
};
// returns 1 if the entity is in front(in sight) of self
float(entity targ) infront = {
vector vec;
float dot;
makevectors(self.angles);
vec = normalize(targ.origin - self.origin);
dot = vec * v_forward;
if(dot > 0.3) {
return TRUE;
}
return FALSE;
};
// EOF