mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 10:12:53 +00:00
Fix rarity selection stream... maybe
This commit is contained in:
parent
30eda70dda
commit
06a8e08244
@ -18,8 +18,11 @@
|
|||||||
|
|
||||||
package com.volmit.iris.engine.object;
|
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.collection.KList;
|
||||||
import com.volmit.iris.util.reflect.V;
|
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.ProceduralStream;
|
||||||
import com.volmit.iris.util.stream.arithmetic.FittedStream;
|
import com.volmit.iris.util.stream.arithmetic.FittedStream;
|
||||||
import com.volmit.iris.util.stream.interpolation.Interpolated;
|
import com.volmit.iris.util.stream.interpolation.Interpolated;
|
||||||
@ -29,7 +32,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public interface IRare {
|
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)),
|
return ProceduralStream.of((x, z) -> pick(possibilities, noise.get(x, z)),
|
||||||
(x, y, z) -> pick(possibilities, noise.get(x, y, 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)
|
static <T extends IRare> T pick(List<T> possibilities, double noiseValue)
|
||||||
{
|
{
|
||||||
if(possibilities.isEmpty())
|
if(possibilities.isEmpty())
|
||||||
@ -80,7 +108,7 @@ public interface IRare {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return possibilities.get(possibilities.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get(Object v) {
|
static int get(Object v) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user