using System.IO; namespace BOTWToolset.IO.EXTM { /// /// Interacts with water data in an .extm file, used in conjunction with . /// More info found on the ZeldaMods wiki. /// class Water { public ushort Height { get => _height; set => _height = value; } private ushort _height; public ushort XAxisFlowRate { get => _xAxisFlowRate; set => _xAxisFlowRate = value; } private ushort _xAxisFlowRate; public ushort ZAxisFlowRate { get => _zAxisFlowRate; set => _zAxisFlowRate = value; } private ushort _zAxisFlowRate; public byte MaterialIndex { get => _matIndex; set => _matIndex = value; } private byte _matIndex; public byte MaterialIndexChecksum { get { if (_matIndex != 0) return (byte)(_matIndex + 3); return _matIndex; } } /// /// Gets an array of from an array of bytes. /// /// The array of bytes to retrieve data from. /// [] data. public static Water[] FromBytes(byte[] bytes) { using (var r = new BinaryReaderBig(new MemoryStream(bytes))) { Water[] waters = new Water[r.BaseStream.Length / 8]; for (int i = 0; i < waters.Length; i++) { Water w = new Water { Height = r.ReadUInt16(), XAxisFlowRate = r.ReadUInt16(), ZAxisFlowRate = r.ReadUInt16() }; // Skip material index checksum r.BaseStream.Seek(1, SeekOrigin.Current); w.MaterialIndex = r.ReadByte(); waters[i] = w; } return waters; } } } }