//=============================

        public GeoBlockMultiLayer(GeoReader reader, int geoX, int geoY, bool l2j) : base(geoX, geoY)
        {
            _cells3D = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT, GeoEngine.GEO_BLOCK_SHIFT][];
            //
            int layers, count = 0;

            for (int x = 0; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
            {
                for (int y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
                {
                    layers = l2j ? reader.get() : reader.getShort();
                    if (!GeoEngine.layersValid(layers))
                    {
                        throw new Exception("Invalid layer count " + layers);
                    }
                    //
                    count         += layers;
                    _cells3D[x, y] = new GeoCell[layers];
                    for (int i = layers; i-- > 0;)
                    {
                        _cells3D[x, y][i] = new GeoCellCM(this, reader.getShort(), x, y);
                    }
                    //Util.quickSort(_cells3D[x,y], HeightComparator.Compare);
                }
            }
            //
            copyCells(count);
            calcMaxMinHeight();
        }
Ejemplo n.º 2
0
 private GeoBlockComplex(GeoBlockMultiLayer block) : base(block.getGeoX(), block.getGeoY())
 {
     _cells = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT * GeoEngine.GEO_BLOCK_SHIFT];
     for (int x = 0, y; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
     {
         for (y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
         {
             _cells[indexOf(x, y)] = new GeoCellCM(this, block.nGetCellByLayer(x, y, block.nGetLayerCount(x, y) - 1).getHeightAndNSWE(), x, y);
         }
     }
     calcMaxMinHeight();
 }
Ejemplo n.º 3
0
 private GeoBlockComplex(GeoBlockFlat block) : base(block.getGeoX(), block.getGeoY())
 {
     _cells = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT * GeoEngine.GEO_BLOCK_SHIFT];
     for (int x = 0, y; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
     {
         for (y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
         {
             _cells[indexOf(x, y)] = new GeoCellCM(this, GeoEngine.convertHeightToHeightAndNSWEALL(block.getMinHeight()), x, y);
         }
     }
     calcMaxMinHeight();
 }
Ejemplo n.º 4
0
        //=============================

        public GeoBlockComplex(GeoReader reader, int geoX, int geoY, bool l2j) : base(geoX, geoY)
        {
            _cells = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT * GeoEngine.GEO_BLOCK_SHIFT];
            for (int x = 0, y; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
            {
                for (y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
                {
                    _cells[indexOf(x, y)] = new GeoCellCM(this, reader.getShort(), x, y);
                }
            }
            calcMaxMinHeight();
        }
        public override GeoCell addLayer(int geoX, int geoY, short heightAndNSWE)
        {
            int     cellX = GeoEngine.getCellXY(geoX);
            int     cellY = GeoEngine.getCellXY(geoY);
            GeoCell cell  = new GeoCellCM(this, heightAndNSWE, cellX, cellY);

            GeoCell[] layers = _cells3D[cellX, cellY];
            _cells3D[cellX, cellY] = Util.arrayAdd(layers, cell);
            _cells = Util.arrayAdd(_cells, cell);
            Util.quickSort(layers, HeightComparator.Compare);
            updateMinMaxHeight(cell.getHeight(), short.MinValue);
            return(cell);
        }
 private GeoBlockMultiLayer(GeoBlockComplex block) : base(block.getGeoX(), block.getGeoY())
 {
     _cells3D = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT, GeoEngine.GEO_BLOCK_SHIFT][];
     _cells   = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT * GeoEngine.GEO_BLOCK_SHIFT];
     for (int x = 0; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
     {
         for (int y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
         {
             GeoCell cell = new GeoCellCM(this, block.nGetCellByLayer(x, y, 0).getHeightAndNSWE(), x, y);
             _cells3D[x, y]    = new GeoCell[1];
             _cells3D[x, y][0] = cell;
             _cells[x * GeoEngine.GEO_BLOCK_SHIFT + y] = cell;
         }
     }
     calcMaxMinHeight();
 }
 private GeoBlockMultiLayer(GeoBlockFlat block) : base(block.getGeoX(), block.getGeoY())
 {
     _cells3D = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT, GeoEngine.GEO_BLOCK_SHIFT][];
     _cells   = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT * GeoEngine.GEO_BLOCK_SHIFT];
     //
     for (int x = 0; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
     {
         for (int y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
         {
             GeoCell cell = new GeoCellCM(this, GeoEngine.convertHeightToHeightAndNSWEALL(block.getMinHeight()), x, y);
             _cells3D[x, y]    = new GeoCell[1];
             _cells3D[x, y][0] = cell;
             _cells[x * GeoEngine.GEO_BLOCK_SHIFT + y] = cell;
         }
     }
     calcMaxMinHeight();
 }
        private GeoBlockMultiLayer(GeoBlockMultiLayer block) : base(block.getGeoX(), block.getGeoY())
        {
            _cells3D = new GeoCell[GeoEngine.GEO_BLOCK_SHIFT, GeoEngine.GEO_BLOCK_SHIFT][];
            //
            int layers, count = 0;

            for (int x = 0; x < GeoEngine.GEO_BLOCK_SHIFT; x++)
            {
                for (int y = 0; y < GeoEngine.GEO_BLOCK_SHIFT; y++)
                {
                    layers         = block.nGetLayerCount(x, y);
                    count         += layers;
                    _cells3D[x, y] = new GeoCell[layers];
                    while (layers-- > 0)
                    {
                        GeoCell cell = new GeoCellCM(this, block.nGetCellByLayer(x, y, layers).getHeightAndNSWE(), x, y);
                        _cells3D[x, y][layers] = cell;
                    }
                }
            }
            //
            copyCells(count);
            calcMaxMinHeight();
        }