package squidpony.examples; import squidpony.ArrayTools; import squidpony.squidgrid.FOV; import squidpony.squidgrid.Radius; import squidpony.squidgrid.mapping.DungeonGenerator; import squidpony.squidgrid.mapping.DungeonUtility; import squidpony.squidgrid.mapping.SerpentMapGenerator; import squidpony.squidmath.*; import java.util.ArrayList; /** * Created by Tommy Ettinger on 5/13/2016. */ public class FOVTest { public static int width = 100, height = 100, depth = 16; public static void main(String[] args) { StatefulRNG rng = new StatefulRNG(0xCAFEBA77L); DungeonGenerator dungeonGenerator = new DungeonGenerator(width, height, rng); dungeonGenerator.addDoors(15, true); dungeonGenerator.addWater(15); dungeonGenerator.addGrass(5); dungeonGenerator.addBoulders(5); SerpentMapGenerator organic = new SerpentMapGenerator(width, height, rng, 0.2); organic.putWalledBoxRoomCarvers(4); organic.putCaveCarvers(3); dungeonGenerator.generate(organic.generate()); char[][] dungeon = dungeonGenerator.getDungeon(); char[][] deco = DungeonUtility.doubleWidth(DungeonUtility.hashesToLines(dungeon, true)); //char[][] bare = dungeonGenerator.getBareDungeon(); dungeon[dungeonGenerator.stairsUp.x][dungeonGenerator.stairsUp.y] = '<'; dungeon[dungeonGenerator.stairsDown.x][dungeonGenerator.stairsDown.y] = '>'; double[][] resMap = DungeonUtility.generateResistances(dungeon); FOV fov = new FOV(FOV.SHADOW); ArrayList<double[][]> fovMaps = new ArrayList<>(8); GreasedRegion floors = new GreasedRegion(dungeon, '.'); Coord pt = floors.singleRandom(rng); Coord start = pt; OrderedSet<Coord> points = new OrderedSet<>(20); double[][] losMap = ArrayTools.copy(fov.calculateLOSMap(resMap, pt.x, pt.y)); LFSR tumbler = new LFSR(0x123456789ABCDEF0L); for (int i = 0; i < 20; i++) { points.add(pt = floors.atFraction(tumbler.nextDouble())); double rad = rng.between(5.0, 12.0); fovMaps.add(ArrayTools.copy(fov.calculateFOV(resMap, pt.x, pt.y, rad, Radius.CIRCLE))); } double[][] result = FOV.mixVisibleFOVs(losMap, fovMaps); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if(dungeon[x][y] == '#') { System.out.print(deco[x * 2][y]); System.out.print(deco[x * 2 + 1][y]); } else if (start.x == x && start.y == y) { System.out.print("!!"); } else if(points.contains(Coord.get(x, y))) { System.out.print("**"); } else { System.out.print(' '); System.out.print(Math.round(result[x][y] * 9.4999)); } } System.out.println(); } System.out.println("\n"); result = FOV.addFOVs(fovMaps); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if(dungeon[x][y] == '#') { System.out.print(deco[x * 2][y]); System.out.print(deco[x * 2 + 1][y]); } else if (start.x == x && start.y == y) { System.out.print("!!"); } else if(points.contains(Coord.get(x, y))) { System.out.print("**"); } else { System.out.print(' '); System.out.print(Math.round(result[x][y] * 9.4999)); } } System.out.println(); } System.out.println(); } }