-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.c
92 lines (82 loc) · 2.75 KB
/
search.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "search.h"
// Whats this?
void checkStructure(int64_t seed, Pos strongholdPos, StructureConfig config, LayerStack g, struct StructureCount *count)
{
Pos originalRegionPos = {
strongholdPos.x >> 5,
strongholdPos.z >> 5
};
/*
Index 0: original region
Index 1: X axis
Index 2: Z axis
Index 3: corner
*/
Pos regionPositions[4];
regionPositions[0] = originalRegionPos;
int size = 1;
// The type isnt used further down the line
// ..whats the purpose of this code?
//int type = configToStructureName(config);
// X axis
if (floor((strongholdPos.x + CHUNKS_FROM_PORTAL) / config.regionSize) != originalRegionPos.x)
{
regionPositions[1].x = originalRegionPos.x - 1;
regionPositions[1].z = originalRegionPos.z;
size++;
}
else if (floor((strongholdPos.x - CHUNKS_FROM_PORTAL) / config.regionSize) != originalRegionPos.x)
{
regionPositions[1].x = originalRegionPos.x + 1;
regionPositions[1].z = originalRegionPos.z;
size++;
}
// Z axis
if (floor((strongholdPos.z + CHUNKS_FROM_PORTAL) / config.regionSize) != originalRegionPos.z)
{
regionPositions[2].x = originalRegionPos.x;
regionPositions[2].z = originalRegionPos.z - 1;
size++;
}
else if (floor((strongholdPos.z - CHUNKS_FROM_PORTAL) / config.regionSize) != originalRegionPos.z)
{
regionPositions[2].x = originalRegionPos.x;
regionPositions[2].z = originalRegionPos.z + 1;
size++;
}
// Corner
if (size == 3)
{
regionPositions[3].x = regionPositions[1].x;
regionPositions[3].z = regionPositions[2].z;
size++;
}
/* Debug
printf("[%d, %d], [%d, %d], [%d, %d], [%d, %d], size: %d\n",
regionPositions[0].x,
regionPositions[0].z,
regionPositions[1].x,
regionPositions[1].z,
regionPositions[2].x,
regionPositions[2].z,
regionPositions[3].x,
regionPositions[3].z,
size);
*/
for (int n = 0; n < size; n++)
{
Pos regionPos = regionPositions[n];
Pos structureChunkRegion = getStructureChunkInRegion(DESERT_PYRAMID_CONFIG, seed, regionPos.x, regionPos.z);
Pos structurePos = {
regionPos.x * 32 + structureChunkRegion.x,
regionPos.z * 32 + structureChunkRegion.z
};
int distanceX = abs(structurePos.x - strongholdPos.x);
int distanceZ = abs(structurePos.z - strongholdPos.z);
if (0 <= distanceX && distanceX <= CHUNKS_FROM_PORTAL / 2 && 0 <= distanceZ && distanceZ <= CHUNKS_FROM_PORTAL / 2)
{
// printf("{%d, %d}\n", structurePos.x * 16, structurePos.z * 16);
count->outpostCount++;
}
}
}