private int PointInArea(Vector3 point)
{
AreaNode node = _areaNodes[0];
int nodeNumber = -1;
if(node == null)
{
return -1;
}
while(true)
{
float d = (point * node.Plane.Normal + new Vector3(node.Plane.Normal.Z, node.Plane.Normal.Z, node.Plane.Normal.Z)).Length();
if(d > 0)
{
nodeNumber = node.Children[0];
}
else
{
nodeNumber = node.Children[1];
}
if(nodeNumber == 0)
{
return -1; // in solid
}
if(nodeNumber < 0)
{
nodeNumber = -1 - nodeNumber;
if(nodeNumber > _portalAreaCount)
{
idConsole.Error("idRenderWorld::PointInArea: area out of range");
}
return nodeNumber;
}
node = _areaNodes[nodeNumber];
}
}