public void createCircularField(Map map, Vector2D centerPosition, int terrainType, int size) { if (size < 1) return; int TILE_SIZE = 32; float halfATile = TILE_SIZE / 2; // convert to absolute pixel coordinates Vector2D asPixelsCentered = map.getCellCoordinatesInAbsolutePixels( centerPosition.getXAsInt(), centerPosition.getYAsInt()) .add(Vector2D.create(halfATile, halfATile)); double centerX = asPixelsCentered.getX(); double centerY = asPixelsCentered.getY(); for (int rangeStep = 0; rangeStep < size; rangeStep++) { // range 'steps' for (int degrees = 0; degrees < 360; degrees++) { // calculate as if we would draw a circle and remember the coordinates float rangeInPixels = (rangeStep * TILE_SIZE); double circleX = (centerX + (Trigonometry.cos[degrees] * rangeInPixels)); double circleY = (centerY + (Trigonometry.sin[degrees] * rangeInPixels)); // convert back the pixel coordinates back to a cell Cell cell = map.getCellByAbsoluteMapCoordinates( Coordinate.create((int) Math.ceil(circleX), (int) Math.ceil(circleY))); putTerrainOnCell(map, cell.getX(), cell.getY(), terrainType); } } }
private void fillMapWithRandomTerrainTypeFields(Map map) { System.out.println("Putting terrain on map"); fillMapWithTerrain(map, DuneTerrain.TERRAIN_SAND); createCircularField(map, Vector2D.create(0, 0), DuneTerrain.TERRAIN_ROCK, 20); createCircularField( map, Vector2D.create(map.getWidth(), map.getHeight()), DuneTerrain.TERRAIN_ROCK, 20); for (int f = 0; f < 5; f++) { Vector2D randomVec = Vector2D.random(15, 45, 15, 45); createCircularField(map, randomVec, DuneTerrain.TERRAIN_SPICE, 6); createField(map, randomVec, DuneTerrain.TERRAIN_SPICE, 200); createField(map, randomVec, DuneTerrain.TERRAIN_SPICE_HILL, 50); } for (int f = 0; f < 5; f++) { Vector2D randomVec = Vector2D.random(15, 45, 15, 45); createCircularField(map, randomVec, DuneTerrain.TERRAIN_ROCK, 6); createField(map, randomVec, DuneTerrain.TERRAIN_ROCK, 100); // createField(map, randomVec, DuneTerrain.TERRAIN_MOUNTAIN, 25); } }
public void createField(Map map, Vector2D startVector, int terrainType, int size) { Vector2D position = startVector; for (int i = 0; i < size; i++) { position = position.add(Vector2D.create(-1 + Random.getInt(3), -1 + Random.getInt(3))); Cell cellProtected = map.getCellProtected(position.getXAsInt(), position.getYAsInt()); if (!cellProtected.getMapCoordinate().equals(position)) { position = cellProtected.getMapCoordinate(); } putTerrainOnCell(map, position.getXAsInt(), position.getYAsInt(), terrainType); } }