public GeoRegion(int regionX, int regionY, GeoReader reader, bool l2j, string file) { _file = file; _regionX = regionX; _regionY = regionY; _minGeoX = GeoEngine.getGeoXY(regionX, 0); _maxGeoX = GeoEngine.getGeoXY(regionX, GeoEngine.GEO_REGION_SIZE - 1); _minGeoY = GeoEngine.getGeoXY(regionY, 0); _maxGeoY = GeoEngine.getGeoXY(regionY, GeoEngine.GEO_REGION_SIZE - 1); _geoBlocks = new GeoBlock[GeoEngine.GEO_REGION_SIZE, GeoEngine.GEO_REGION_SIZE]; _geoBlocksData = new GeoByteBuffer[GeoEngine.GEO_REGION_SIZE, GeoEngine.GEO_REGION_SIZE]; // GeoBlock block; GeoByteBuffer writer; for (int blockX = 0, blockY; blockX < GeoEngine.GEO_REGION_SIZE; blockX++) { for (blockY = 0; blockY < GeoEngine.GEO_REGION_SIZE; blockY++) { block = readBlock(blockX, blockY, reader, l2j); _geoBlocks[blockX, blockY] = block; writer = GeoByteBuffer.allocate(block.getRequiredCapacity(true)); block.writeTo(writer, true); _geoBlocksData[blockX, blockY] = writer; } } }
private GeoBlock readBlock(int blockX, int blockY, GeoReader reader, bool l2j) { int geoX = GeoEngine.getGeoXY(_regionX, blockX); int geoY = GeoEngine.getGeoXY(_regionY, blockY); int type = getType(reader, l2j); switch (type) { case GeoEngine.GEO_BLOCK_TYPE_FLAT: return(new GeoBlockFlat(reader, geoX, geoY, l2j).setRegion(this)); case GeoEngine.GEO_BLOCK_TYPE_COMPLEX: return(new GeoBlockComplex(reader, geoX, geoY, l2j).setRegion(this)); case GeoEngine.GEO_BLOCK_TYPE_MULTILAYER: return(new GeoBlockMultiLayer(reader, geoX, geoY, l2j).setRegion(this)); default: throw new ArgumentException("Unknown type: " + type); } }
public int getGeoY(int blockY) { return(GeoEngine.getGeoXY(getRegionY(), blockY)); }
public int getGeoX(int blockX) { return(GeoEngine.getGeoXY(getRegionX(), blockX)); }