private final void iteration_h( Array2D windMap, Array2D heightMap, int x, int z, float dx, float dz, int xIt, float windDescentRate) { // Assume either dx or dz is 1f and the other is less. float z_precise = z; float elevation = initialElevation; int lastZ; dz /= Math.abs(dx); windDescentRate /= Math.abs(dx); iteration: while (true) { lastZ = z; while (z == lastZ) { elevation = Math.max(minWindHeight, elevation - windDescentRate); float height = heightMap.get(x, z); if (elevation < height) elevation = height; windMap.set(x, z, elevation - heightMap.get(x, z)); x += xIt; z_precise += dz; z = (int) z_precise; if (x < 0 || x >= windMap.width || z < 0 || z >= windMap.height) break iteration; } } }
private final void iteration_v( Array2D windMap, Array2D heightMap, int x, int z, float dx, float dz, int zIt, float windDescentRate) { // Assume either dx or dz is 1f and the other is less. float x_precise = x; float elevation = initialElevation; int lastX; dx /= Math.abs(dz); windDescentRate /= Math.abs(dz); iteration: while (true) { lastX = x; while (x == lastX) { elevation = Math.max(minWindHeight, elevation - windDescentRate); float height = heightMap.get(x, z); if (elevation < height) elevation = height; windMap.set(x, z, elevation - heightMap.get(x, z)); z += zIt; x_precise += dx; x = (int) x_precise; if (x < 0 || x >= windMap.width || z < 0 || z >= windMap.height) break iteration; } } }