Example #1
0
        public void SendMap(INetChannel channel)
        {
            if (_netManager.IsClient)
            {
                return;
            }

            Debug.Assert(_netManager.IsServer, "Why is the client calling this?");

            Logger.Info(channel.RemoteAddress + ": Sending map");

            var quantityGridsSent = 0;

            foreach (var map in GetAllMaps())
            {
                foreach (var grid in map.GetAllGrids())
                {
                    quantityGridsSent++;
                    var message = _netManager.CreateNetMessage <MsgMap>();
                    message.MessageType = MapMessage.SendTileMap;
                    message.MapIndex    = map.Index;
                    message.GridIndex   = grid.Index;

                    // Map chunks
                    var gridSize = grid.ChunkSize;
                    message.ChunkSize = gridSize;
                    message.ChunkDefs = new MsgMap.ChunkDef[grid.ChunkCount];
                    var defCounter = 0;
                    foreach (var chunk in grid.GetMapChunks())
                    {
                        var newChunk = new MsgMap.ChunkDef
                        {
                            X = chunk.X,
                            Y = chunk.Y
                        };

                        newChunk.Tiles = new uint[gridSize * gridSize];
                        var counter = 0;
                        foreach (var tile in chunk)
                        {
                            newChunk.Tiles[counter] = (uint)tile.Tile;
                            counter++;
                        }

                        message.ChunkDefs[defCounter++] = newChunk;
                    }

                    _netManager.ServerSendMessage(message, channel);
                }
            }
            var msg = _netManager.CreateNetMessage <MsgMap>();

            msg.MessageType    = MapMessage.SendMapInfo;
            msg.MapGridsToSend = quantityGridsSent;
            _netManager.ServerSendMessage(msg, channel);
        }
        /// <inheritdoc />
        public void SendMap(INetChannel channel)
        {
            Debug.Assert(_netManager.IsServer, "Why is the client calling this?");

            //TODO: This should be a part of the network message, so that multiple maps(z-levels) are possible.
            const int MAP_INDEX = 0;

            Logger.Log(channel.RemoteAddress + ": Sending map");

            var message = _netManager.CreateNetMessage <MsgMap>();

            message.MessageType = MapMessage.SendTileMap;
            message.MapIndex    = MAP_INDEX;
            // Tile definition mapping
            message.TileDefs = new MsgMap.TileDef[_defManager.Count];

            for (var i = 0; i < _defManager.Count; i++)
            {
                message.TileDefs[i] = new MsgMap.TileDef()
                {
                    Name = _defManager[i].Name
                };
            }

            // Map chunks
            var grid     = _mapManager.GetGrid(MAP_INDEX);
            var gridSize = grid.ChunkSize;

            message.ChunkSize = gridSize;
            message.ChunkDefs = new MsgMap.ChunkDef[grid.ChunkCount];
            var defCounter = 0;

            foreach (var chunk in grid.GetMapChunks())
            {
                var newChunk = new MsgMap.ChunkDef()
                {
                    X = chunk.X,
                    Y = chunk.Y
                };

                newChunk.Tiles = new uint[gridSize * gridSize];
                var counter = 0;
                foreach (var tile in chunk)
                {
                    newChunk.Tiles[counter] = (uint)tile.Tile;
                    counter++;
                }

                message.ChunkDefs[defCounter++] = newChunk;
            }

            _netManager.ServerSendMessage(message, channel);
        }
Example #3
0
        public void SendMap(INetChannel connection)
        {
            Logger.Log($"[MAP] {connection.RemoteAddress}: Sending map");

            var net     = IoCManager.Resolve <IServerNetManager>();
            var message = net.CreateNetMessage <MsgMap>();

            message.MessageType = MapMessage.SendTileMap;
            message.Version     = 1; // Format version.  Who knows, it could come in handy.

            // Tile definition mapping
            var tileDefManager = IoCManager.Resolve <ITileDefinitionManager>();

            // tile defs
            message.TileDefs = new MsgMap.TileDef[tileDefManager.Count];
            for (var tileId = 0; tileId < tileDefManager.Count; ++tileId)
            {
                message.TileDefs[tileId] = new MsgMap.TileDef
                {
                    Name = tileDefManager[tileId].Name
                };
            }

            var counter = 0;

            message.ChunkDefs = new MsgMap.ChunkDef[chunks.Count];

            foreach (var chunk in chunks)
            {
                var chk = new MsgMap.ChunkDef
                {
                    X    = chunk.Key.X,
                    Y    = chunk.Key.Y,
                    Defs = new MsgMap.TileDef[chunk.Value.Tiles.Length]
                };

                var tileIndex = 0;
                foreach (var tile in chunk.Value.Tiles)
                {
                    chk.Defs[tileIndex++] = new MsgMap.TileDef
                    {
                        Tile = (uint)tile
                    };
                }

                message.ChunkDefs[counter++] = chk;
            }

            net.ServerSendMessage(message, connection);
            Logger.Log($"[MAP] {connection.RemoteAddress}: Finished sending map");
        }
        /// <inheritdoc />
        public void SendMap(INetChannel channel)
        {
            Debug.Assert(_netManager.IsServer, "Why is the client calling this?");

            Logger.Log(channel.RemoteAddress + ": Sending map");

            int QuantityGridsSent = 0;

            foreach (Map Map in GetAllMaps())
            {
                foreach (IMapGrid Grid in Map.GetAllGrids())
                {
                    QuantityGridsSent++;
                    var message = _netManager.CreateNetMessage <MsgMap>();
                    message.MessageType = MapMessage.SendTileMap;
                    message.MapIndex    = Map.Index;
                    message.GridIndex   = Grid.Index;
                    // Tile definition mapping
                    message.TileDefs = new MsgMap.TileDef[_defManager.Count];

                    for (var i = 0; i < _defManager.Count; i++)
                    {
                        message.TileDefs[i] = new MsgMap.TileDef()
                        {
                            Name = _defManager[i].Name
                        };
                    }

                    // Map chunks
                    var grid     = _mapManager.GetMap(Map.Index).GetGrid(Grid.Index);
                    var gridSize = grid.ChunkSize;
                    message.ChunkSize = gridSize;
                    message.ChunkDefs = new MsgMap.ChunkDef[grid.ChunkCount];
                    var defCounter = 0;
                    foreach (var chunk in grid.GetMapChunks())
                    {
                        var newChunk = new MsgMap.ChunkDef()
                        {
                            X = chunk.X,
                            Y = chunk.Y
                        };

                        newChunk.Tiles = new uint[gridSize * gridSize];
                        var counter = 0;
                        foreach (var tile in chunk)
                        {
                            newChunk.Tiles[counter] = (uint)tile.Tile;
                            counter++;
                        }

                        message.ChunkDefs[defCounter++] = newChunk;
                    }

                    _netManager.ServerSendMessage(message, channel);
                }
            }
            var mapmessage = _netManager.CreateNetMessage <MsgMap>();

            mapmessage.MessageType    = MapMessage.SendMapInfo;
            mapmessage.MapGridsToSend = QuantityGridsSent;
            _netManager.ServerSendMessage(mapmessage, channel);
        }