mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-04 00:46:08 +00:00
Worms
This commit is contained in:
parent
fc73e0e482
commit
a1c3bc26c9
@ -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);
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user