added defering of pixel spawning
This commit is contained in:
parent
4bda427693
commit
ab58b291c8
@ -17,6 +17,8 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
public class PixelBlock {
|
public class PixelBlock {
|
||||||
private final PixelBlockWorld pixelWorld;
|
private final PixelBlockWorld pixelWorld;
|
||||||
@ -122,34 +124,51 @@ public class PixelBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateEntities() {
|
public void updateEntities() {
|
||||||
this.getBlockTaskChain()
|
record PixelData(PixelBlock parent, Vector relativeLocation, BlockData block, double scale) {
|
||||||
.sync(this::clearEntities)
|
Pixel create() {
|
||||||
.sync(() -> {
|
return Pixel.newPixel(this.parent, this.relativeLocation, this.block, this.scale);
|
||||||
for (int x = 0; x < pixelsPerBlock; x++) {
|
}
|
||||||
for (int y = 0; y < pixelsPerBlock; y++) {
|
}
|
||||||
for (int z = 0; z < pixelsPerBlock; z++) {
|
List<PixelData> pixelData = new ArrayList<>();
|
||||||
World world = pixelBlockLocation.getWorld();
|
|
||||||
Location relativeLocation = new Location(world, x, y, z);
|
|
||||||
|
|
||||||
Location blockLocation = this.pixelWorld.getBuildOrigin();
|
this.clearEntities();
|
||||||
switch (this.facingDirection) {
|
for (int x = 0; x < pixelsPerBlock; x++) {
|
||||||
case south -> blockLocation.add(relativeLocation.x(), relativeLocation.y(), relativeLocation.z());
|
for (int y = 0; y < pixelsPerBlock; y++) {
|
||||||
case north -> blockLocation.add((pixelsPerBlock-1)-relativeLocation.x(), relativeLocation.y(), (pixelsPerBlock-1)-relativeLocation.z());
|
for (int z = 0; z < pixelsPerBlock; z++) {
|
||||||
case east -> blockLocation.add((pixelsPerBlock-1)-relativeLocation.z(), relativeLocation.y(), relativeLocation.x());
|
World world = pixelBlockLocation.getWorld();
|
||||||
case west -> blockLocation.add(relativeLocation.z(), relativeLocation.y(), (pixelsPerBlock-1)-relativeLocation.x());
|
Location relativeLocation = new Location(world, x, y, z);
|
||||||
}
|
|
||||||
BlockData block = blockLocation.getBlock().getBlockData();
|
|
||||||
|
|
||||||
if(!block.getMaterial().isEmpty()) {
|
Location blockLocation = this.pixelWorld.getBuildOrigin();
|
||||||
this.getBlockTaskChain()
|
switch (this.facingDirection) {
|
||||||
.delay(1)
|
case south -> blockLocation.add(relativeLocation.x(), relativeLocation.y(), relativeLocation.z());
|
||||||
.sync(() -> pixels.add(Pixel.newPixel(this, relativeLocation.toVector(), block, (double) 1 / pixelsPerBlock)))
|
case north -> blockLocation.add((pixelsPerBlock-1)-relativeLocation.x(), relativeLocation.y(), (pixelsPerBlock-1)-relativeLocation.z());
|
||||||
.execute();
|
case east -> blockLocation.add((pixelsPerBlock-1)-relativeLocation.z(), relativeLocation.y(), relativeLocation.x());
|
||||||
}
|
case west -> blockLocation.add(relativeLocation.z(), relativeLocation.y(), (pixelsPerBlock-1)-relativeLocation.x());
|
||||||
}
|
}
|
||||||
|
BlockData block = blockLocation.getBlock().getBlockData();
|
||||||
|
|
||||||
|
if(!block.getMaterial().isEmpty()) {
|
||||||
|
pixelData.add(new PixelData(this, relativeLocation.toVector(), block, (double) 1 / pixelsPerBlock));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int spawnSpreadInTicks = 10;
|
||||||
|
int chunkSize = (int) Math.ceil((double) pixelData.size() / spawnSpreadInTicks);
|
||||||
|
|
||||||
|
IntStream.range(0, spawnSpreadInTicks)
|
||||||
|
.mapToObj(i -> pixelData.stream()
|
||||||
|
.skip((long) i * chunkSize)
|
||||||
|
.limit(chunkSize)
|
||||||
|
.collect(Collectors.toList()))
|
||||||
|
.forEach(pixels -> this.getBlockTaskChain()
|
||||||
|
.delay(1)
|
||||||
|
.sync(() -> pixels.forEach(pixel -> this.pixels.add(pixel.create())))
|
||||||
|
.execute());
|
||||||
|
|
||||||
|
|
||||||
|
this.getBlockTaskChain()
|
||||||
.sync(() -> {
|
.sync(() -> {
|
||||||
if(this.pixels.size() < 5) {
|
if(this.pixels.size() < 5) {
|
||||||
// Location relativeLocation = new Location(pixelBlockLocation.getWorld(), 0, 0, 0);
|
// Location relativeLocation = new Location(pixelBlockLocation.getWorld(), 0, 0, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user