Example #1
0
		/// <summary>
		/// Sets up for a single area world.
		/// </summary>
		private void ClearWorld()
		{
			_portalAreaCount = 1;
			_areaScreenRect = new idScreenRect[] { new idScreenRect() };
			_portalAreas = new PortalArea[] { new PortalArea() };

			SetupAreaReferences();

			// even though we only have a single area, create a node
			// that has both children pointing at it so we don't need to
			AreaNode areaNode = new AreaNode();
			areaNode.Plane.D = 1;
			areaNode.Children[0] = -1;
			areaNode.Children[1] = -1;

			_areaNodes = new AreaNode[1];
			_areaNodes[0] = areaNode;
		}
Example #2
0
		private int CommonChildrenArea(AreaNode node)
		{
			int[] nums = new int[2];
			int count = nums.Length;

			for(int i = 0; i < count; i++)
			{
				if(node.Children[i] <= 0)
				{
					nums[i] = -1 - node.Children[i];
				}
				else
				{
					nums[i] = CommonChildrenArea(_areaNodes[node.Children[i]]);
				}
			}

			// solid nodes will match any area
			if(nums[0] == idRenderWorld.AreaSolid)
			{
				nums[0] = nums[1];
			}

			if(nums[1] == idRenderWorld.AreaSolid)
			{
				nums[1] = nums[0];
			}

			int common;

			if(nums[0] == nums[1])
			{
				common = nums[0];
			}
			else
			{
				common = idRenderWorld.ChildrenHaveMultipleAreas;
			}

			return (node.CommonChildrenArea = common);
		}
Example #3
0
		private void ParseNodes(idLexer lexer)
		{
			lexer.ExpectTokenString("{");

			_areaNodeCount = lexer.ParseInt();

			if(_areaNodeCount < 0)
			{
				lexer.Error("ParseNodes: bad areaNodeCount");
			}

			_areaNodes = new AreaNode[_areaNodeCount];

			float[] tmp;
			AreaNode node;

			for(int i = 0; i < _areaNodeCount; i++)
			{
				node = _areaNodes[i] = new AreaNode();
				tmp = lexer.Parse1DMatrix(4);
				
				node.Plane = new Plane(tmp[0], tmp[1], tmp[2], tmp[3]);
				node.Children[0] = lexer.ParseInt();
				node.Children[1] = lexer.ParseInt();
			}

			lexer.ExpectTokenString("}");
		}