package mods.betterfoliage.config import me.zeroeightsix.fiber.tree.ConfigNode import java.util.* interface PopulationConfigData { val enabled: Boolean val population: Int fun enabled(random: Random) = random.nextInt(64) < population && enabled } fun population(default: Int) = integer(default, min = 0, max = 64, langKey = recurring) class MainConfig : DelegatingConfigGroup(ConfigNode("root", null)) { val enabled by boolean(true, langKey = fakeCategory("global")) val nVidia by boolean(true, langKey = fakeCategory("global")) val leaves by subNode { LeavesConfig(it) } val shortGrass by subNode { ShortGrassConfig(it) } val connectedGrass by subNode { ConnectedGrassConfig(it) } val roundLogs by subNode { RoundLogConfig(it) } val cactus by subNode { CactusConfig(it) } val lilypad by subNode { LilypadConfig(it) } val reed by subNode { ReedConfig(it) } val algae by subNode { AlgaeConfig(it) } val coral by subNode { CoralConfig(it) } val netherrack by subNode { NetherrackConfig(it) } val fallingLeaves by subNode { FallingLeavesConfig(it) } val risingSoul by subNode { RisingSoulConfig(it) } } class LeavesConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val snowEnabled by boolean(true) val dense by boolean(false) val hideInternal by boolean(true) val hOffset by double(0.2, min = 0.0, max = 0.4, langKey = recurring) val vOffset by double(0.1, min = 0.0, max = 0.4, langKey = recurring) val size by double(1.4, min = 0.75, max = 2.5, langKey = recurring) } class ShortGrassConfig(node: ConfigNode) : DelegatingConfigGroup(node), PopulationConfigData { override val enabled by boolean(true, langKey = recurring) val myceliumEnabled by boolean(true) val snowEnabled by boolean(true) val hOffset by double(0.2, min = 0.0, max = 0.4, langKey = recurring) val heightMin by double(0.6, min = 0.1, max = 2.5, langKey = recurring) val heightMax by double(0.6, min = 0.1, max = 2.5, langKey = recurring) { it.coerceAtLeast(heightMin) } val size by double(1.0, min = 0.5, max = 1.5, langKey = recurring) override val population by population(64) val useGenerated by boolean(false) val shaderWind by boolean(true, langKey = recurring) val saturationThreshold by double(0.1, min = 0.0, max = 1.0) } class ConnectedGrassConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val snowEnabled by boolean(true) } class RoundLogConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val defaultY by boolean(false) val connectSolids by boolean(false) val lenientConnect by boolean(true) val connectPerpendicular by boolean(true) val connectGrass by boolean(true) val radiusSmall by double(0.25, min = 0.0, max = 0.5) val radiusLarge by double(0.25, min = 0.0, max = 0.5) { it.coerceAtLeast(radiusSmall) } val dimming by double(0.7, min = 0.0, max = 1.0) val zProtection by double(0.99, min = 0.9, max = 1.0) } class CactusConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val size by double(1.3, min = 0.5, max = 1.5, langKey = recurring) val sizeVariation by double(0.1, min = 0.0, max = 0.5) val hOffset by double(0.1, min = 0.0, max = 0.5, langKey = recurring) } class LilypadConfig(node: ConfigNode) : DelegatingConfigGroup(node), PopulationConfigData { override val enabled by boolean(true, langKey = recurring) val hOffset by double(0.1, min = 0.0, max = 0.25, langKey = recurring) override val population by population(16) } class ReedConfig(node: ConfigNode) : DelegatingConfigGroup(node), PopulationConfigData { override val enabled by boolean(true, langKey = recurring) val hOffset by double(0.2, min = 0.0, max = 0.4, langKey = recurring) val heightMin by double(1.7, min = 1.5, max = 3.0, langKey = recurring) val heightMax by double(2.2, min = 1.5, max = 3.0, langKey = recurring) { it.coerceAtLeast(heightMin) } override val population by population(32) val minBiomeTemp by double(0.4, min = 0.0, max = 2.0) val minBiomeRainfall by double(0.4, min = 0.0, max = 1.0) val shaderWind by boolean(true, langKey = recurring) } class AlgaeConfig(node: ConfigNode) : DelegatingConfigGroup(node), PopulationConfigData { override val enabled by boolean(true, langKey = recurring) val hOffset by double(0.1, min = 0.0, max = 0.4, langKey = recurring) val size by double(1.0, min = 0.5, max = 1.5, langKey = recurring) val heightMin by double(0.5, min = 0.1, max = 1.0, langKey = recurring) val heightMax by double(0.5, min = 0.1, max = 1.0, langKey = recurring) { it.coerceAtLeast(heightMin) } override val population by population(48) val shaderWind by boolean(true, langKey = recurring) } class CoralConfig(node: ConfigNode) : DelegatingConfigGroup(node), PopulationConfigData { override val enabled by boolean(true, langKey = recurring) val shallowWater by boolean(false) val hOffset by double(0.2, min = 0.0, max = 0.4, langKey = recurring) val vOffset by double(0.1, min = 0.0, max = 0.4, langKey = recurring) val size by double(0.7, min = 0.5, max = 1.5, langKey = recurring) val crustSize by double(1.4, min = 0.5, max = 1.5) val chance by integer(32, min = 0, max = 64) override val population by population(48) } class NetherrackConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val hOffset by double(0.2, min = 0.0, max = 0.4, langKey = recurring) val size by double(1.0, min = 0.5, max = 1.5, langKey = recurring) val heightMin by double(0.6, min = 0.5, max = 1.5, langKey = recurring) val heightMax by double(0.8, min = 0.5, max = 1.5, langKey = recurring) { it.coerceAtLeast(heightMin) } } class FallingLeavesConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val speed by double(0.05, min = 0.01, max = 0.15) val windStrength by double(0.5, min = 0.1, max = 2.0) val stormStrength by double(0.8, min = 0.1, max = 2.0) { it.coerceAtLeast(windStrength) } val size by double(0.75, min = 0.25, max = 1.5) val chance by double(0.05, min = 0.001, max = 1.0) val perturb by double(0.25, min = 0.01, max = 1.0) val lifetime by double(7.5, min = 1.0, max = 15.0) } class RisingSoulConfig(node: ConfigNode) : DelegatingConfigGroup(node) { val enabled by boolean(true, langKey = recurring) val chance by double(0.02, min = 0.001, max = 1.0) val perturb by double(0.05, min = 0.01, max = 0.25) val headSize by double(1.0, min = 0.25, max = 1.5) val trailSize by double(0.75, min = 0.25, max = 1.5) val opacity by double(0.5, min = 0.05, max = 1.0) val sizeDecay by double(0.97, min = 0.5, max = 1.0) val opacityDecay by double(0.97, min = 0.5, max = 1.0) val lifetime by double(4.0, min = 1.0, max = 15.0) val trailLength by integer(48, min = 2, max = 128) val trailDensity by integer(3, min = 1, max = 16) }