Fix rarity selection stream... maybe

This commit is contained in:
cyberpwn 2021-11-12 04:59:48 -05:00
parent 30eda70dda
commit 06a8e08244

View File

@ -18,8 +18,11 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.Iris;
import com.volmit.iris.engine.EnginePanic;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.reflect.V;
import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.stream.ProceduralStream;
import com.volmit.iris.util.stream.arithmetic.FittedStream;
import com.volmit.iris.util.stream.interpolation.Interpolated;
@ -29,7 +32,7 @@ import java.util.List;
import java.util.Set;
public interface IRare {
static <T extends IRare>ProceduralStream<T> stream(ProceduralStream<Double> noise, List<T> possibilities)
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)),
@ -46,6 +49,31 @@ public interface IRare {
});
}
static <T extends IRare> T pickSlowly(List<T> possibilities, double noiseValue)
{
if(possibilities.isEmpty())
{
return null;
}
if(possibilities.size() == 1)
{
return possibilities.get(0);
}
KList<T> rarityTypes = new KList<>();
int totalRarity = 0;
for (T i : possibilities) {
totalRarity += IRare.get(i);
}
for (T i : possibilities) {
rarityTypes.addMultiple(i, totalRarity / IRare.get(i));
}
return rarityTypes.get((int) (noiseValue * rarityTypes.last()));
}
static <T extends IRare> T pick(List<T> possibilities, double noiseValue)
{
if(possibilities.isEmpty())
@ -80,7 +108,7 @@ public interface IRare {
}
}
return null;
return possibilities.get(possibilities.size() - 1);
}
static int get(Object v) {