idTech4.Renderer.idRenderWorld.PointInArea C# (CSharp) Method

PointInArea() private method

Will return -1 if the point is not in an area, otherwise it will return 0 <= value < tr.world->numPortalAreas.
private PointInArea ( Vector3 point ) : int
point Vector3
return int
		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];
			}
		}