internal static void ShowObject(int ObjectIndex, ObjectType Type)
{
bool Overlay = Type == ObjectType.Overlay;
if (ObjectManager.Objects[ObjectIndex] == null) return;
if (ObjectManager.Objects[ObjectIndex].RendererIndex == 0)
{
if (ObjectListCount >= ObjectList.Length)
{
Array.Resize<Object>(ref ObjectList, ObjectList.Length << 1);
}
ObjectList[ObjectListCount].ObjectIndex = ObjectIndex;
ObjectList[ObjectListCount].Type = Type;
int f = ObjectManager.Objects[ObjectIndex].Mesh.Faces.Length;
ObjectList[ObjectListCount].FaceListIndices = new int[f];
for (int i = 0; i < f; i++)
{
if (Overlay)
{
// overlay
if (OverlayListCount >= OverlayList.Length)
{
Array.Resize(ref OverlayList, OverlayList.Length << 1);
Array.Resize(ref OverlayListDistance, OverlayList.Length);
}
OverlayList[OverlayListCount].ObjectIndex = ObjectIndex;
OverlayList[OverlayListCount].FaceIndex = i;
OverlayList[OverlayListCount].ObjectListIndex = ObjectListCount;
ObjectList[ObjectListCount].FaceListIndices[i] = (OverlayListCount << 2) + 3;
OverlayListCount++;
}
else
{
int k = ObjectManager.Objects[ObjectIndex].Mesh.Faces[i].Material;
bool transparentcolor = false, alpha = false;
if (ObjectManager.Objects[ObjectIndex].Mesh.Materials[k].Color.A != 255)
{
alpha = true;
}
else if (ObjectManager.Objects[ObjectIndex].Mesh.Materials[k].BlendMode == World.MeshMaterialBlendMode.Additive)
{
alpha = true;
}
else if (ObjectManager.Objects[ObjectIndex].Mesh.Materials[k].GlowAttenuationData != 0)
{
alpha = true;
}
else
{
int tday = ObjectManager.Objects[ObjectIndex].Mesh.Materials[k].DaytimeTextureIndex;
if (tday >= 0)
{
TextureManager.UseTexture(tday, TextureManager.UseMode.Normal);
if (TextureManager.Textures[tday].Transparency == TextureManager.TextureTransparencyMode.Alpha)
{
alpha = true;
}
else if (TextureManager.Textures[tday].Transparency == TextureManager.TextureTransparencyMode.TransparentColor)
{
transparentcolor = true;
}
}
int tnight = ObjectManager.Objects[ObjectIndex].Mesh.Materials[k].NighttimeTextureIndex;
if (tnight >= 0)
{
TextureManager.UseTexture(tnight, TextureManager.UseMode.Normal);
if (TextureManager.Textures[tnight].Transparency == TextureManager.TextureTransparencyMode.Alpha)
{
alpha = true;
}
else if (TextureManager.Textures[tnight].Transparency == TextureManager.TextureTransparencyMode.TransparentColor)
{
transparentcolor = true;
}
}
}
if (alpha)
{
// alpha
if (AlphaListCount >= AlphaList.Length)
{
Array.Resize(ref AlphaList, AlphaList.Length << 1);
Array.Resize(ref AlphaListDistance, AlphaList.Length);
}
AlphaList[AlphaListCount].ObjectIndex = ObjectIndex;
AlphaList[AlphaListCount].FaceIndex = i;
AlphaList[AlphaListCount].ObjectListIndex = ObjectListCount;
ObjectList[ObjectListCount].FaceListIndices[i] = (AlphaListCount << 2) + 2;
AlphaListCount++;
}
else if (transparentcolor)
{
// transparent color
if (TransparentColorListCount >= TransparentColorList.Length)
{
Array.Resize(ref TransparentColorList, TransparentColorList.Length << 1);
Array.Resize(ref TransparentColorListDistance, TransparentColorList.Length);
}
TransparentColorList[TransparentColorListCount].ObjectIndex = ObjectIndex;
TransparentColorList[TransparentColorListCount].FaceIndex = i;
TransparentColorList[TransparentColorListCount].ObjectListIndex = ObjectListCount;
ObjectList[ObjectListCount].FaceListIndices[i] = (TransparentColorListCount << 2) + 1;
TransparentColorListCount++;
}
else
{
// opaque
if (OpaqueListCount >= OpaqueList.Length)
{
Array.Resize(ref OpaqueList, OpaqueList.Length << 1);
}
OpaqueList[OpaqueListCount].ObjectIndex = ObjectIndex;
OpaqueList[OpaqueListCount].FaceIndex = i;
OpaqueList[OpaqueListCount].ObjectListIndex = ObjectListCount;
ObjectList[ObjectListCount].FaceListIndices[i] = OpaqueListCount << 2;
OpaqueListCount++;
}
}
}
ObjectManager.Objects[ObjectIndex].RendererIndex = ObjectListCount + 1;
ObjectListCount++;
}
}