//============================= 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(); }
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(); }
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(); }
//============================= 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(); }