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

CreateEntityReferences() private method

Creates all needed model references in portal areas, chaining them to both the area and the entityDef.
Bumps tr.viewCount..
private CreateEntityReferences ( idRenderEntity def ) : void
def idRenderEntity
return void
		private void CreateEntityReferences(idRenderEntity def)
		{
			if(def.Parameters.Model == null)
			{
				def.Parameters.Model = idE.RenderModelManager.DefaultModel;
			}
			
			// if the entity hasn't been fully specified due to expensive animation calcs
			// for md5 and particles, use the provided conservative bounds.
			if(def.Parameters.Callback != null)
			{
				def.ReferenceBounds = def.Parameters.Bounds;
			}
			else
			{
				def.ReferenceBounds = def.Parameters.Model.GetBounds(def.Parameters);
			}

			// some models, like empty particles, may not need to be added at all
			if(def.ReferenceBounds.IsCleared == true)
			{
				return;
			}

			if((idE.CvarSystem.GetBool("r_showUpdates") == true)
				&& (((def.ReferenceBounds.Max.X - def.ReferenceBounds.Min.X) > 1024)
						|| ((def.ReferenceBounds.Max.Y - def.ReferenceBounds.Min.Y) > 1024)))
			{
				idConsole.WriteLine("big entityRef: {0}, {1}", def.ReferenceBounds.Max.X - def.ReferenceBounds.Min.X, def.ReferenceBounds.Max.Y - def.ReferenceBounds.Min.Y);
			}

			Vector3[] transformed = new Vector3[8];
			Vector3 v;

			for(int i = 0; i < 8; i++)
			{
				v.X = ((i & 1) == 0) ? def.ReferenceBounds.Min.X : def.ReferenceBounds.Max.X;
				v.Y = (((i >> 1) & 1) == 0) ? def.ReferenceBounds.Min.Y : def.ReferenceBounds.Max.Y;
				v.Z = (((i >> 2) & 1) == 0) ? def.ReferenceBounds.Min.Z : def.ReferenceBounds.Max.Z;

				idHelper.LocalPointToGlobal(def.ModelMatrix, v, out transformed[i]);
			}

			// bump the view count so we can tell if an
			// area already has a reference
			idE.RenderSystem.ViewCount++;

			// push these points down the BSP tree into areas
			def.World.PushVolumeIntoTree(def, null, 8, transformed);
		}