mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Feature looping
This commit is contained in:
parent
2f450b7ea0
commit
98ffa0a256
@ -230,7 +230,7 @@ public class IrisComplex implements DataProvider {
|
|||||||
objectChanceStream = ProceduralStream.ofDouble((x, z) -> {
|
objectChanceStream = ProceduralStream.ofDouble((x, z) -> {
|
||||||
if (engine.getDimension().hasFeatures(engine)) {
|
if (engine.getDimension().hasFeatures(engine)) {
|
||||||
AtomicDouble str = new AtomicDouble(1D);
|
AtomicDouble str = new AtomicDouble(1D);
|
||||||
for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) {
|
for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) {
|
||||||
str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z, rng, getData())));
|
str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z, rng, getData())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,7 +241,7 @@ public class IrisComplex implements DataProvider {
|
|||||||
});
|
});
|
||||||
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
|
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
|
||||||
b -> focus)).convertAware2D((b, x, z) -> {
|
b -> focus)).convertAware2D((b, x, z) -> {
|
||||||
for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) {
|
for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) {
|
||||||
IrisBiome bx = i.filter(x, z, b, rng);
|
IrisBiome bx = i.filter(x, z, b, rng);
|
||||||
|
|
||||||
if (bx != null) {
|
if (bx != null) {
|
||||||
@ -257,7 +257,7 @@ public class IrisComplex implements DataProvider {
|
|||||||
fixBiomeType(h, baseBiomeStream.get(x, z),
|
fixBiomeType(h, baseBiomeStream.get(x, z),
|
||||||
regionStream.get(x, z), x, z, fluidHeight))
|
regionStream.get(x, z), x, z, fluidHeight))
|
||||||
.convertAware2D((b, x, z) -> {
|
.convertAware2D((b, x, z) -> {
|
||||||
for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) {
|
for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) {
|
||||||
IrisBiome bx = i.filter(x, z, b, rng);
|
IrisBiome bx = i.filter(x, z, b, rng);
|
||||||
|
|
||||||
if (bx != null) {
|
if (bx != null) {
|
||||||
@ -271,7 +271,7 @@ public class IrisComplex implements DataProvider {
|
|||||||
.cache2D(cacheSize);
|
.cache2D(cacheSize);
|
||||||
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
|
trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D,
|
||||||
b -> focus)).convertAware2D((b, x, z) -> {
|
b -> focus)).convertAware2D((b, x, z) -> {
|
||||||
for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) {
|
for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) {
|
||||||
IrisBiome bx = i.filter(x, z, b, rng);
|
IrisBiome bx = i.filter(x, z, b, rng);
|
||||||
|
|
||||||
if (bx != null) {
|
if (bx != null) {
|
||||||
@ -287,7 +287,7 @@ public class IrisComplex implements DataProvider {
|
|||||||
fixBiomeType(h, baseBiomeStream.get(x, z),
|
fixBiomeType(h, baseBiomeStream.get(x, z),
|
||||||
regionStream.get(x, z), x, z, fluidHeight))
|
regionStream.get(x, z), x, z, fluidHeight))
|
||||||
.convertAware2D((b, x, z) -> {
|
.convertAware2D((b, x, z) -> {
|
||||||
for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) {
|
for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) {
|
||||||
IrisBiome bx = i.filter(x, z, b, rng);
|
IrisBiome bx = i.filter(x, z, b, rng);
|
||||||
|
|
||||||
if (bx != null) {
|
if (bx != null) {
|
||||||
@ -458,7 +458,7 @@ public class IrisComplex implements DataProvider {
|
|||||||
AtomicDouble noise = new AtomicDouble(h + fluidHeight + overlayStream.get(x, z));
|
AtomicDouble noise = new AtomicDouble(h + fluidHeight + overlayStream.get(x, z));
|
||||||
|
|
||||||
if (features) {
|
if (features) {
|
||||||
List<IrisFeaturePositional> p = engine.getEngineParallax().forEachFeature(x, z);
|
List<IrisFeaturePositional> p = engine.getMantle().forEachFeature(x, z);
|
||||||
|
|
||||||
for (IrisFeaturePositional i : p) {
|
for (IrisFeaturePositional i : p) {
|
||||||
noise.set(i.filter(x, z, noise.get(), rng, getData()));
|
noise.set(i.filter(x, z, noise.get(), rng, getData()));
|
||||||
|
@ -240,4 +240,42 @@ public interface EngineMantle extends IObjectPlacer {
|
|||||||
getMantle().iterateChunk(x, z, IrisFeaturePositional.class, (a,b,c,f) -> pos.add(f), MantleFlag.FEATURE);
|
getMantle().iterateChunk(x, z, IrisFeaturePositional.class, (a,b,c,f) -> pos.add(f), MantleFlag.FEATURE);
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BlockCoordinates
|
||||||
|
default KList<IrisFeaturePositional> forEachFeature(double x, double z) {
|
||||||
|
KList<IrisFeaturePositional> pos = new KList<>();
|
||||||
|
|
||||||
|
if (!getEngine().getDimension().hasFeatures(getEngine())) {
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (IrisFeaturePositional i : getEngine().getDimension().getSpecificFeatures()) {
|
||||||
|
if (i.shouldFilter(x, z, getEngine().getComplex().getRng(), getData())) {
|
||||||
|
pos.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int s = getRealRadius();
|
||||||
|
int i, j;
|
||||||
|
int cx = (int) x >> 4;
|
||||||
|
int cz = (int) z >> 4;
|
||||||
|
|
||||||
|
for (i = -s; i <= s; i++) {
|
||||||
|
for (j = -s; j <= s; j++) {
|
||||||
|
try {
|
||||||
|
for (IrisFeaturePositional k : getFeaturesInChunk(i + cx, j + cx)) {
|
||||||
|
if (k.shouldFilter(x, z, getEngine().getComplex().getRng(), getData())) {
|
||||||
|
pos.add(k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
Iris.error("FILTER ERROR" + " AT " + (cx + i) + " " + (j + cz));
|
||||||
|
e.printStackTrace();
|
||||||
|
Iris.reportError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user