private void GetMapBlocks() { try { blockRequesterIsRunning = true; while (true) { MapBlockRequester item = null; if (m_blockitemsToRequest.Count > 0) { item = m_blockitemsToRequest.Dequeue(); } if (item == null) { break; } List <MapBlockData> mapBlocks = new List <MapBlockData>(); List <GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, (item.minX - 4) * Constants.RegionSize, (item.maxX + 4) * Constants.RegionSize, (item.minY - 4) * Constants.RegionSize, (item.maxY + 4) * Constants.RegionSize); foreach (GridRegion region in regions) { if ((item.mapBlocks & 0) == 0 || (item.mapBlocks & 0x10000) != 0) { mapBlocks.Add(MapBlockFromGridRegion(region)); } else if ((item.mapBlocks & 1) == 1) { mapBlocks.Add(TerrainBlockFromGridRegion(region)); } else if ((item.mapBlocks & 2) == 2) //V2 viewer, we need to deal with it a bit { mapBlocks.AddRange(Map2BlockFromGridRegion(region)); } } item.remoteClient.SendMapBlock(mapBlocks, item.mapBlocks); Thread.Sleep(5); } } catch (Exception) { } blockRequesterIsRunning = false; }
void GetMapBlocks() { try { blockRequesterIsRunning = true; while (true) { MapBlockRequester item = null; if (!m_blockitemsToRequest.TryDequeue(out item)) { break; } List <MapBlockData> mapBlocks = new List <MapBlockData>(); if (item.minX == item.maxX && item.minY == item.maxY) { List <GridRegion> regions = m_scene.GridService.GetRegionRange(item.remoteClient.AllScopeIDs, (item.minX) * Constants.RegionSize, (item.maxX) * Constants.RegionSize, (item.minY) * Constants.RegionSize, (item.maxY) * Constants.RegionSize); foreach (GridRegion region in regions) { if ((item.mapBlocks & 1) == 1) { mapBlocks.Add(TerrainBlockFromGridRegion(region)); } else if ((item.mapBlocks & 2) == 2) //V2 viewer, we need to deal with it a bit { mapBlocks.AddRange(Map2BlockFromGridRegion(region)); } else { mapBlocks.Add(MapBlockFromGridRegion(region, region.RegionLocX, region.RegionLocY)); } } if (regions.Count == 0) { mapBlocks.Add(MapBlockFromGridRegion(null, item.minX, item.minY)); } item.remoteClient.SendMapBlock(mapBlocks, item.mapBlocks); Thread.Sleep(5); } else { List <GridRegion> regions = m_scene.GridService.GetRegionRange(item.remoteClient.AllScopeIDs, (item.minX - 4) * Constants.RegionSize, (item.maxX + 4) * Constants.RegionSize, (item.minY - 4) * Constants.RegionSize, (item.maxY + 4) * Constants.RegionSize); foreach (GridRegion region in regions) { if ((item.mapBlocks & 1) == 1) { mapBlocks.Add(TerrainBlockFromGridRegion(region)); } else if ((item.mapBlocks & 2) == 2) //V2 viewer, we need to deal with it a bit { mapBlocks.AddRange(Map2BlockFromGridRegion(region)); } else { mapBlocks.Add(MapBlockFromGridRegion(region, region.RegionLocX, region.RegionLocY)); } } item.remoteClient.SendMapBlock(mapBlocks, item.mapBlocks); Thread.Sleep(5); } } } catch (Exception) { } blockRequesterIsRunning = false; }
private bool GetMapBlocks() { try { blockRequesterIsRunning = true; for (int i = 0; i < m_blockitemsToRequest.Count; i++) { MapBlockRequester item = m_blockitemsToRequest[i]; if (item == null) { continue; } List <MapBlockData> mapBlocks = new List <MapBlockData>(); //bool foundAll = true; /*for (int X = item.minX; i < item.maxX; i++) * { * for (int Y = item.minY; i < item.maxY; i++) * { * if (mapBlockCache[X, Y] != null) * { * mapBlocks.Add(mapBlockCache[X, Y]); * } * else foundAll = false; * } * } * if (!foundAll) * {*/ List <GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, (item.minX - 4) * (int)Constants.RegionSize, (item.maxX + 4) * (int)Constants.RegionSize, (item.minY - 4) * (int)Constants.RegionSize, (item.maxY + 4) * (int)Constants.RegionSize); foreach (GridRegion region in regions) { //mapBlockCache[region.RegionLocX / 256, region.RegionLocY / 256] = MapBlockFromGridRegion(region); if (item.mapBlocks == 0) { mapBlocks.Add(MapBlockFromGridRegion(region)); } else if (item.mapBlocks == 1) { mapBlocks.Add(TerrainBlockFromGridRegion(region)); } } /*} * else * { * }*/ //Fill in blank ones FillInMap(mapBlocks, item.minX, item.minY, item.maxX, item.maxY); item.remoteClient.SendMapBlock(mapBlocks, item.mapBlocks); } m_blockitemsToRequest.Clear(); } catch (Exception) { } blockRequesterIsRunning = false; return(true); }