ace/Source/ACE.DatLoader/Entity/CellStruct.cs
Mag-nus bacd751d8a
ACE.DatLoader more IUnpackable work (#610)
* ACE.DatLoader: XpTable updated

* ACE.DatLoader physics and environment using new unpack pattern
2018-01-31 21:09:08 -06:00

49 lines
1.5 KiB
C#

using System.Collections.Generic;
using System.IO;
using ACE.Entity.Enum;
namespace ACE.DatLoader.Entity
{
public class CellStruct : IUnpackable
{
public CVertexArray VertexArray { get; } = new CVertexArray();
public Dictionary<ushort, Polygon> Polygons { get; } = new Dictionary<ushort, Polygon>();
public List<ushort> Portals { get; } = new List<ushort>();
public BSPTree CellBSP { get; } = new BSPTree();
public Dictionary<ushort, Polygon> PhysicsPolygons { get; } = new Dictionary<ushort, Polygon>();
public BSPTree PhysicsBSP { get; } = new BSPTree();
public BSPTree DrawingBSP { get; set; }
public void Unpack(BinaryReader reader)
{
int numPolygons = reader.ReadInt32();
int numPhysicsPolygons = reader.ReadInt32();
int numPortals = reader.ReadInt32();
VertexArray.Unpack(reader);
Polygons.Unpack(reader, numPolygons);
for (uint i = 0; i < numPortals; i++)
Portals.Add(reader.ReadUInt16());
reader.AlignBoundary();
CellBSP.Unpack(reader, BSPType.Cell);
PhysicsPolygons.Unpack(reader, numPhysicsPolygons);
PhysicsBSP.Unpack(reader, BSPType.Physics);
uint hasDrawingBSP = reader.ReadUInt32();
if (hasDrawingBSP != 0)
{
DrawingBSP = new BSPTree();
DrawingBSP.Unpack(reader, BSPType.Drawing);
}
reader.AlignBoundary();
}
}
}