Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
            }
        }