Revert "Revert "Graphs & streams ""

This reverts commit 4d64ad8bb8.
This commit is contained in:
cyberpwn
2021-10-26 19:02:57 -04:00
parent 4d64ad8bb8
commit a271ed000e
7 changed files with 110 additions and 44 deletions

View File

@@ -18,7 +18,71 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.reflect.V;
import com.volmit.iris.util.stream.ProceduralStream;
import com.volmit.iris.util.stream.arithmetic.FittedStream;
import com.volmit.iris.util.stream.interpolation.Interpolated;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public interface IRare {
static <T extends IRare>ProceduralStream<T> stream(ProceduralStream<Double> noise, List<T> possibilities)
{
return ProceduralStream.of((x, z) -> pick(possibilities, noise.get(x, z)),
(x, y, z) -> pick(possibilities, noise.get(x, y, z)),
new Interpolated<T>() {
@Override
public double toDouble(T t) {
return 0;
}
@Override
public T fromDouble(double d) {
return null;
}
});
}
static <T extends IRare> T pick(List<T> possibilities, double noiseValue)
{
if(possibilities.isEmpty())
{
return null;
}
if(possibilities.size() == 1)
{
return possibilities.get(0);
}
double completeWeight = 0.0;
double highestWeight = 0.0;
for (T item : possibilities)
{
double weight = Math.max(item.getRarity(), 1);
highestWeight = Math.max(highestWeight, weight);
completeWeight += weight;
}
double r = noiseValue * completeWeight;
double countWeight = 0.0;
for (T item : possibilities) {
double weight = Math.max(highestWeight - Math.max(item.getRarity(), 1), 1);
countWeight += weight;
if (countWeight >= r)
{
return item;
}
}
return null;
}
static int get(Object v) {
return v instanceof IRare ? Math.max(1, ((IRare) v).getRarity()) : 1;
}

View File

@@ -21,7 +21,10 @@ package com.volmit.iris.engine.object;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.loader.IrisRegistrant;
import com.volmit.iris.engine.biome.AreaSystem;
import com.volmit.iris.engine.biome.ProceduralBiomeSystem;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;
@@ -393,4 +396,8 @@ public class IrisDimension extends IrisRegistrant {
public void scanForErrors(JSONObject p, VolmitSender sender) {
}
public AreaSystem createBiomeSystem(Engine engine) {
return new ProceduralBiomeSystem(engine);
}
}

View File

@@ -28,11 +28,14 @@ import com.volmit.iris.engine.object.annotations.Snippet;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.util.noise.ExpressionNoise;
import com.volmit.iris.util.stream.ProceduralStream;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
@Snippet("style")
@Accessors(chain = true)
@NoArgsConstructor