Code:
GetStance()
{
trace = bulletTrace( self.origin, self.origin + ( 0, 0, 80 ), false, undefined );
top = trace["position"] + ( 0, 0, -1); //find the ceiling, if it's lower than 80
bottom = self.origin + ( 0, 0, -12 );
forwardangle = maps\mp\_utility::vectorScale( anglesToForward( self.angles ), 12 );
leftangle = ( -1 * forwardangle[1], forwardangle[0], 0 );//a lateral vector
//now do traces at different sample points
//there are 9 sample points, forming a 3x3 grid centered on player's origin
//and oriented with the player facing forward
trace = bulletTrace( top + forwardangle, bottom + forwardangle, true, undefined );
height1 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top - forwardangle, bottom - forwardangle, true, undefined );
height2 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top + leftangle, bottom + leftangle, true, undefined );
height3 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top - leftangle, bottom - leftangle, true, undefined );
height4 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top + leftangle + forwardangle, bottom + leftangle + forwardangle, true, undefined );
height5 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top - leftangle + forwardangle, bottom - leftangle + forwardangle, true, undefined );
height6 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top + leftangle - forwardangle, bottom + leftangle - forwardangle, true, undefined );
height7 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top - leftangle - forwardangle, bottom - leftangle - forwardangle, true, undefined );
height8 = trace["position"][2] - self.origin[2];
trace = bulletTrace( top, bottom, true, undefined );
height9 = trace["position"][2] - self.origin[2];
//find the maximum of the height samples
heighta = getMax( height1, height2, height3, height4 );
heightb = getMax( height5, height6, height7, height8 );
maxheight = getMax( heighta, heightb, height9, 0 );
//categorize stance based on height
if( maxheight < 33 )
stance = "lie";
else if( maxheight < 52 )
stance = "duck";
else
stance = "stand";
return( stance );
}