mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Improve biome generator performance (sync) efficiency
This commit is contained in:
parent
7cd0070d90
commit
bcdd470567
@ -62,13 +62,14 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
|
|||||||
@Override
|
@Override
|
||||||
public void onActuate(int x, int z, Hunk<Biome> h) {
|
public void onActuate(int x, int z, Hunk<Biome> h) {
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
int zf;
|
int zf, maxHeight;
|
||||||
|
IrisBiome ib;
|
||||||
|
|
||||||
for (int xf = 0; xf < h.getWidth(); xf++) {
|
for (int xf = 0; xf < h.getWidth(); xf++) {
|
||||||
for (zf = 0; zf < h.getDepth(); zf++) {
|
for (zf = 0; zf < h.getDepth(); zf++) {
|
||||||
|
|
||||||
IrisBiome ib = getComplex().getTrueBiomeStream().get(modX(xf + x), modZ(zf + z));
|
ib = getComplex().getTrueBiomeStream().get(modX(xf + x), modZ(zf + z));
|
||||||
|
maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData()));
|
||||||
if (ib.isCustom()) {
|
if (ib.isCustom()) {
|
||||||
try {
|
try {
|
||||||
IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z);
|
IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z);
|
||||||
@ -78,20 +79,20 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
|
|||||||
throw new RuntimeException("Cant inject biome!");
|
throw new RuntimeException("Cant inject biome!");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < h.getHeight(); i++) {
|
for (int i = 0; i < maxHeight; i++) {
|
||||||
injectBiome(h, xf, i, zf, biomeBase);
|
injectBiome(h, xf, i, zf, biomeBase);
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
Iris.reportError(e);
|
Iris.reportError(e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Biome v = ib.getSkyBiome(rng, x, 0, z);
|
Biome v = ib.getSkyBiome(rng, x, 0, z);
|
||||||
for (int i = 0; i < h.getHeight(); i++) {
|
for (int i = 0; i < maxHeight; i++) {
|
||||||
h.set(xf, i, zf, v);
|
h.set(xf, i, zf, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Biome v = ib.getSkyBiome(rng, x, 0, z);
|
Biome v = ib.getSkyBiome(rng, x, 0, z);
|
||||||
for (int i = 0; i < h.getHeight(); i++) {
|
for (int i = 0; i < maxHeight; i++) {
|
||||||
h.set(xf, i, zf, v);
|
h.set(xf, i, zf, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,6 +212,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
|
|||||||
private final transient AtomicCache<CNG> childrenCell = new AtomicCache<>();
|
private final transient AtomicCache<CNG> childrenCell = new AtomicCache<>();
|
||||||
private final transient AtomicCache<CNG> biomeGenerator = new AtomicCache<>();
|
private final transient AtomicCache<CNG> biomeGenerator = new AtomicCache<>();
|
||||||
private final transient AtomicCache<Integer> maxHeight = new AtomicCache<>();
|
private final transient AtomicCache<Integer> maxHeight = new AtomicCache<>();
|
||||||
|
private final transient AtomicCache<Integer> maxWithObjectHeight = new AtomicCache<>();
|
||||||
private final transient AtomicCache<IrisBiome> realCarveBiome = new AtomicCache<>();
|
private final transient AtomicCache<IrisBiome> realCarveBiome = new AtomicCache<>();
|
||||||
private final transient AtomicCache<KList<IrisBiome>> realChildren = new AtomicCache<>();
|
private final transient AtomicCache<KList<IrisBiome>> realChildren = new AtomicCache<>();
|
||||||
private final transient AtomicCache<KList<CNG>> layerHeightGenerators = new AtomicCache<>();
|
private final transient AtomicCache<KList<CNG>> layerHeightGenerators = new AtomicCache<>();
|
||||||
@ -425,7 +426,7 @@ public class IrisBiome extends IrisRegistrant implements IRare {
|
|||||||
return real;
|
return real;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getMaxHeight() {
|
public int getMaxHeight() {
|
||||||
return maxHeight.aquire(() ->
|
return maxHeight.aquire(() ->
|
||||||
{
|
{
|
||||||
int maxHeight = 0;
|
int maxHeight = 0;
|
||||||
@ -438,6 +439,29 @@ public class IrisBiome extends IrisRegistrant implements IRare {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMaxWithObjectHeight(IrisDataManager data) {
|
||||||
|
return maxWithObjectHeight.aquire(() ->
|
||||||
|
{
|
||||||
|
int maxHeight = 0;
|
||||||
|
|
||||||
|
for (IrisBiomeGeneratorLink i : getGenerators()) {
|
||||||
|
maxHeight += i.getMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
int gg = 0;
|
||||||
|
|
||||||
|
for(IrisObjectPlacement i : getObjects())
|
||||||
|
{
|
||||||
|
for(IrisObject j : data.getObjectLoader().loadAll(i.getPlace()))
|
||||||
|
{
|
||||||
|
gg = Math.max(gg, j.getH());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxHeight + gg+3;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public IrisBiome infer(InferredType t, InferredType type) {
|
public IrisBiome infer(InferredType t, InferredType type) {
|
||||||
setInferredType(t.equals(InferredType.DEFER) ? type : t);
|
setInferredType(t.equals(InferredType.DEFER) ? type : t);
|
||||||
return this;
|
return this;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user