protected void WriteMaterials() { List <Material> items = FindAllObjectsOfType <Material>(); DynaBuffer.WriteUInt32(items.Count); foreach (var mat in items) { DynaBuffer.WriteULongPascalString(mat.Name); byte modeByte = 0; if (mat.NoCulling) { modeByte |= (1 << 0); } if (mat.NoSorting) { modeByte |= (1 << 1); } if (mat.NoRadar) { modeByte |= (1 << 2); } if (mat.NoShadow) { modeByte |= (1 << 3); } if (mat.Occluder) { modeByte |= (1 << 4); } if (mat.GroupAlpha) { modeByte |= (1 << 5); } if (mat.NoLighting) { modeByte |= (1 << 6); } DynaBuffer.WriteByte(modeByte); DynaBuffer.WriteInt32(mat.DynamicColorRefrence); DynaBuffer.WriteColor4F(mat.Ambient); DynaBuffer.WriteColor4F(mat.Diffuse); DynaBuffer.WriteColor4F(mat.Specular); DynaBuffer.WriteColor4F(mat.Emission); DynaBuffer.WriteFloat(mat.Shininess); DynaBuffer.WriteFloat(mat.AlphaThreshold); DynaBuffer.WriteByte((byte)mat.Textures.Count); foreach (var tx in mat.Textures) { DynaBuffer.WriteULongPascalString(tx.Name); DynaBuffer.WriteInt32(tx.MatrixID); DynaBuffer.WriteInt32((Int32)tx.CombineMode); byte stateByte = 0; if (tx.UseAlpha) { stateByte |= (1 << 0); } if (tx.UseColor) { stateByte |= (1 << 1); } if (tx.UseSphereMap) { stateByte |= (1 << 2); } DynaBuffer.WriteByte(stateByte); } DynaBuffer.WriteByte((byte)mat.Shaders.Count); foreach (var s in mat.Shaders) { DynaBuffer.WriteULongPascalString(s); } } }