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);
}