v3s16 rand_ortho_dir(PseudoRandom &random) { if (random.next() % 2 == 0) return random.next() % 2 ? v3s16(-1, 0, 0) : v3s16(1, 0, 0); else return random.next() % 2 ? v3s16(0, 0, -1) : v3s16(0, 0, 1); }
v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs) { // Make diagonal directions somewhat rare if (diagonal_dirs && (random.next() % 4 == 0)) { v3s16 dir; int trycount = 0; do { trycount++; dir = v3s16(random.next() % 3 - 1, 0, random.next() % 3 - 1); } while ((dir.X == 0 && dir.Z == 0) && trycount < 10); return dir; } else { if (random.next() % 2 == 0) return random.next() % 2 ? v3s16(-1, 0, 0) : v3s16(1, 0, 0); else return random.next() % 2 ? v3s16(0, 0, -1) : v3s16(0, 0, 1); } }