public static bool _LimitXY_Square(
ref Vector3 dir, // dirZ
float limitXMinus, // X-
float limitXPlus, // X+
float limitYMinus, // Z-
float limitYPlus ) // Z+
{
bool isXLimited = false;
bool isYLimited = false;
if( dir.x < -limitXMinus ) {
dir.x = -limitXMinus;
isXLimited = true;
} else if( dir.x > limitXPlus ) {
dir.x = limitXPlus;
isXLimited = true;
}
if( dir.y < -limitYMinus ) {
dir.y = -limitYMinus;
isYLimited = true;
} else if( dir.y > limitYPlus ) {
dir.y = limitYPlus;
isYLimited = true;
}
if( isXLimited || isYLimited ) {
dir.z = SAFBIKSqrt( 1.0f - (dir.x * dir.x + dir.y * dir.y) );
return true;
} else {
if( dir.z < 0.0f ) {
dir.z = -dir.z;
return true;
}
}
return false;
}