Skip to content

Commit 1a61db1

Browse files
committed
remove loop
1 parent 9a50fad commit 1a61db1

1 file changed

Lines changed: 28 additions & 33 deletions

File tree

core/src/main/java/io/silvicky/item/backrooms/RandomTransformer.java

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,53 +37,48 @@ private void remove(ChunkPos c)
3737
}
3838
private void request(ChunkPos c)
3939
{
40-
ChunkPos s;
41-
int cnt=0;
42-
do
40+
ChunkPos s=new ChunkPos(lastS.x()+randomChunkRange+1,lastS.z()+randomChunkRange+1);
41+
List<ChunkPos> posList=new ArrayList<>((randomChunkRange*2+1)*(randomChunkRange*2+1));
42+
for(int x=-randomChunkRange;x<=randomChunkRange;x++)
4343
{
44-
if(cnt>1000)
44+
for(int z=-randomChunkRange;z<=randomChunkRange;z++)
4545
{
46-
int maxX=Integer.MIN_VALUE;
47-
int maxZ=Integer.MIN_VALUE;
48-
for(ChunkPos chunkPos:c2sMap.values())
49-
{
50-
maxX=Math.max(maxX,chunkPos.x());
51-
maxZ=Math.max(maxZ,chunkPos.z());
52-
}
53-
s=new ChunkPos(maxX+1, maxZ+1);
54-
System.out.println("Infinite loop warning: request");
46+
posList.add(new ChunkPos(lastS.x()+x,lastS.z()+z));
47+
}
48+
}
49+
Collections.shuffle(posList);
50+
for(ChunkPos pos:posList)
51+
{
52+
if(!s2cMap.containsKey(pos))
53+
{
54+
s=pos;
5555
break;
5656
}
57-
s = new ChunkPos(lastS.x() + getRandom(randomChunkRange), lastS.z() + getRandom(randomChunkRange));
58-
cnt++;
5957
}
60-
while(c2sMap.containsValue(s));
6158
put(s,c);
6259
}
6360
private ChunkPos init(ChunkPos s)
6461
{
65-
if(c2sMap.containsValue(s))return s2cMap.get(s);
66-
ChunkPos c;
67-
int cnt=0;
68-
do
62+
if(s2cMap.containsKey(s))return s2cMap.get(s);
63+
ChunkPos c=new ChunkPos(s.x()+randomChunkRange+1,s.z()+randomChunkRange+1);
64+
List<ChunkPos> posList=new ArrayList<>((randomChunkRange*2+1)*(randomChunkRange*2+1));
65+
for(int x=-randomChunkRange;x<=randomChunkRange;x++)
66+
{
67+
for(int z=-randomChunkRange;z<=randomChunkRange;z++)
68+
{
69+
posList.add(new ChunkPos(s.x()+x,s.z()+z));
70+
}
71+
}
72+
Collections.shuffle(posList);
73+
for(ChunkPos pos:posList)
6974
{
70-
if(cnt>1000)
75+
if(!c2sMap.containsKey(pos))
7176
{
72-
int maxX=Integer.MIN_VALUE;
73-
int maxZ=Integer.MIN_VALUE;
74-
for(ChunkPos chunkPos:c2sMap.keySet())
75-
{
76-
maxX=Math.max(maxX,chunkPos.x());
77-
maxZ=Math.max(maxZ,chunkPos.z());
78-
}
79-
c=new ChunkPos(maxX+1, maxZ+1);
80-
System.out.println("Infinite loop warning: init");
77+
c=pos;
8178
break;
8279
}
83-
c = new ChunkPos(s.x() + getRandom(randomChunkRange), s.z() + getRandom(randomChunkRange));
84-
cnt++;
8580
}
86-
while(c2sMap.containsKey(c));
81+
//TODO but why do we need this??
8782
put(s,c);
8883
return c;
8984
}

0 commit comments

Comments
 (0)