コード例 #1
0
        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);
                }
            }
        }