예제 #1
0
        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;
        }
예제 #2
0
        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;
        }
예제 #3
0
        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);
        }