private void FromBytes(byte[] data, int pos, int length)
{
if (length <= 0)
{
// No TextureEntry to process
DefaultTexture = null;
return;
}
else
{
DefaultTexture = new TextureEntryFace(null);
}
uint bitfieldSize = 0;
uint faceBits = 0;
int i = pos;
#region Texture
DefaultTexture.TextureID = new UUID(data, i);
i += 16;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
UUID tmpUUID = new UUID(data, i);
i += 16;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).TextureID = tmpUUID;
}
}
}
#endregion Texture
#region Color
DefaultTexture.RGBA = new Color4(data, i, true);
i += 4;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
Color4 tmpColor = new Color4(data, i, true);
i += 4;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).RGBA = tmpColor;
}
}
}
#endregion Color
#region RepeatU
DefaultTexture.RepeatU = Utils.BytesToFloat(data, i);
i += 4;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
float tmpFloat = Utils.BytesToFloat(data, i);
i += 4;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).RepeatU = tmpFloat;
}
}
}
#endregion RepeatU
#region RepeatV
DefaultTexture.RepeatV = Utils.BytesToFloat(data, i);
i += 4;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
float tmpFloat = Utils.BytesToFloat(data, i);
i += 4;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).RepeatV = tmpFloat;
}
}
}
#endregion RepeatV
#region OffsetU
DefaultTexture.OffsetU = Helpers.TEOffsetFloat(data, i);
i += 2;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
float tmpFloat = Helpers.TEOffsetFloat(data, i);
i += 2;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).OffsetU = tmpFloat;
}
}
}
#endregion OffsetU
#region OffsetV
DefaultTexture.OffsetV = Helpers.TEOffsetFloat(data, i);
i += 2;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
float tmpFloat = Helpers.TEOffsetFloat(data, i);
i += 2;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).OffsetV = tmpFloat;
}
}
}
#endregion OffsetV
#region Rotation
DefaultTexture.Rotation = Helpers.TERotationFloat(data, i);
i += 2;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
float tmpFloat = Helpers.TERotationFloat(data, i);
i += 2;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).Rotation = tmpFloat;
}
}
}
#endregion Rotation
#region Material
DefaultTexture.material = data[i];
i++;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
byte tmpByte = data[i];
i++;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).material = tmpByte;
}
}
}
#endregion Material
#region Media
DefaultTexture.media = data[i];
i++;
while (i - pos < length && ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
byte tmpByte = data[i];
i++;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).media = tmpByte;
}
}
}
#endregion Media
#region Glow
DefaultTexture.Glow = Helpers.TEGlowFloat(data, i);
i++;
while (ReadFaceBitfield(data, ref i, ref faceBits, ref bitfieldSize))
{
float tmpFloat = Helpers.TEGlowFloat(data, i);
i++;
for (uint face = 0, bit = 1; face < bitfieldSize; face++, bit <<= 1)
{
if ((faceBits & bit) != 0)
{
CreateFace(face).Glow = tmpFloat;
}
}
}
#endregion Glow
}