83 lines
1.4 KiB
Plaintext
83 lines
1.4 KiB
Plaintext
|
// common.qc: common functions
|
||
|
|
||
|
float() crandom = {
|
||
|
return 2 * (random() - 0.5);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
=============
|
||
|
range
|
||
|
|
||
|
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;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
=============
|
||
|
visible
|
||
|
|
||
|
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;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
=============
|
||
|
infront
|
||
|
|
||
|
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
|