X-Git-Url: https://deadsoftware.ru/gitweb?p=cavedroid.git;a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavecraft%2Fgame%2FWorldGen.java;h=974cef4d39fd073bbabd9be170f2e3e89a76e50b;hp=32cb8f94a0f28db677a4045a177f3aec0cfbaf4a;hb=bea2a3c5b967bcd90ccd83e08e833d58449e963a;hpb=20c99e213303aee769c1bf6320881badb524384f diff --git a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java index 32cb8f9..974cef4 100644 --- a/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java +++ b/core/src/ru/deadsoftware/cavecraft/game/WorldGen.java @@ -1,8 +1,6 @@ package ru.deadsoftware.cavecraft.game; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.RandomXS128; -import com.badlogic.gdx.utils.ArrayMap; import com.badlogic.gdx.utils.TimeUtils; public class WorldGen { @@ -12,6 +10,7 @@ public class WorldGen { private static int[][] foreMap, backMap; private static int[] hMap; + private static int[] bMap; //biomes, 0-plains, 1-desert public static long getSeed() { return seed; @@ -19,60 +18,97 @@ public class WorldGen { static int[] genLandscape(int width, int mid, int min, int max) { int[] res = new int[width]; + bMap = new int[width]; int t; res[0] = mid; - for (int i=1; imax) res[i] = max; + for (int i = 1; i < width; i++) { + t = rand.nextInt(7) - 3; + if (t > -3 && t < 3) t = 0; + else t /= Math.abs(t); + if (i > width - (max - min)) { + if (res[i - 1] + t < res[0]) t = Math.abs(t); + else if (res[i - 1] + t > res[0]) t = -Math.abs(t); + } + res[i] = res[i - 1] + t; + if (res[i] < min) res[i] = min; + if (res[i] > max) res[i] = max; + if (i >= width / 2) { + bMap[i] = 1; + if (res[i] < 60) res[i] = 60; + } else { + bMap[i] = 0; + } } + if (res[0] < res[width - 1]) res[width - 1] = res[0]; return res; } + private static void genCactus(int x, int y) { + foreMap[x][y] = 59; + foreMap[x][y - 1] = 59; + foreMap[x][y - 2] = 59; + } + private static void genOak(int x, int y) { backMap[x][y] = 15; - backMap[x][y-1] = 15; - backMap[x][y-2] = 15; - backMap[x][y-3] = 15; - backMap[x][y-4] = 16; - backMap[x][y-5] = 16; - backMap[x-1][y-3] = 16; - backMap[x-1][y-4] = 16; - backMap[x+1][y-3] = 16; - backMap[x+1][y-4] = 16; - foreMap[x][y-3] = 16; - foreMap[x][y-4] = 16; - foreMap[x][y-5] = 16; - foreMap[x-1][y-3] = 16; - foreMap[x-1][y-4] = 16; - foreMap[x+1][y-3] = 16; - foreMap[x+1][y-4] = 16; + backMap[x][y - 1] = 15; + backMap[x][y - 2] = 15; + backMap[x][y - 3] = 15; + backMap[x][y - 4] = 16; + backMap[x][y - 5] = 16; + backMap[x - 1][y - 3] = 16; + backMap[x - 1][y - 4] = 16; + backMap[x + 1][y - 3] = 16; + backMap[x + 1][y - 4] = 16; + foreMap[x][y - 3] = 16; + foreMap[x][y - 4] = 16; + foreMap[x][y - 5] = 16; + foreMap[x - 1][y - 3] = 16; + foreMap[x - 1][y - 4] = 16; + foreMap[x + 1][y - 3] = 16; + foreMap[x + 1][y - 4] = 16; } static void genWorld(int width, int height) { genWorld(width, height, TimeUtils.millis()); } - static void genWorld(int width, int height, long s) { + static void genWorld(int width, int height, long worldseed) { int dirtH; - seed = s; + seed = worldseed; rand = new RandomXS128(seed); foreMap = new int[width][height]; backMap = new int[width][height]; - hMap = genLandscape(width, height/4, height/8, height/2); - for (int x=0; x2 && x 2 && x < width - 2) { + if (foreMap[x][height - hMap[x] - 1] == 0 && foreMap[x][height - hMap[x]] == 2) { + switch (rand.nextInt(50)) { + case 0: + genOak(x, height - hMap[x] - 1); + break; + case 1: + foreMap[x][height - hMap[x] - 1] = 26; + break; + case 2: + foreMap[x][height - hMap[x] - 1] = 29; + break; + case 3: + foreMap[x][height - hMap[x] - 1] = 30; + break; + case 4: + foreMap[x][height - hMap[x] - 1] = 31; + break; + case 5: + foreMap[x][height - hMap[x] - 1] = 32; + break; + } + } + if (foreMap[x][height - hMap[x] - 1] == 0 && foreMap[x][height - hMap[x]] == 10) { + switch (rand.nextInt(20)) { + case 0: + genCactus(x, height - hMap[x] - 1); + break; + case 1: + foreMap[x][height - hMap[x] - 1] = 27; + break; + } + } } } } @@ -103,5 +180,7 @@ public class WorldGen { static void clear() { foreMap = null; backMap = null; + hMap = null; + bMap = null; } }