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); }
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); }