public unsafe WmoGroup(byte[] data) { fixed(byte *p = data) { Chunks = ChunkCollector.CreateChunks(p, p + data.Length, CreateChunk); } }
public unsafe void ParseSecondaryData(byte[] data) { fixed(byte *p = data) { _mcnkCounter = 0; Chunks = Chunks.Concat(ChunkCollector.CreateChunks(p, p + data.Length, ExtendChunk)); } }
internal unsafe void ParseOptionalData(ChunkHeader *header) { header->ValidateMagic("MCNK"); var cur = (byte *)header + sizeof(ChunkHeader); Chunks = Chunks.Concat(ChunkCollector.CreateChunks(cur, cur + header->Size, CreateChunks)); }
public unsafe Wmo(byte[] data, Func <int, WmoGroup> groupFactory) { fixed(byte *p = data) { Chunks = ChunkCollector.CreateChunks(p, p + data.Length, CreateChunk); } Groups = Enumerable.Range(0, _mohd.GroupCount).Select(groupFactory).ToArray(); }
internal unsafe MogpChunk(ChunkHeader *header) : base(header) { var mogp = (Mogp *)(header + 1); LiquidType = mogp->liquidType; GroupFlags = mogp->flags; var p = (byte *)mogp; Chunks = ChunkCollector.CreateChunks(p + sizeof(Mogp), p + header->Size, CreateChunk); }
internal unsafe MapChunk(ChunkHeader *header) : base(header) { header->ValidateMagic("MCNK"); var cur = (byte *)header + sizeof(ChunkHeader); ParseMcnkHeader(cur); Chunks = ChunkCollector.CreateChunks(cur + sizeof(McnkHeader), cur + header->Size, CreateChunks); }
public unsafe Adt(byte[] data) { MapChunks = new List <MapChunk>(McnksPerAdt); fixed(byte *p = data) { Chunks = ChunkCollector.CreateChunks(p, p + data.Length, CreateChunk); } if (MapChunks.Count != McnksPerAdt) { throw new MapChunkCountException(McnksPerAdt, MapChunks.Count); } var mid = MapChunks[120].Bounds.Minimum; X = (int)Math.Floor(32.0f - mid.Y / AdtWidth); Y = (int)Math.Floor(32.0f - mid.X / AdtWidth); Bounds = RoundToAdtBounds(MapChunks.Aggregate(Nothing, (b, c) => BoundingBox.Merge(b, c.Bounds))); TrySetChunkLiquids(); WmoDefinitions = DoodadDefinitions = EmptyDefinitions; WmoReferences = DoodadReferences = EmptyReferences; }