mirror of
https://github.com/Cubitect/cubiomes.git
synced 2025-09-24 04:03:39 -04:00
Preparation for a simple structure search.
This commit is contained in:
parent
e3d56411da
commit
d147f43ba2
@ -7,8 +7,11 @@ struct compactinfo_t
|
|||||||
int64_t seedStart, seedEnd;
|
int64_t seedStart, seedEnd;
|
||||||
unsigned int range;
|
unsigned int range;
|
||||||
BiomeFilter filter;
|
BiomeFilter filter;
|
||||||
|
int withHut, withMonument;
|
||||||
|
int minscale;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_PTHREAD
|
#ifdef USE_PTHREAD
|
||||||
static void *searchCompactBiomesThread(void *data)
|
static void *searchCompactBiomesThread(void *data)
|
||||||
#else
|
#else
|
||||||
@ -23,28 +26,43 @@ static DWORD WINAPI searchCompactBiomesThread(LPVOID data)
|
|||||||
LayerStack g = setupGenerator(MC_1_14);
|
LayerStack g = setupGenerator(MC_1_14);
|
||||||
int *cache = allocCache(&g.layers[L_VORONOI_ZOOM_1], w, h);
|
int *cache = allocCache(&g.layers[L_VORONOI_ZOOM_1], w, h);
|
||||||
|
|
||||||
for (s = info.seedStart; s < info.seedEnd; s++)
|
for (s = info.seedStart; s != info.seedEnd; s++)
|
||||||
{
|
{
|
||||||
if (checkForBiomes(&g, cache, s, ax, az, w, h, info.filter, 1))
|
if (checkForBiomes(&g, cache, s, ax, az, w, h, info.filter, info.minscale))
|
||||||
{
|
{
|
||||||
int x, z;
|
int x, z;
|
||||||
int has_hut = 0, has_monument = 0;
|
if (info.withHut)
|
||||||
for (z = -2; z < 2; z++)
|
|
||||||
{
|
{
|
||||||
for (x = -2; x < 2; x++)
|
int r = info.range / SWAMP_HUT_CONFIG.regionSize;
|
||||||
|
for (z = -r; z < r; z++)
|
||||||
{
|
{
|
||||||
Pos p;
|
for (x = -r; x < r; x++)
|
||||||
p = getStructurePos(SWAMP_HUT_CONFIG, s, x, z);
|
{
|
||||||
if (isViableFeaturePos(Swamp_Hut, g, cache, p.x, p.z))
|
Pos p;
|
||||||
has_hut = 1;
|
p = getStructurePos(SWAMP_HUT_CONFIG, s, x, z);
|
||||||
p = getLargeStructurePos(MONUMENT_CONFIG, s, x, z);
|
if (isViableFeaturePos(Swamp_Hut, g, cache, p.x, p.z))
|
||||||
if (isViableOceanMonumentPos(g, cache, p.x, p.z))
|
goto L_hut_found;
|
||||||
has_monument = 1;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!has_hut || !has_monument)
|
|
||||||
continue;
|
continue;
|
||||||
|
L_hut_found:;
|
||||||
|
}
|
||||||
|
if (info.withMonument)
|
||||||
|
{
|
||||||
|
int r = info.range / MONUMENT_CONFIG.regionSize;
|
||||||
|
for (z = -r; z < r; z++)
|
||||||
|
{
|
||||||
|
for (x = -r; x < r; x++)
|
||||||
|
{
|
||||||
|
Pos p;
|
||||||
|
p = getLargeStructurePos(MONUMENT_CONFIG, s, x, z);
|
||||||
|
if (isViableOceanMonumentPos(g, cache, p.x, p.z))
|
||||||
|
goto L_monument_found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
L_monument_found:;
|
||||||
|
}
|
||||||
|
|
||||||
printf("%ld\n", s);
|
printf("%ld\n", s);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
@ -68,6 +86,8 @@ int main(int argc, char *argv[])
|
|||||||
int64_t seedStart, seedEnd;
|
int64_t seedStart, seedEnd;
|
||||||
unsigned int threads, t, range;
|
unsigned int threads, t, range;
|
||||||
BiomeFilter filter;
|
BiomeFilter filter;
|
||||||
|
int withHut, withMonument;
|
||||||
|
int minscale;
|
||||||
|
|
||||||
// arguments
|
// arguments
|
||||||
if (argc <= 0)
|
if (argc <= 0)
|
||||||
@ -75,19 +95,23 @@ int main(int argc, char *argv[])
|
|||||||
printf( "find_compactbiomes [seed_start] [seed_end] [threads] [range]\n"
|
printf( "find_compactbiomes [seed_start] [seed_end] [threads] [range]\n"
|
||||||
"\n"
|
"\n"
|
||||||
" seed_start starting seed for search [long, default=0]\n"
|
" seed_start starting seed for search [long, default=0]\n"
|
||||||
" end_start end seed for search [long, default=1e8]\n"
|
" end_start end seed for search [long, default=-1]\n"
|
||||||
" threads number of threads to use [uint, default=1]\n"
|
" threads number of threads to use [uint, default=1]\n"
|
||||||
" range search range (in blocks) [uint, default=1024]\n");
|
" range search range (in blocks) [uint, default=1024]\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (argc <= 1 || sscanf(argv[1], "%" PRId64, &seedStart) != 1) seedStart = 0;
|
if (argc <= 1 || sscanf(argv[1], "%" PRId64, &seedStart) != 1) seedStart = 0;
|
||||||
if (argc <= 2 || sscanf(argv[2], "%" PRId64, &seedEnd) != 1) seedEnd = 100000000LL;
|
if (argc <= 2 || sscanf(argv[2], "%" PRId64, &seedEnd) != 1) seedEnd = -1;
|
||||||
if (argc <= 3 || sscanf(argv[3], "%u", &threads) != 1) threads = 1;
|
if (argc <= 3 || sscanf(argv[3], "%u", &threads) != 1) threads = 1;
|
||||||
if (argc <= 4 || sscanf(argv[4], "%u", &range) != 1) range = 1024;
|
if (argc <= 4 || sscanf(argv[4], "%u", &range) != 1) range = 1024;
|
||||||
|
|
||||||
// TODO: set up a customisable biome filter
|
// TODO: set up a customisable biome filter
|
||||||
filter = setupBiomeFilter(BIOMES_L13_OCEAN_MIX_4,
|
filter = setupBiomeFilter(BIOMES_L13_OCEAN_MIX_4,
|
||||||
sizeof(BIOMES_L13_OCEAN_MIX_4)/sizeof(int));
|
sizeof(BIOMES_L13_OCEAN_MIX_4)/sizeof(int));
|
||||||
|
minscale = 1; // terminate search at this layer scale
|
||||||
|
// TODO: simple structure filter
|
||||||
|
withHut = 0;
|
||||||
|
withMonument = 0;
|
||||||
|
|
||||||
printf("Starting search through seeds %" PRId64 " to %" PRId64", using %u threads.\n"
|
printf("Starting search through seeds %" PRId64 " to %" PRId64", using %u threads.\n"
|
||||||
"Search radius = %u.\n", seedStart, seedEnd, threads, range);
|
"Search radius = %u.\n", seedStart, seedEnd, threads, range);
|
||||||
@ -96,13 +120,16 @@ int main(int argc, char *argv[])
|
|||||||
struct compactinfo_t info[threads];
|
struct compactinfo_t info[threads];
|
||||||
|
|
||||||
// store thread information
|
// store thread information
|
||||||
|
uint64_t seedCnt = ((uint64_t)seedEnd - (uint64_t)seedStart) / threads;
|
||||||
for (t = 0; t < threads; t++)
|
for (t = 0; t < threads; t++)
|
||||||
{
|
{
|
||||||
int64_t seedCnt = (seedEnd - seedStart) / threads;
|
info[t].seedStart = (int64_t)(seedStart + seedCnt * t);
|
||||||
info[t].seedStart = seedStart + seedCnt * t;
|
info[t].seedEnd = (int64_t)(seedStart + seedCnt * (t+1));
|
||||||
info[t].seedEnd = seedStart + seedCnt * (t+1) + 1;
|
|
||||||
info[t].range = range;
|
info[t].range = range;
|
||||||
info[t].filter = filter;
|
info[t].filter = filter;
|
||||||
|
info[t].withHut = withHut;
|
||||||
|
info[t].withMonument = withMonument;
|
||||||
|
info[t].minscale = minscale;
|
||||||
}
|
}
|
||||||
info[threads-1].seedEnd = seedEnd;
|
info[threads-1].seedEnd = seedEnd;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user