Exemple #1
0
        public static Eco ReadFromStream(Stream stream)
        {
            Eco eco = new Eco();

            BinaryReader binaryReader = new BinaryReader(stream);

            eco.Index = binaryReader.ReadUInt32();

            eco.Name              = binaryReader.ReadNullTerminatedString();
            eco.ColorNXMap        = binaryReader.ReadNullTerminatedString();
            eco.SpecBlendNyMap    = binaryReader.ReadNullTerminatedString();
            eco.DetailRepeat      = binaryReader.ReadUInt32();
            eco.BlendStrength     = binaryReader.ReadSingle();
            eco.SpecMin           = binaryReader.ReadSingle();
            eco.SpecMax           = binaryReader.ReadSingle();
            eco.SpecSmoothnessMin = binaryReader.ReadSingle();
            eco.SpecSmoothnessMax = binaryReader.ReadSingle();
            eco.PhysicsMaterial   = binaryReader.ReadNullTerminatedString();

            eco.Layers = new List <Layer>();
            uint layerCount = binaryReader.ReadUInt32();

            for (uint i = 0; i < layerCount; i++)
            {
                Layer layer = new Layer();
                layer.Density      = binaryReader.ReadSingle();
                layer.MinScale     = binaryReader.ReadSingle();
                layer.MaxScale     = binaryReader.ReadSingle();
                layer.SlopePeak    = binaryReader.ReadSingle();
                layer.SlopeExtent  = binaryReader.ReadSingle();
                layer.MinElevation = binaryReader.ReadSingle();
                layer.MaxElevation = binaryReader.ReadSingle();
                layer.MinAlpha     = binaryReader.ReadByte();
                layer.Flora        = binaryReader.ReadNullTerminatedString();

                layer.Tints = new List <Layer.Tint>();
                uint tintCount = binaryReader.ReadUInt32();

                for (uint j = 0; j < tintCount; j++)
                {
                    Layer.Tint tint = new Layer.Tint();

                    byte r = binaryReader.ReadByte();
                    byte g = binaryReader.ReadByte();
                    byte b = binaryReader.ReadByte();
                    byte a = binaryReader.ReadByte();

                    tint.Color = new Color(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f);

                    tint.Percentage = binaryReader.ReadUInt32();

                    layer.Tints.Add(tint);
                }

                eco.Layers.Add(layer);
            }

            return(eco);
        }
Exemple #2
0
        public static Eco ReadFromStream(Stream stream)
        {
            Eco eco = new Eco();

            eco.Index = stream.ReadUInt32();

            eco.Name              = stream.ReadString(StringCoding.ZeroTerminated);
            eco.ColorNXMap        = stream.ReadString(StringCoding.ZeroTerminated);
            eco.SpecBlendNyMap    = stream.ReadString(StringCoding.ZeroTerminated);
            eco.DetailRepeat      = stream.ReadUInt32();
            eco.BlendStrength     = stream.ReadSingle();
            eco.SpecMin           = stream.ReadSingle();
            eco.SpecMax           = stream.ReadSingle();
            eco.SpecSmoothnessMin = stream.ReadSingle();
            eco.SpecSmoothnessMax = stream.ReadSingle();
            eco.PhysicsMaterial   = stream.ReadString(StringCoding.ZeroTerminated);

            eco.Layers = new List <Layer>();
            uint layerCount = stream.ReadUInt32();

            for (uint i = 0; i < layerCount; i++)
            {
                Layer layer = new Layer();
                layer.Density      = stream.ReadSingle();
                layer.MinScale     = stream.ReadSingle();
                layer.MaxScale     = stream.ReadSingle();
                layer.SlopePeak    = stream.ReadSingle();
                layer.SlopeExtent  = stream.ReadSingle();
                layer.MinElevation = stream.ReadSingle();
                layer.MaxElevation = stream.ReadSingle();
                layer.MinAlpha     = stream.Read1Byte();
                layer.Flora        = stream.ReadString(StringCoding.ZeroTerminated);

                layer.Tints = new List <Layer.Tint>();
                uint tintCount = stream.ReadUInt32();

                for (uint j = 0; j < tintCount; j++)
                {
                    Layer.Tint tint = new Layer.Tint();

                    tint.Color      = stream.ReadByteColor(ColorMemberOrder.AlphaLast);
                    tint.Percentage = stream.ReadUInt32();

                    layer.Tints.Add(tint);
                }

                eco.Layers.Add(layer);
            }

            return(eco);
        }