improved entity collision check while generating
This commit is contained in:
@@ -117,29 +117,36 @@ class TurtleGame extends StatelessGame {
|
|||||||
|
|
||||||
private void generateNewSnack() {
|
private void generateNewSnack() {
|
||||||
Pos spawnPosition;
|
Pos spawnPosition;
|
||||||
boolean isInRadius, isEmpty;
|
boolean isInRadius, collides;
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
do {
|
|
||||||
if(counter > 200) return;
|
|
||||||
int x = this.rnd.nextInt(-this.radius+2, this.radius-2);
|
|
||||||
int z = this.rnd.nextInt(-this.radius+2, this.radius-2);
|
|
||||||
spawnPosition = new Pos(x, 1, z);
|
|
||||||
isInRadius = new Pos(x, 1, z).distance(0, 1, 0) < this.radius-2;
|
|
||||||
isEmpty = this.snacks.stream().noneMatch(entity -> entity.getPosition().sameBlock(x, 1, z));
|
|
||||||
counter++;
|
|
||||||
} while (!(isEmpty && isInRadius));
|
|
||||||
|
|
||||||
Entity snack = new Entity(EntityType.FALLING_BLOCK);
|
Entity snack = new Entity(EntityType.FALLING_BLOCK);
|
||||||
FallingBlockMeta meta = (FallingBlockMeta) snack.getEntityMeta();
|
FallingBlockMeta meta = (FallingBlockMeta) snack.getEntityMeta();
|
||||||
meta.setBlock(Block.CHORUS_FLOWER);
|
meta.setBlock(Block.CHORUS_FLOWER);
|
||||||
snack.setInstance(this);
|
snack.setInstance(this);
|
||||||
snack.teleport(spawnPosition.add(0.5, 0, 0.5));
|
|
||||||
|
do {
|
||||||
|
if(counter > 200) {
|
||||||
|
snack.remove();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int x = this.rnd.nextInt(-this.radius+2, this.radius-2);
|
||||||
|
int z = this.rnd.nextInt(-this.radius+2, this.radius-2);
|
||||||
|
spawnPosition = new Pos(x, 1, z).add(0.5, 0, 0.5);
|
||||||
|
Pos checkPosition = spawnPosition;
|
||||||
|
isInRadius = checkPosition.distance(0, 1, 0) < this.radius-3;
|
||||||
|
collides = this.getEntities().stream()
|
||||||
|
.filter(entity -> !entity.equals(snack))
|
||||||
|
.anyMatch(entity -> snack.getBoundingBox().intersectBox(entity.getPosition().sub(checkPosition), entity.getBoundingBox()));
|
||||||
|
counter++;
|
||||||
|
} while (!isInRadius || collides);
|
||||||
|
|
||||||
|
snack.teleport(spawnPosition);
|
||||||
this.snacks.add(snack);
|
this.snacks.add(snack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 100; i++) {
|
||||||
this.generateNewSnack();
|
this.generateNewSnack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user