Little more terrain

This commit is contained in:
DBotThePony 2024-04-18 16:43:39 +07:00
parent dbef69d6e6
commit edf33ca224
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 22 additions and 2 deletions

View File

@ -17,7 +17,6 @@ import ru.dbotthepony.kommons.gson.set
import ru.dbotthepony.kommons.gson.value import ru.dbotthepony.kommons.gson.value
import ru.dbotthepony.kommons.math.RGBAColor import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.kommons.util.AABBi import ru.dbotthepony.kommons.util.AABBi
import ru.dbotthepony.kommons.util.Either
import ru.dbotthepony.kommons.vector.Vector2d import ru.dbotthepony.kommons.vector.Vector2d
import ru.dbotthepony.kommons.vector.Vector2i import ru.dbotthepony.kommons.vector.Vector2i
import ru.dbotthepony.kstarbound.Globals import ru.dbotthepony.kstarbound.Globals
@ -26,12 +25,12 @@ import ru.dbotthepony.kstarbound.Registry
import ru.dbotthepony.kstarbound.Starbound import ru.dbotthepony.kstarbound.Starbound
import ru.dbotthepony.kstarbound.defs.tile.BuiltinMetaMaterials import ru.dbotthepony.kstarbound.defs.tile.BuiltinMetaMaterials
import ru.dbotthepony.kstarbound.defs.tile.LiquidDefinition import ru.dbotthepony.kstarbound.defs.tile.LiquidDefinition
import ru.dbotthepony.kstarbound.world.terrain.AbstractTerrainSelector
import ru.dbotthepony.kstarbound.json.builder.JsonFactory import ru.dbotthepony.kstarbound.json.builder.JsonFactory
import ru.dbotthepony.kstarbound.util.ListInterner import ru.dbotthepony.kstarbound.util.ListInterner
import ru.dbotthepony.kstarbound.util.random.AbstractPerlinNoise import ru.dbotthepony.kstarbound.util.random.AbstractPerlinNoise
import ru.dbotthepony.kstarbound.util.random.nextRange import ru.dbotthepony.kstarbound.util.random.nextRange
import ru.dbotthepony.kstarbound.world.WorldGeometry import ru.dbotthepony.kstarbound.world.WorldGeometry
import ru.dbotthepony.kstarbound.world.terrain.AbstractTerrainSelector
import ru.dbotthepony.kstarbound.world.terrain.TerrainSelectorType import ru.dbotthepony.kstarbound.world.terrain.TerrainSelectorType
import java.util.random.RandomGenerator import java.util.random.RandomGenerator
import kotlin.math.roundToInt import kotlin.math.roundToInt

View File

@ -20,6 +20,12 @@ abstract class AbstractTerrainSelector<D : Any>(val data: D, val parameters: Ter
return result return result
} }
fun toJsonPlain(): JsonObject {
val result = Starbound.gson.toJsonTree(data) as JsonObject
result["type"] = type.jsonName
return result
}
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (this === other) if (this === other)
return true return true

View File

@ -21,6 +21,11 @@ sealed class ComparingTerrainSelector(data: Data, parameters: TerrainSelectorPar
} }
class Max(data: Data, parameters: TerrainSelectorParameters) : ComparingTerrainSelector(data, parameters) { class Max(data: Data, parameters: TerrainSelectorParameters) : ComparingTerrainSelector(data, parameters) {
constructor(parameters: TerrainSelectorParameters, vararg sources: AbstractTerrainSelector<*>) : this(
Data(ImmutableList.copyOf(sources.map { it.toJsonPlain() })),
parameters
)
override fun get(x: Int, y: Int): Double { override fun get(x: Int, y: Int): Double {
return sources.maxOf { it[x, y] } return sources.maxOf { it[x, y] }
} }
@ -30,6 +35,11 @@ sealed class ComparingTerrainSelector(data: Data, parameters: TerrainSelectorPar
} }
class Min(data: Data, parameters: TerrainSelectorParameters) : ComparingTerrainSelector(data, parameters) { class Min(data: Data, parameters: TerrainSelectorParameters) : ComparingTerrainSelector(data, parameters) {
constructor(parameters: TerrainSelectorParameters, vararg sources: AbstractTerrainSelector<*>) : this(
Data(ImmutableList.copyOf(sources.map { it.toJsonPlain() })),
parameters
)
override fun get(x: Int, y: Int): Double { override fun get(x: Int, y: Int): Double {
return sources.minOf { it[x, y] } return sources.minOf { it[x, y] }
} }
@ -39,6 +49,11 @@ sealed class ComparingTerrainSelector(data: Data, parameters: TerrainSelectorPar
} }
class MinMax(data: Data, parameters: TerrainSelectorParameters) : ComparingTerrainSelector(data, parameters) { class MinMax(data: Data, parameters: TerrainSelectorParameters) : ComparingTerrainSelector(data, parameters) {
constructor(parameters: TerrainSelectorParameters, vararg sources: AbstractTerrainSelector<*>) : this(
Data(ImmutableList.copyOf(sources.map { it.toJsonPlain() })),
parameters
)
override fun get(x: Int, y: Int): Double { override fun get(x: Int, y: Int): Double {
var value = 0.0 var value = 0.0