diff --git a/src/net/torvald/terrarum/StateInGame.kt b/src/net/torvald/terrarum/StateInGame.kt index fae33128f..506645ab9 100644 --- a/src/net/torvald/terrarum/StateInGame.kt +++ b/src/net/torvald/terrarum/StateInGame.kt @@ -512,8 +512,8 @@ constructor() : BasicGameState() { ThreadPool.map( i, ThreadActorUpdate( - ((actors / CORES) * i).toInt(), - ((actors / CORES) * i.plus(1)).toInt() - 1, + actors.div(Terrarum.THREADS).times(i).roundInt(), + actors.div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1, gc, delta ), "ActorUpdate" diff --git a/src/net/torvald/terrarum/StateNoiseTexGen.kt b/src/net/torvald/terrarum/StateNoiseTexGen.kt index 010b3c2ad..ea4bea4af 100644 --- a/src/net/torvald/terrarum/StateNoiseTexGen.kt +++ b/src/net/torvald/terrarum/StateNoiseTexGen.kt @@ -4,6 +4,7 @@ import com.sudoplay.joise.Joise import com.sudoplay.joise.module.* import net.torvald.terrarum.Terrarum.Companion.STATE_ID_TOOL_NOISEGEN import net.torvald.terrarum.concurrent.ThreadPool +import net.torvald.terrarum.gameactors.roundInt import org.newdawn.slick.Color import org.newdawn.slick.GameContainer import org.newdawn.slick.Graphics @@ -25,10 +26,8 @@ class StateNoiseTexGen : BasicGameState() { } override fun init(p0: GameContainer?, p1: StateBasedGame?) { generateNoiseImage() - - println("Press SPACE to generate new noise") } - + private fun noiseRidged(): Joise { val ridged = ModuleFractal() ridged.setType(ModuleFractal.FractalType.RIDGEMULTI) @@ -59,6 +58,21 @@ class StateNoiseTexGen : BasicGameState() { return Joise(ridged_autocorrect) } + private fun noiseBillowFractal(): Joise { + val ridged = ModuleFractal() + ridged.setType(ModuleFractal.FractalType.BILLOW) + ridged.setAllSourceInterpolationTypes(ModuleBasisFunction.InterpolationType.QUINTIC) + ridged.setNumOctaves(8) + ridged.setFrequency(1.0) + ridged.seed = Random().nextLong() + + val ridged_autocorrect = ModuleAutoCorrect() + ridged_autocorrect.setRange(0.0, 1.0) + ridged_autocorrect.setSource(ridged) + + return Joise(ridged_autocorrect) + } + private fun noiseBlobs(): Joise { val gradval = ModuleBasisFunction() gradval.seed = Random().nextLong() @@ -103,7 +117,7 @@ class StateNoiseTexGen : BasicGameState() { } fun generateNoiseImage() { - val noiseModule = noiseSmokyFractal() // change noise function here + val noiseModule = noiseBillowFractal() // change noise function here noiseImage.graphics.background = Color.black @@ -113,12 +127,12 @@ class StateNoiseTexGen : BasicGameState() { } } - for (i in 0..Terrarum.CORES - 1) { + for (i in 0..Terrarum.THREADS - 1) { ThreadPool.map( i, ThreadRunNoiseSampling( - ((imagesize / Terrarum.CORES) * i), - ((imagesize / Terrarum.CORES) * i.plus(1)) - 1, + imagesize.toFloat().div(Terrarum.THREADS).times(i).roundInt(), + imagesize.toFloat().div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1, noiseModule ), "SampleJoiseMap" @@ -135,6 +149,10 @@ class StateNoiseTexGen : BasicGameState() { override fun getID() = STATE_ID_TOOL_NOISEGEN override fun render(gc: GameContainer, sbg: StateBasedGame, g: Graphics) { + g.color = Color.red + g.drawString("Press SPACE to generate new noise", 8f, 8f) + g.drawString("CPUs: ${Terrarum.THREADS}", Terrarum.WIDTH - 90f, 8f) + for (sy in 0..imagesize - 1) { for (sx in 0..imagesize - 1) { val noise = noiseMap[sy][sx] diff --git a/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt b/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt index eed893061..0013a2664 100644 --- a/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt +++ b/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt @@ -9,6 +9,7 @@ import com.sudoplay.joise.module.* import net.torvald.terrarum.Terrarum import net.torvald.terrarum.concurrent.ThreadPool import net.torvald.terrarum.gameactors.ThreadActorUpdate +import net.torvald.terrarum.gameactors.roundInt import java.util.* object WorldGenerator { @@ -687,12 +688,12 @@ object WorldGenerator { private fun processNoiseLayers(noiseRecords: Array) { if (Terrarum.MULTITHREAD) { // set up indices - for (i in 0..Terrarum.CORES - 1) { + for (i in 0..Terrarum.THREADS - 1) { ThreadPool.map( i, ThreadProcessNoiseLayers( - ((HEIGHT / Terrarum.CORES) * i), - ((HEIGHT / Terrarum.CORES) * i.plus(1)) - 1, + HEIGHT.toFloat().div(Terrarum.THREADS).times(i).roundInt(), + HEIGHT.toFloat().div(Terrarum.THREADS).times(i.plus(1)).roundInt() - 1, noiseRecords ), "SampleJoiseMap"