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); }
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); }