This commit is contained in:
cyberpwn 2021-08-19 16:36:54 -04:00
parent fc73e0e482
commit a1c3bc26c9
4 changed files with 49 additions and 7 deletions

View File

@ -54,6 +54,10 @@ public class IrisPosition {
public IrisPosition(Vector v) { public IrisPosition(Vector v) {
this(v.getBlockX(), v.getBlockY(), v.getBlockZ()); this(v.getBlockX(), v.getBlockY(), v.getBlockZ());
} }
public IrisPosition(double x, double y, double z) {
this((int)x,(int)y,(int)z);
}
public IrisPosition add(IrisPosition relativePosition) { public IrisPosition add(IrisPosition relativePosition) {
return new IrisPosition(relativePosition.x + x, relativePosition.y + y, relativePosition.z + z); return new IrisPosition(relativePosition.x + x, relativePosition.y + y, relativePosition.z + z);

View File

@ -18,6 +18,8 @@
package com.volmit.iris.engine.object.cave; package com.volmit.iris.engine.object.cave;
import com.volmit.iris.core.project.loader.IrisData;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.Desc; import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MinNumber; import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.annotations.Required; import com.volmit.iris.engine.object.annotations.Required;
@ -27,7 +29,11 @@ import com.volmit.iris.engine.object.noise.IrisGeneratorStyle;
import com.volmit.iris.engine.object.noise.IrisNoiseGenerator; import com.volmit.iris.engine.object.noise.IrisNoiseGenerator;
import com.volmit.iris.engine.object.noise.IrisStyledRange; import com.volmit.iris.engine.object.noise.IrisStyledRange;
import com.volmit.iris.engine.object.noise.NoiseStyle; import com.volmit.iris.engine.object.noise.NoiseStyle;
import com.volmit.iris.util.function.NoiseProvider;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.Worm; import com.volmit.iris.util.noise.Worm;
import com.volmit.iris.util.noise.WormIterator2;
import com.volmit.iris.util.noise.WormIterator3;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -56,4 +62,34 @@ public class IrisWormGenerator implements IRare {
@Desc("The thickness of the worm over distance") @Desc("The thickness of the worm over distance")
private IrisStyledRange girth = new IrisStyledRange().setMin(3).setMax(7) private IrisStyledRange girth = new IrisStyledRange().setMin(3).setMax(7)
.setStyle(new IrisGeneratorStyle(NoiseStyle.SIMPLEX)); .setStyle(new IrisGeneratorStyle(NoiseStyle.SIMPLEX));
private transient final AtomicCache<NoiseProvider> angleProviderCache = new AtomicCache<>();
public void test()
{
}
public NoiseProvider getAngleProvider(RNG rng, IrisData data)
{
return angleProviderCache.aquire(() -> (xx, zz) -> angleStyle.create(rng, data).noise(xx, zz));
}
public WormIterator2 iterate2D(RNG rng, IrisData data, int x, int z)
{
return WormIterator2.builder()
.maxDistance(maxDistance)
.maxIterations(maxSegments == -1 ? maxDistance : maxSegments)
.noise(getAngleProvider(rng, data)).x(x).z(z)
.build();
}
public WormIterator3 iterate3D(RNG rng, IrisData data, int x, int y, int z)
{
return WormIterator3.builder()
.maxDistance(maxDistance)
.maxIterations(maxSegments == -1 ? maxDistance : maxSegments)
.noise(getAngleProvider(rng, data)).x(x).z(z).y(y)
.build();
}
} }

View File

@ -26,6 +26,7 @@ import lombok.Data;
@Data @Data
public class WormIterator2 { public class WormIterator2 {
private transient Worm2 worm; private transient Worm2 worm;
private transient NoiseProvider noise;
private int x; private int x;
private int z; private int z;
private int maxDistance; private int maxDistance;
@ -39,15 +40,15 @@ public class WormIterator2 {
+ ((z * z) - (worm.getZ().getPosition() * worm.getZ().getPosition())) < dist * dist; + ((z * z) - (worm.getZ().getPosition() * worm.getZ().getPosition())) < dist * dist;
} }
public Worm2 next(NoiseProvider p) public Worm2 next()
{ {
if(worm == null) if(worm == null)
{ {
worm = new Worm2(x, z, 0, 0); worm = new Worm2(x, z, 0, 0);
} }
worm.getX().setVelocity(p.noise(worm.getX().getPosition(), 0)); worm.getX().setVelocity(noise.noise(worm.getX().getPosition(), 0));
worm.getZ().setVelocity(p.noise(worm.getZ().getPosition(), 0)); worm.getZ().setVelocity(noise.noise(worm.getZ().getPosition(), 0));
worm.step(); worm.step();
return worm; return worm;

View File

@ -29,6 +29,7 @@ public class WormIterator3 {
private int x; private int x;
private int y; private int y;
private int z; private int z;
private transient NoiseProvider noise;
private int maxDistance; private int maxDistance;
private int maxIterations; private int maxIterations;
@ -43,16 +44,16 @@ public class WormIterator3 {
+ ((z * z) - (worm.getZ().getPosition() * worm.getZ().getPosition())) < dist * dist; + ((z * z) - (worm.getZ().getPosition() * worm.getZ().getPosition())) < dist * dist;
} }
public Worm3 next(NoiseProvider p) public Worm3 next()
{ {
if(worm == null) if(worm == null)
{ {
worm = new Worm3(x, y, z, 0, 0, 0); worm = new Worm3(x, y, z, 0, 0, 0);
} }
worm.getX().setVelocity(p.noise(worm.getX().getPosition(), 0)); worm.getX().setVelocity(noise.noise(worm.getX().getPosition(), 0));
worm.getY().setVelocity(p.noise(worm.getY().getPosition(), 0)); worm.getY().setVelocity(noise.noise(worm.getY().getPosition(), 0));
worm.getZ().setVelocity(p.noise(worm.getZ().getPosition(), 0)); worm.getZ().setVelocity(noise.noise(worm.getZ().getPosition(), 0));
worm.step(); worm.step();
return worm; return worm;