mirror of
https://github.com/chev2/botw-toolset.git
synced 2025-10-30 08:12:17 +00:00
65 lines
2.1 KiB
C#
65 lines
2.1 KiB
C#
using System.IO;
|
|
|
|
namespace BOTWToolset.IO.EXTM
|
|
{
|
|
/// <summary>
|
|
/// Interacts with water data in an .extm file, used in conjunction with <see cref="TSCB.TSCB"/>.
|
|
/// More info found on the <see href="https://zeldamods.org/wiki/Water.extm">ZeldaMods wiki</see>.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets an array of <see cref="Water"/> from an array of bytes.
|
|
/// </summary>
|
|
/// <param name="bytes">The array of bytes to retrieve <see cref="Water"/> data from.</param>
|
|
/// <returns><see cref="Water"/>[] data.</returns>
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|