mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
using new terragen on main game -- noisy tiles are real issue
This commit is contained in:
@@ -28,6 +28,8 @@ import net.torvald.terrarum.modulebasegame.ui.*
|
|||||||
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
|
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
|
||||||
import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser
|
import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser
|
||||||
import net.torvald.terrarum.modulebasegame.worldgenerator.WorldGenerator
|
import net.torvald.terrarum.modulebasegame.worldgenerator.WorldGenerator
|
||||||
|
import net.torvald.terrarum.modulebasegame.worldgenerator.Worldgen
|
||||||
|
import net.torvald.terrarum.modulebasegame.worldgenerator.WorldgenParams
|
||||||
import net.torvald.terrarum.ui.UICanvas
|
import net.torvald.terrarum.ui.UICanvas
|
||||||
import net.torvald.terrarum.worlddrawer.CreateTileAtlas
|
import net.torvald.terrarum.worlddrawer.CreateTileAtlas
|
||||||
import net.torvald.terrarum.worlddrawer.CreateTileAtlas.TILE_SIZE
|
import net.torvald.terrarum.worlddrawer.CreateTileAtlas.TILE_SIZE
|
||||||
@@ -259,9 +261,11 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) {
|
|||||||
world = gameworld
|
world = gameworld
|
||||||
|
|
||||||
// generate terrain for the map
|
// generate terrain for the map
|
||||||
WorldGenerator.attachMap(world)
|
//WorldGenerator.attachMap(world)
|
||||||
WorldGenerator.SEED = worldParams.worldGenSeed
|
//WorldGenerator.SEED = worldParams.worldGenSeed
|
||||||
WorldGenerator.generateMap()
|
//WorldGenerator.generateMap()
|
||||||
|
Worldgen.attachMap(world, WorldgenParams(worldParams.worldGenSeed))
|
||||||
|
Worldgen.generateMap()
|
||||||
|
|
||||||
|
|
||||||
historicalFigureIDBucket = ArrayList<Int>()
|
historicalFigureIDBucket = ArrayList<Int>()
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package net.torvald.terrarum.modulebasegame.worldgenerator
|
|||||||
|
|
||||||
import com.sudoplay.joise.Joise
|
import com.sudoplay.joise.Joise
|
||||||
import com.sudoplay.joise.module.*
|
import com.sudoplay.joise.module.*
|
||||||
|
import net.torvald.terrarum.AppLoader.printdbg
|
||||||
|
import net.torvald.terrarum.LoadScreen
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
import net.torvald.terrarum.concurrent.ThreadParallel
|
import net.torvald.terrarum.concurrent.ThreadParallel
|
||||||
import net.torvald.terrarum.concurrent.mapToThreadPoolDirectly
|
import net.torvald.terrarum.concurrent.mapToThreadPoolDirectly
|
||||||
@@ -23,6 +25,7 @@ class Terragen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, par
|
|||||||
|
|
||||||
(0 until world.width).mapToThreadPoolDirectly(this.javaClass.simpleName) { range ->
|
(0 until world.width).mapToThreadPoolDirectly(this.javaClass.simpleName) { range ->
|
||||||
for (y in 0 until world.height) {
|
for (y in 0 until world.height) {
|
||||||
|
printdbg(this, "Tile draw for y=$y")
|
||||||
for (x in range) {
|
for (x in range) {
|
||||||
val sampleTheta = (x.toDouble() / world.width) * TWO_PI
|
val sampleTheta = (x.toDouble() / world.width) * TWO_PI
|
||||||
val sampleOffset = world.width / 8.0
|
val sampleOffset = world.width / 8.0
|
||||||
@@ -36,9 +39,10 @@ class Terragen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, par
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ThreadParallel.startAll()
|
|
||||||
generationStarted = true
|
generationStarted = true
|
||||||
super.run()
|
ThreadParallel.startAllWaitForDie()
|
||||||
|
printdbg(this, "Waking up Worldgen")
|
||||||
|
//Worldgen.wake()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.torvald.terrarum.modulebasegame.worldgenerator
|
package net.torvald.terrarum.modulebasegame.worldgenerator
|
||||||
|
|
||||||
import net.torvald.terrarum.AppLoader
|
import net.torvald.terrarum.AppLoader
|
||||||
|
import net.torvald.terrarum.AppLoader.printdbg
|
||||||
import net.torvald.terrarum.LoadScreen
|
import net.torvald.terrarum.LoadScreen
|
||||||
import net.torvald.terrarum.gameworld.GameWorld
|
import net.torvald.terrarum.gameworld.GameWorld
|
||||||
|
|
||||||
@@ -11,10 +12,17 @@ import net.torvald.terrarum.gameworld.GameWorld
|
|||||||
*/
|
*/
|
||||||
object Worldgen {
|
object Worldgen {
|
||||||
|
|
||||||
operator fun invoke(worldIndex: Int, params: WorldgenParams) {
|
private lateinit var world: GameWorld
|
||||||
val genTime = AppLoader.getTIME_T()
|
private lateinit var params: WorldgenParams
|
||||||
val world = GameWorld(worldIndex, params.width, params.height, genTime, genTime, 0)
|
|
||||||
|
|
||||||
|
private val threadLock = java.lang.Object()
|
||||||
|
|
||||||
|
fun attachMap(world: GameWorld, genParams: WorldgenParams) {
|
||||||
|
this.world = world
|
||||||
|
params = genParams
|
||||||
|
}
|
||||||
|
|
||||||
|
fun generateMap() {
|
||||||
val jobs = listOf(
|
val jobs = listOf(
|
||||||
Work("Reticulating Splines", Terragen(world, params.seed, params.terragenParams))
|
Work("Reticulating Splines", Terragen(world, params.seed, params.terragenParams))
|
||||||
//Work("Adding Vegetations") { Biomegen(world, params.seed, params.biomegenParams) }
|
//Work("Adding Vegetations") { Biomegen(world, params.seed, params.biomegenParams) }
|
||||||
@@ -22,15 +30,28 @@ object Worldgen {
|
|||||||
|
|
||||||
|
|
||||||
for (i in 0 until jobs.size) {
|
for (i in 0 until jobs.size) {
|
||||||
|
printdbg(this, "Worldgen: job #$i")
|
||||||
|
|
||||||
val it = jobs[i]
|
val it = jobs[i]
|
||||||
|
|
||||||
LoadScreen.addMessage(it.loadingScreenName)
|
LoadScreen.addMessage(it.loadingScreenName)
|
||||||
it.theWork.run()
|
it.theWork.run()
|
||||||
|
|
||||||
// busy wait
|
// wait
|
||||||
while (!it.theWork.generationDone) { }
|
//while (!it.theWork.generationDone) { } // busy wait
|
||||||
|
//synchronized(threadLock) {
|
||||||
|
// threadLock.wait()
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printdbg(this, "Generation job finished")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun wake() {
|
||||||
|
synchronized(threadLock) {
|
||||||
|
threadLock.notifyAll()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private data class Work(val loadingScreenName: String, val theWork: Gen)
|
private data class Work(val loadingScreenName: String, val theWork: Gen)
|
||||||
@@ -41,15 +62,14 @@ abstract class Gen(val world: GameWorld, val seed: Long, val params: Any) {
|
|||||||
abstract var generationStarted: Boolean
|
abstract var generationStarted: Boolean
|
||||||
abstract val generationDone: Boolean
|
abstract val generationDone: Boolean
|
||||||
open fun run() {
|
open fun run() {
|
||||||
if (generationDone) {
|
/*if (generationDone) {
|
||||||
// worldgen.wake()
|
// worldgen.wake()
|
||||||
}
|
Worldgen.threadLock.notifyAll()
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class WorldgenParams(
|
data class WorldgenParams(
|
||||||
val width: Int,
|
|
||||||
val height: Int,
|
|
||||||
val seed: Long,
|
val seed: Long,
|
||||||
// optional parametres
|
// optional parametres
|
||||||
val terragenParams: TerragenParams = TerragenParams(),
|
val terragenParams: TerragenParams = TerragenParams(),
|
||||||
|
|||||||
Reference in New Issue
Block a user