public override void ReadFromBuffer(NetIncomingMessage buffer) { MessageType = (MapMessage)buffer.ReadByte(); switch (MessageType) { case MapMessage.TurfUpdate: SingleTurf = new Turf() { X = buffer.ReadInt32(), Y = buffer.ReadInt32(), Tile = buffer.ReadUInt32() }; break; case MapMessage.SendTileMap: GridIndex = buffer.ReadInt32(); MapIndex = buffer.ReadInt32(); //tile defs var numTileDefs = buffer.ReadInt32(); var tileDefs = new TileDef[numTileDefs]; for (var i = 0; i < numTileDefs; i++) { tileDefs[i] = new TileDef() { Name = buffer.ReadString() }; } TileDefs = tileDefs; // map chunks ChunkSize = buffer.ReadUInt16(); var numChunks = buffer.ReadInt32(); ChunkDefs = new ChunkDef[numChunks]; for (var i = 0; i < numChunks; i++) { var newChunk = new ChunkDef() { X = buffer.ReadInt32(), Y = buffer.ReadInt32() }; var chunkCount = ChunkSize * ChunkSize; var tiles = new uint[chunkCount]; for (var j = 0; j < chunkCount; j++) { tiles[j] = buffer.ReadUInt32(); } newChunk.Tiles = tiles; ChunkDefs[i] = newChunk; } break; case MapMessage.SendMapInfo: MapGridsToSend = buffer.ReadInt32(); break; } }
private Dictionary <ulong, ChunkDef> GetLayerIndexTable(TMXMapDef tmx, int layerName) { if (tmx == null) { return(null); } var fileName = tmx.realPathName + "layer_" + layerName.ToString("x") + "_index"; var cached = tmx.mLayerIndexLRU.Get(fileName); if (cached != null) { return(cached); } var indexTableFile = Resources.Load <TextAsset>(fileName); if (indexTableFile == null) { Debug.Log("TMX could not find layer index table"); return(null); } try { var reader = new BinaryReader(new MemoryStream(indexTableFile.bytes)); int byteSize = 0; int chunkCount = reader.ReadInt32(); byteSize += 4; var table = new Dictionary <ulong, ChunkDef>(); // Return empty table if there are no chunks if (chunkCount == 0) { return(table); } for (int i = 0; i < chunkCount; i++) { var chunkDef = new ChunkDef(); ulong offset = reader.ReadUInt64(); byteSize += 8; chunkDef.segmentIndex = reader.ReadUInt16(); byteSize += 2; chunkDef.segmentOffset = reader.ReadUInt16(); byteSize += 2; chunkDef.compressedLength = reader.ReadUInt16(); byteSize += 2; table[offset] = chunkDef; } tmx.mLayerIndexLRU.Add(fileName, table, byteSize); return(table); } catch (IOException e) { Debug.Log("Failed to load layer index from file " + fileName + ", " + e.ToString()); return(null); } }