Advertisement
Guest User

Untitled

a guest
Jul 31st, 2016
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.01 KB | None | 0 0
  1. HashMap<Point, Set<Integer>> connectorRegions = new HashMap<Point, Set<Integer>>();
  2.        
  3.         for(int yi = 1; yi < dHeight- 1; yi++){
  4.             for(int xi = 1; xi < dWidth - 1; xi++){
  5.                 Point pos = new Point(xi, yi);
  6.                 if(getTile(pos.x, pos.y) != Tile.CAVE_WALL) continue;
  7.                
  8.                 Set<Integer> regions = new HashSet<Integer>();
  9.                 for(Point dir : cardinal){
  10.                     Point indexer = new Point(pos.x + dir.x, pos.y + dir.y);
  11.                     int region = this.regions[indexer.x][indexer.y];
  12.                     if(region != -1) regions.add(region);
  13.                 }
  14.                
  15.                 if(regions.size() < 2) continue;
  16.                
  17.                 connectorRegions.put(pos, regions);
  18.             }
  19.        
  20.             List<Point> connectors = new ArrayList<Point>();
  21.            
  22.             for(Point key : connectorRegions.keySet()){
  23.                 connectors.add(key);
  24.             }
  25.            
  26.             List<Integer> merged = new ArrayList<Integer>();
  27.             Set<Integer> openRegions = new HashSet<Integer>();
  28.             for(int i = 0; i < currentRegion; i++){
  29.                 merged.add(i, i);
  30.                 openRegions.add(i);
  31.             }
  32.            
  33.             while(openRegions.size() > 1){
  34.                 Point connector = connectors.get(random.nextInt(connectors.size()));
  35.                 addJunction(connector);
  36.                
  37.                 List<Integer> regions = connectorRegions.get(connector).stream().map((region) -> merged.get(region)).collect(Collectors.toList());
  38.                
  39.                 int dest = regions.get(0);
  40.                 List<Integer> sources = regions.subList(1, regions.size());
  41.                
  42.                 for(int i = 0; i <= currentRegion; i++){
  43.                     if(sources.contains(merged.get(i))) merged.set(i, dest);
  44.                 }
  45.                
  46.                 openRegions.removeAll(sources);
  47.  
  48.                 connectors.removeIf((pos) -> {
  49.                     List<Integer> regionss = connectorRegions.get(pos).stream().map((region) -> merged.get(region)).collect(Collectors.toList());
  50.                    
  51.                     if(regionss.size() > 1) return false;
  52.                     if(random.nextInt(100) < extraConnectorChance){
  53.                         for(Point dir : cardinal){
  54.                             Point indexer = new Point(pos.x + dir.x, pos.y + dir.y);
  55.                             if(tiles[indexer.x][indexer.y] == Tile.DOOR) return true;
  56.                         }
  57.                         addJunction(pos);
  58.                     }
  59.                     return true;
  60.                 });            
  61.             }
  62.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement