Flatten perlin noise structure, improving perfomance by margin of 4
не рузен
This commit is contained in:
parent
43e9c2412d
commit
68f3d6aa29
@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m
|
|||||||
|
|
||||||
kotlinVersion=1.9.10
|
kotlinVersion=1.9.10
|
||||||
kotlinCoroutinesVersion=1.8.0
|
kotlinCoroutinesVersion=1.8.0
|
||||||
kommonsVersion=2.12.1
|
kommonsVersion=2.12.2
|
||||||
|
|
||||||
ffiVersion=2.2.13
|
ffiVersion=2.2.13
|
||||||
lwjglVersion=3.3.0
|
lwjglVersion=3.3.0
|
||||||
|
@ -207,6 +207,7 @@ class ServerConnection(val server: StarboundServer, type: ConnectionType) : Conn
|
|||||||
|
|
||||||
// coordinates ship flight
|
// coordinates ship flight
|
||||||
private suspend fun shipFlightEventLoop() {
|
private suspend fun shipFlightEventLoop() {
|
||||||
|
shipWorld.sky.skyType = SkyType.ORBITAL
|
||||||
shipWorld.sky.startFlying(true, true)
|
shipWorld.sky.startFlying(true, true)
|
||||||
var visited = 0
|
var visited = 0
|
||||||
|
|
||||||
|
@ -322,6 +322,10 @@ class ServerWorld private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun findPlayerStart(hint: Vector2d? = null): Vector2d {
|
private suspend fun findPlayerStart(hint: Vector2d? = null): Vector2d {
|
||||||
|
//if (true) {
|
||||||
|
// return Vector2d(10.0, template.surfaceLevel().toDouble())
|
||||||
|
//}
|
||||||
|
|
||||||
val tickets = ArrayList<ServerChunk.ITicket>()
|
val tickets = ArrayList<ServerChunk.ITicket>()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -31,21 +31,21 @@ abstract class AbstractPerlinNoise(val parameters: PerlinNoiseParameters) {
|
|||||||
var hasSeedSpecified = false
|
var hasSeedSpecified = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
private var initializationTask: CompletableFuture<Unit>? = null
|
|
||||||
private var isInitialized = false
|
|
||||||
private val initLock = Any()
|
|
||||||
|
|
||||||
var seed: Long = 0L
|
var seed: Long = 0L
|
||||||
private set
|
private set
|
||||||
|
|
||||||
val scaleD = parameters.scale.toDouble()
|
|
||||||
|
|
||||||
protected data class Setup(val b0: Int, val b1: Int, val r0: Double, val r1: Double)
|
protected data class Setup(val b0: Int, val b1: Int, val r0: Double, val r1: Double)
|
||||||
|
|
||||||
protected val p by lazy { IntArray(parameters.scale * 2 + 2) }
|
@JvmField protected val p = IntArray(parameters.scale * 2 + 2)
|
||||||
protected val g1 by lazy { DoubleArray(parameters.scale * 2 + 2) }
|
@JvmField protected val g1 = DoubleArray(parameters.scale * 2 + 2)
|
||||||
protected val g2 by lazy { Double2DArray.allocate(parameters.scale * 2 + 2, 2) }
|
|
||||||
protected val g3 by lazy { Double2DArray.allocate(parameters.scale * 2 + 2, 3) }
|
// flat arrays for performance
|
||||||
|
@JvmField protected val g2_0 = DoubleArray(parameters.scale * 2 + 2)
|
||||||
|
@JvmField protected val g2_1 = DoubleArray(parameters.scale * 2 + 2)
|
||||||
|
|
||||||
|
@JvmField protected val g3_0 = DoubleArray(parameters.scale * 2 + 2)
|
||||||
|
@JvmField protected val g3_1 = DoubleArray(parameters.scale * 2 + 2)
|
||||||
|
@JvmField protected val g3_2 = DoubleArray(parameters.scale * 2 + 2)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (parameters.seed != null && parameters.type != PerlinNoiseParameters.Type.UNITIALIZED) {
|
if (parameters.seed != null && parameters.type != PerlinNoiseParameters.Type.UNITIALIZED) {
|
||||||
@ -53,50 +53,62 @@ abstract class AbstractPerlinNoise(val parameters: PerlinNoiseParameters) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doInit(seed: Long) {
|
fun init(seed: Long, now: Boolean = false) {
|
||||||
|
if (parameters.type == PerlinNoiseParameters.Type.UNITIALIZED)
|
||||||
|
return
|
||||||
|
|
||||||
|
this.hasSeedSpecified = true
|
||||||
|
this.seed = seed
|
||||||
|
|
||||||
val p = p
|
val p = p
|
||||||
val g1 = g1
|
val g1 = g1
|
||||||
val g2 = g2
|
val g2_0 = g2_0
|
||||||
val g3 = g3
|
val g2_1 = g2_1
|
||||||
|
val g3_0 = g3_0
|
||||||
|
val g3_1 = g3_1
|
||||||
|
val g3_2 = g3_2
|
||||||
|
|
||||||
p.fill(0)
|
p.fill(0)
|
||||||
g1.fill(0.0)
|
g1.fill(0.0)
|
||||||
g2.fill(0.0)
|
g2_0.fill(0.0)
|
||||||
g3.fill(0.0)
|
g2_1.fill(0.0)
|
||||||
|
g3_0.fill(0.0)
|
||||||
|
g3_1.fill(0.0)
|
||||||
|
g3_2.fill(0.0)
|
||||||
|
|
||||||
val random = random(seed)
|
val random = random(seed)
|
||||||
|
|
||||||
for (i in 0 until parameters.scale) {
|
for (i in 0 until parameters.scale) {
|
||||||
p[i] = i
|
p[i] = i
|
||||||
|
|
||||||
g1[i] = random.nextInt(-parameters.scale, parameters.scale) / scaleD
|
g1[i] = random.nextInt(-parameters.scale, parameters.scale) / parameters.scale.toDouble()
|
||||||
|
|
||||||
g2[i, 0] = random.nextInt(-parameters.scale, parameters.scale) / scaleD
|
g2_0[i] = random.nextInt(-parameters.scale, parameters.scale) / parameters.scale.toDouble()
|
||||||
g2[i, 1] = random.nextInt(-parameters.scale, parameters.scale) / scaleD
|
g2_1[i] = random.nextInt(-parameters.scale, parameters.scale) / parameters.scale.toDouble()
|
||||||
|
|
||||||
g3[i, 0] = random.nextInt(-parameters.scale, parameters.scale) / scaleD
|
g3_0[i] = random.nextInt(-parameters.scale, parameters.scale) / parameters.scale.toDouble()
|
||||||
g3[i, 1] = random.nextInt(-parameters.scale, parameters.scale) / scaleD
|
g3_1[i] = random.nextInt(-parameters.scale, parameters.scale) / parameters.scale.toDouble()
|
||||||
g3[i, 2] = random.nextInt(-parameters.scale, parameters.scale) / scaleD
|
g3_2[i] = random.nextInt(-parameters.scale, parameters.scale) / parameters.scale.toDouble()
|
||||||
|
|
||||||
val l2 = sqrt(g2[i, 0] * g2[i, 0] + g2[i, 1] * g2[i, 1])
|
val l2 = sqrt(g2_0[i] * g2_0[i] + g2_1[i] * g2_1[i])
|
||||||
val l3 = sqrt(g3[i, 0] * g3[i, 0] + g3[i, 1] * g3[i, 1] + g3[i, 2] * g3[i, 2])
|
val l3 = sqrt(g3_0[i] * g3_0[i] + g3_1[i] * g3_1[i] + g3_2[i] * g3_2[i])
|
||||||
|
|
||||||
if (l2 == 0.0) {
|
if (l2 == 0.0) {
|
||||||
g2[i, 0] = 1.0
|
g2_0[i] = 1.0
|
||||||
g2[i, 1] = 0.0
|
g2_1[i] = 0.0
|
||||||
} else {
|
} else {
|
||||||
g2[i, 0] = g2[i, 0] / l2
|
g2_0[i] = g2_0[i] / l2
|
||||||
g2[i, 1] = g2[i, 1] / l2
|
g2_1[i] = g2_1[i] / l2
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l3 == 0.0) {
|
if (l3 == 0.0) {
|
||||||
g3[i, 0] = 1.0
|
g3_0[i] = 1.0
|
||||||
g3[i, 1] = 0.0
|
g3_1[i] = 0.0
|
||||||
g3[i, 2] = 0.0
|
g3_2[i] = 0.0
|
||||||
} else {
|
} else {
|
||||||
g3[i, 0] = g3[i, 0] / l3
|
g3_0[i] = g3_0[i] / l3
|
||||||
g3[i, 1] = g3[i, 1] / l3
|
g3_1[i] = g3_1[i] / l3
|
||||||
g3[i, 2] = g3[i, 2] / l3
|
g3_2[i] = g3_2[i] / l3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,44 +123,22 @@ abstract class AbstractPerlinNoise(val parameters: PerlinNoiseParameters) {
|
|||||||
p[parameters.scale + i] = p[i]
|
p[parameters.scale + i] = p[i]
|
||||||
g1[parameters.scale + i] = g1[i]
|
g1[parameters.scale + i] = g1[i]
|
||||||
|
|
||||||
g2[parameters.scale + i, 0] = g2[i, 0]
|
g2_0[parameters.scale + i] = g2_0[i]
|
||||||
g2[parameters.scale + i, 1] = g2[i, 1]
|
g2_1[parameters.scale + i] = g2_1[i]
|
||||||
|
|
||||||
g3[parameters.scale + i, 0] = g3[i, 0]
|
g3_0[parameters.scale + i] = g3_0[i]
|
||||||
g3[parameters.scale + i, 1] = g3[i, 1]
|
g3_1[parameters.scale + i] = g3_1[i]
|
||||||
g3[parameters.scale + i, 2] = g3[i, 2]
|
g3_2[parameters.scale + i] = g3_2[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun checkInit() {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
synchronized(initLock) {
|
protected inline fun curve(value: Double): Double {
|
||||||
check(hasSeedSpecified) { "Tried to use perlin noise without seed specified" }
|
|
||||||
|
|
||||||
if (!isInitialized) {
|
|
||||||
doInit(seed)
|
|
||||||
isInitialized = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun init(seed: Long, now: Boolean = false) {
|
|
||||||
if (parameters.type == PerlinNoiseParameters.Type.UNITIALIZED)
|
|
||||||
return
|
|
||||||
|
|
||||||
this.hasSeedSpecified = true
|
|
||||||
this.isInitialized = false
|
|
||||||
this.seed = seed
|
|
||||||
|
|
||||||
if (now) {
|
|
||||||
checkInit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun curve(value: Double): Double {
|
|
||||||
return value * value * (3.0 - 2.0 * value)
|
return value * value * (3.0 - 2.0 * value)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun setup(value: Double): Setup {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
protected inline fun setup(value: Double): Setup {
|
||||||
val iv: Int = floor(value).toInt()
|
val iv: Int = floor(value).toInt()
|
||||||
val fv: Double = value - iv
|
val fv: Double = value - iv
|
||||||
|
|
||||||
@ -159,15 +149,18 @@ abstract class AbstractPerlinNoise(val parameters: PerlinNoiseParameters) {
|
|||||||
return Setup(b0, b1, fv, r1)
|
return Setup(b0, b1, fv, r1)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun at2(x: Double, y: Double, rx: Double, ry: Double): Double {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
protected inline fun at2(x: Double, y: Double, rx: Double, ry: Double): Double {
|
||||||
return rx * x + ry * y
|
return rx * x + ry * y
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun at3(x: Double, y: Double, z: Double, rx: Double, ry: Double, rz: Double): Double {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
protected inline fun at3(x: Double, y: Double, z: Double, rx: Double, ry: Double, rz: Double): Double {
|
||||||
return rx * x + ry * y + rz * z
|
return rx * x + ry * y + rz * z
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun noise1(x: Double): Double {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
protected inline fun noise1(x: Double): Double {
|
||||||
val (bx0, bx1, rx0, rx1) = setup(x)
|
val (bx0, bx1, rx0, rx1) = setup(x)
|
||||||
|
|
||||||
val sx = curve(rx0)
|
val sx = curve(rx0)
|
||||||
@ -177,7 +170,8 @@ abstract class AbstractPerlinNoise(val parameters: PerlinNoiseParameters) {
|
|||||||
return linearInterpolation(sx, u, v)
|
return linearInterpolation(sx, u, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun noise2(x: Double, y: Double): Double {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
protected inline fun noise2(x: Double, y: Double): Double {
|
||||||
val (bx0, bx1, rx0, rx1) = setup(x)
|
val (bx0, bx1, rx0, rx1) = setup(x)
|
||||||
val (by0, by1, ry0, ry1) = setup(y)
|
val (by0, by1, ry0, ry1) = setup(y)
|
||||||
|
|
||||||
@ -192,50 +186,51 @@ abstract class AbstractPerlinNoise(val parameters: PerlinNoiseParameters) {
|
|||||||
val sx = curve(rx0)
|
val sx = curve(rx0)
|
||||||
val sy = curve(ry0)
|
val sy = curve(ry0)
|
||||||
|
|
||||||
var u = at2(g2[b00, 0], g2[b00, 1], rx0, ry0)
|
var u = at2(g2_0[b00], g2_1[b00], rx0, ry0)
|
||||||
var v = at2(g2[b10, 0], g2[b10, 1], rx1, ry0)
|
var v = at2(g2_0[b10], g2_1[b10], rx1, ry0)
|
||||||
val a = linearInterpolation(sx, u, v)
|
val a = linearInterpolation(sx, u, v)
|
||||||
|
|
||||||
u = at2(g2[b01, 0], g2[b01, 1], rx0, ry1)
|
u = at2(g2_0[b01], g2_1[b01], rx0, ry1)
|
||||||
v = at2(g2[b11, 0], g2[b11, 1], rx1, ry1)
|
v = at2(g2_0[b11], g2_1[b11], rx1, ry1)
|
||||||
val b = linearInterpolation(sx, u, v)
|
val b = linearInterpolation(sx, u, v)
|
||||||
|
|
||||||
return linearInterpolation(sy, a, b)
|
return linearInterpolation(sy, a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun noise3(x: Double, y: Double, z: Double): Double {
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
protected inline fun noise3(x: Double, y: Double, z: Double): Double {
|
||||||
val (bx0, bx1, rx0, rx1) = setup(x)
|
val (bx0, bx1, rx0, rx1) = setup(x)
|
||||||
val (by0, by1, ry0, ry1) = setup(y)
|
val (by0, by1, ry0, ry1) = setup(y)
|
||||||
val (bz0, bz1, rz0, rz1) = setup(z)
|
val (bz0, bz1, rz0, rz1) = setup(z)
|
||||||
|
|
||||||
val i = p[bx0];
|
val i = p[bx0]
|
||||||
val j = p[bx1];
|
val j = p[bx1]
|
||||||
|
|
||||||
val b00 = p[i + by0];
|
val b00 = p[i + by0]
|
||||||
val b10 = p[j + by0];
|
val b10 = p[j + by0]
|
||||||
val b01 = p[i + by1];
|
val b01 = p[i + by1]
|
||||||
val b11 = p[j + by1];
|
val b11 = p[j + by1]
|
||||||
|
|
||||||
val sx = curve(rx0);
|
val sx = curve(rx0)
|
||||||
val sy = curve(ry0);
|
val sy = curve(ry0)
|
||||||
val sz = curve(rz0);
|
val sz = curve(rz0)
|
||||||
|
|
||||||
var u = at3(g3[b00 + bz0, 0], g3[b00 + bz0, 1], g3[b00 + bz0, 2], rx0, ry0, rz0)
|
var u = at3(g3_0[b00 + bz0], g3_1[b00 + bz0], g3_2[b00 + bz0], rx0, ry0, rz0)
|
||||||
var v = at3(g3[b10 + bz0, 0], g3[b10 + bz0, 1], g3[b10 + bz0, 2], rx1, ry0, rz0)
|
var v = at3(g3_0[b10 + bz0], g3_1[b10 + bz0], g3_2[b10 + bz0], rx1, ry0, rz0)
|
||||||
var a = linearInterpolation(sx, u, v)
|
var a = linearInterpolation(sx, u, v)
|
||||||
|
|
||||||
u = at3(g3[b01 + bz0, 0], g3[b01 + bz0, 1], g3[b01 + bz0, 2], rx0, ry1, rz0)
|
u = at3(g3_0[b01 + bz0], g3_1[b01 + bz0], g3_2[b01 + bz0], rx0, ry1, rz0)
|
||||||
v = at3(g3[b11 + bz0, 0], g3[b11 + bz0, 1], g3[b11 + bz0, 2], rx1, ry1, rz0)
|
v = at3(g3_0[b11 + bz0], g3_1[b11 + bz0], g3_2[b11 + bz0], rx1, ry1, rz0)
|
||||||
var b = linearInterpolation(sx, u, v)
|
var b = linearInterpolation(sx, u, v)
|
||||||
|
|
||||||
val c = linearInterpolation(sy, a, b)
|
val c = linearInterpolation(sy, a, b)
|
||||||
|
|
||||||
u = at3(g3[b00 + bz1, 0], g3[b00 + bz1, 1], g3[b00 + bz1, 2], rx0, ry0, rz1)
|
u = at3(g3_0[b00 + bz1], g3_1[b00 + bz1], g3_2[b00 + bz1], rx0, ry0, rz1)
|
||||||
v = at3(g3[b10 + bz1, 0], g3[b10 + bz1, 1], g3[b10 + bz1, 2], rx1, ry0, rz1)
|
v = at3(g3_0[b10 + bz1], g3_1[b10 + bz1], g3_2[b10 + bz1], rx1, ry0, rz1)
|
||||||
a = linearInterpolation(sx, u, v)
|
a = linearInterpolation(sx, u, v)
|
||||||
|
|
||||||
u = at3(g3[b01 + bz1, 0], g3[b01 + bz1, 1], g3[b01 + bz1, 2], rx0, ry1, rz1)
|
u = at3(g3_0[b01 + bz1], g3_1[b01 + bz1], g3_2[b01 + bz1], rx0, ry1, rz1)
|
||||||
v = at3(g3[b11 + bz1, 0], g3[b11 + bz1, 1], g3[b11 + bz1, 2], rx1, ry1, rz1)
|
v = at3(g3_0[b11 + bz1], g3_1[b11 + bz1], g3_2[b11 + bz1], rx1, ry1, rz1)
|
||||||
b = linearInterpolation(sx, u, v)
|
b = linearInterpolation(sx, u, v)
|
||||||
|
|
||||||
val d = linearInterpolation(sy, a, b)
|
val d = linearInterpolation(sy, a, b)
|
||||||
|
@ -9,7 +9,6 @@ class BillowNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double): Double {
|
override fun get(x: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var p = x * parameters.frequency
|
var p = x * parameters.frequency
|
||||||
var scale = 1.0
|
var scale = 1.0
|
||||||
@ -24,7 +23,6 @@ class BillowNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double, y: Double): Double {
|
override fun get(x: Double, y: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var px = x * parameters.frequency
|
var px = x * parameters.frequency
|
||||||
var py = y * parameters.frequency
|
var py = y * parameters.frequency
|
||||||
@ -41,7 +39,6 @@ class BillowNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double, y: Double, z: Double): Double {
|
override fun get(x: Double, y: Double, z: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var px = x * parameters.frequency
|
var px = x * parameters.frequency
|
||||||
var py = y * parameters.frequency
|
var py = y * parameters.frequency
|
||||||
|
@ -8,7 +8,6 @@ class PerlinNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double): Double {
|
override fun get(x: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var p = x * parameters.frequency
|
var p = x * parameters.frequency
|
||||||
var scale = 1.0
|
var scale = 1.0
|
||||||
@ -23,7 +22,6 @@ class PerlinNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double, y: Double): Double {
|
override fun get(x: Double, y: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var px = x * parameters.frequency
|
var px = x * parameters.frequency
|
||||||
var py = y * parameters.frequency
|
var py = y * parameters.frequency
|
||||||
@ -40,7 +38,6 @@ class PerlinNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double, y: Double, z: Double): Double {
|
override fun get(x: Double, y: Double, z: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var px = x * parameters.frequency
|
var px = x * parameters.frequency
|
||||||
var py = y * parameters.frequency
|
var py = y * parameters.frequency
|
||||||
|
@ -9,7 +9,6 @@ class RidgedNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double): Double {
|
override fun get(x: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var p = x * parameters.frequency
|
var p = x * parameters.frequency
|
||||||
var scale = 1.0
|
var scale = 1.0
|
||||||
@ -32,7 +31,6 @@ class RidgedNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double, y: Double): Double {
|
override fun get(x: Double, y: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var px = x * parameters.frequency
|
var px = x * parameters.frequency
|
||||||
var py = y * parameters.frequency
|
var py = y * parameters.frequency
|
||||||
@ -57,7 +55,6 @@ class RidgedNoise(parameters: PerlinNoiseParameters) : AbstractPerlinNoise(param
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun get(x: Double, y: Double, z: Double): Double {
|
override fun get(x: Double, y: Double, z: Double): Double {
|
||||||
checkInit()
|
|
||||||
var sum = 0.0
|
var sum = 0.0
|
||||||
var px = x * parameters.frequency
|
var px = x * parameters.frequency
|
||||||
var py = y * parameters.frequency
|
var py = y * parameters.frequency
|
||||||
|
@ -31,10 +31,8 @@ import kotlin.math.sin
|
|||||||
class Sky() {
|
class Sky() {
|
||||||
val networkedGroup = MasterElement(NetworkedGroup())
|
val networkedGroup = MasterElement(NetworkedGroup())
|
||||||
|
|
||||||
private val skyParametersNetState = networkedGroup.upstream.add(networkedJson(SkyParameters()))
|
var skyParameters by networkedGroup.upstream.add(networkedJson(SkyParameters()))
|
||||||
|
|
||||||
var skyType by networkedGroup.upstream.add(networkedEnumStupid(SkyType.ORBITAL))
|
var skyType by networkedGroup.upstream.add(networkedEnumStupid(SkyType.ORBITAL))
|
||||||
private set
|
|
||||||
|
|
||||||
var time by networkedGroup.upstream.add(networkedDouble())
|
var time by networkedGroup.upstream.add(networkedDouble())
|
||||||
private set
|
private set
|
||||||
@ -90,7 +88,7 @@ class Sky() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor(parameters: SkyParameters) : this() {
|
constructor(parameters: SkyParameters) : this() {
|
||||||
skyParametersNetState.value = parameters.copy()
|
skyParameters = parameters.copy()
|
||||||
skyType = parameters.skyType
|
skyType = parameters.skyType
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +194,7 @@ class Sky() {
|
|||||||
flyingTimer += delta
|
flyingTimer += delta
|
||||||
|
|
||||||
if (flyingType == FlyingType.DISEMBARKING) {
|
if (flyingType == FlyingType.DISEMBARKING) {
|
||||||
val finished = if (skyParametersNetState.value.skyType == SkyType.SPACE)
|
val finished = if (skyParameters.skyType == SkyType.SPACE)
|
||||||
controlledMovement(Globals.sky.spaceDisembarkPath, Globals.sky.spaceDisembarkOrigin, flyingTimer)
|
controlledMovement(Globals.sky.spaceDisembarkPath, Globals.sky.spaceDisembarkOrigin, flyingTimer)
|
||||||
else
|
else
|
||||||
controlledMovement(Globals.sky.disembarkPath, Globals.sky.disembarkOrigin, flyingTimer)
|
controlledMovement(Globals.sky.disembarkPath, Globals.sky.disembarkOrigin, flyingTimer)
|
||||||
@ -205,7 +203,7 @@ class Sky() {
|
|||||||
flyingType = FlyingType.WARP
|
flyingType = FlyingType.WARP
|
||||||
}
|
}
|
||||||
} else if (flyingType == FlyingType.ARRIVING) {
|
} else if (flyingType == FlyingType.ARRIVING) {
|
||||||
val finished = if (skyParametersNetState.value.skyType == SkyType.SPACE)
|
val finished = if (skyParameters.skyType == SkyType.SPACE)
|
||||||
controlledMovement(Globals.sky.spaceArrivalPath, Globals.sky.spaceArrivalOrigin, flyingTimer)
|
controlledMovement(Globals.sky.spaceArrivalPath, Globals.sky.spaceArrivalOrigin, flyingTimer)
|
||||||
else
|
else
|
||||||
controlledMovement(Globals.sky.arrivalPath, Globals.sky.arrivalOrigin, flyingTimer)
|
controlledMovement(Globals.sky.arrivalPath, Globals.sky.arrivalOrigin, flyingTimer)
|
||||||
@ -235,13 +233,13 @@ class Sky() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (warpPhase == WarpPhase.SPEEDING_UP && flyingTimer >= speedupTime && !enterHyperspace && destination != null) {
|
if (warpPhase == WarpPhase.SPEEDING_UP && flyingTimer >= speedupTime && !enterHyperspace && destination != null) {
|
||||||
skyParametersNetState.value = destination!!
|
skyParameters = destination!!
|
||||||
destination = null
|
destination = null
|
||||||
warpPhase = WarpPhase.SLOWING_DOWN
|
warpPhase = WarpPhase.SLOWING_DOWN
|
||||||
} else if (warpPhase == WarpPhase.SPEEDING_UP && flyingTimer >= speedupTime && enterHyperspace) {
|
} else if (warpPhase == WarpPhase.SPEEDING_UP && flyingTimer >= speedupTime && enterHyperspace) {
|
||||||
warpPhase = WarpPhase.MAINTAIN
|
warpPhase = WarpPhase.MAINTAIN
|
||||||
} else if (warpPhase == WarpPhase.MAINTAIN && flyingTimer >= Globals.sky.flyingTimer && destination != null) {
|
} else if (warpPhase == WarpPhase.MAINTAIN && flyingTimer >= Globals.sky.flyingTimer && destination != null) {
|
||||||
skyParametersNetState.value = destination!!
|
skyParameters = destination!!
|
||||||
destination = null
|
destination = null
|
||||||
warpPhase = WarpPhase.SLOWING_DOWN
|
warpPhase = WarpPhase.SLOWING_DOWN
|
||||||
} else if (warpPhase == WarpPhase.SLOWING_DOWN && flyingTimer >= slowdownTime) {
|
} else if (warpPhase == WarpPhase.SLOWING_DOWN && flyingTimer >= slowdownTime) {
|
||||||
|
@ -12,7 +12,7 @@ class DisplacementTerrainSelector(data: Data, parameters: TerrainSelectorParamet
|
|||||||
@JsonFactory
|
@JsonFactory
|
||||||
data class Data(
|
data class Data(
|
||||||
val xType: PerlinNoiseParameters.Type,
|
val xType: PerlinNoiseParameters.Type,
|
||||||
val xScale: Int = 512,
|
val xScale: Int = PerlinNoiseParameters.DEFAULT_SCALE,
|
||||||
val xOctaves: Int,
|
val xOctaves: Int,
|
||||||
val xFreq: Double,
|
val xFreq: Double,
|
||||||
val xAmp: Double,
|
val xAmp: Double,
|
||||||
@ -21,7 +21,7 @@ class DisplacementTerrainSelector(data: Data, parameters: TerrainSelectorParamet
|
|||||||
val xBeta: Double = 2.0,
|
val xBeta: Double = 2.0,
|
||||||
|
|
||||||
val yType: PerlinNoiseParameters.Type,
|
val yType: PerlinNoiseParameters.Type,
|
||||||
val yScale: Int = 512,
|
val yScale: Int = PerlinNoiseParameters.DEFAULT_SCALE,
|
||||||
val yOctaves: Int,
|
val yOctaves: Int,
|
||||||
val yFreq: Double,
|
val yFreq: Double,
|
||||||
val yAmp: Double,
|
val yAmp: Double,
|
||||||
|
Loading…
Reference in New Issue
Block a user