From 70d85398ced506f66d4844c17762c3b093dbfa97 Mon Sep 17 00:00:00 2001 From: Song Minjae Date: Wed, 21 Dec 2016 01:06:05 +0900 Subject: [PATCH] cavegen now loops (fine-tune required) Former-commit-id: 5a59323f39ca1cfcfcc0c89c0d7f71f0e2d92762 Former-commit-id: f7d35ae69fcb49af0d1342624eb9f3b0027db398 --- .../torvald/terrarum/gameactors/PhysTestBall.kt | 6 ++++++ .../mapgenerator/ThreadProcessNoiseLayers.kt | 15 +++++++++++++-- .../terrarum/mapgenerator/WorldGenerator.kt | 16 ++++++++-------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/net/torvald/terrarum/gameactors/PhysTestBall.kt b/src/net/torvald/terrarum/gameactors/PhysTestBall.kt index 67034c0de..e63ea6322 100644 --- a/src/net/torvald/terrarum/gameactors/PhysTestBall.kt +++ b/src/net/torvald/terrarum/gameactors/PhysTestBall.kt @@ -36,5 +36,11 @@ class PhysTestBall : ActorWithBody() { hitbox.posY.toFloat(), hitbox.width.toFloat(), hitbox.height.toFloat()) + + g.fillOval( + hitbox.posX.toFloat() - Terrarum.ingame.world.width * TILE_SIZE, + hitbox.posY.toFloat(), + hitbox.width.toFloat(), + hitbox.height.toFloat()) } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/mapgenerator/ThreadProcessNoiseLayers.kt b/src/net/torvald/terrarum/mapgenerator/ThreadProcessNoiseLayers.kt index c1680a71f..908f7ce5c 100644 --- a/src/net/torvald/terrarum/mapgenerator/ThreadProcessNoiseLayers.kt +++ b/src/net/torvald/terrarum/mapgenerator/ThreadProcessNoiseLayers.kt @@ -12,10 +12,21 @@ class ThreadProcessNoiseLayers(val startIndex: Int, val endIndex: Int, println("[mapgenerator] ${record.message}...") for (y in startIndex..endIndex) { for (x in 0..WorldGenerator.WIDTH - 1) { - val noise: Float = record.noiseModule.get( + // straight-line sampling + /*val noise: Float = record.noiseModule.get( x.toDouble() / 48.0, // 48: Fixed value y.toDouble() / 48.0 - ).toFloat() + ).toFloat()*/ + // circular sampling + // Mapping function: + // World(x, y) -> Joise(sin x, y, cos x) + val sampleDensity = 48.0 / 2 // 48.0: magic number from old code + val sampleTheta = (x.toDouble() / WorldGenerator.WIDTH) * WorldGenerator.TWO_PI + val sampleOffset = (WorldGenerator.WIDTH / sampleDensity) / 8.0 + val sampleX = Math.sin(sampleTheta) * sampleOffset + sampleOffset // plus sampleOffset to make only + val sampleY = Math.cos(sampleTheta) * sampleOffset + sampleOffset // positive points are to be sampled + val sampleZ = y / sampleDensity + val noise: Double = record.noiseModule.get(sampleX, sampleY, sampleZ) val fromTerr = record.replaceFromTerrain val fromWall = record.replaceFromWall diff --git a/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt b/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt index 967a3db85..530d370bd 100644 --- a/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt +++ b/src/net/torvald/terrarum/mapgenerator/WorldGenerator.kt @@ -111,9 +111,9 @@ object WorldGenerator { * Done: variants of beach (SAND, SAND_BEACH, SAND_BLACK, SAND_GREEN) */ - //val noiseArray = arrayOf( - // TaggedJoise("Carving caves", noiseRidged(1.7f, 1.4f), 1f, TILE_MACRO_ALL, TILE_MACRO_ALL, Tile.AIR, NoiseFilterSqrt, CAVEGEN_THRE_START, CAVEGEN_THRE_END) - //, TaggedJoise("Collapsing caves", noiseBlobs(0.5f, 0.5f), 0.3f, Tile.AIR, Tile.STONE, Tile.STONE, NoiseFilterUniform) + val noiseArray = arrayOf( + TaggedJoise("Carving caves", noiseRidged(1.7f, 1.4f), 1f, TILE_MACRO_ALL, TILE_MACRO_ALL, Tile.AIR, NoiseFilterSqrt, CAVEGEN_THRE_START, CAVEGEN_THRE_END) + , TaggedJoise("Collapsing caves", noiseBlobs(0.5f, 0.5f), 0.3f, Tile.AIR, Tile.STONE, Tile.STONE, NoiseFilterUniform) // //, TaggedJoise("Putting stone patches on the ground", noiseBlobs(0.8f, 0.8f), 1.02f, intArrayOf(Tile.DIRT, Tile.GRASS), Tile.DIRT, Tile.STONE, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START) //, TaggedJoise("Placing dirt spots in the cave", noiseBlobs(0.5f, 0.5f), 0.98f, Tile.STONE, Tile.STONE, Tile.DIRT, NoiseFilterQuadratic, NOISE_GRAD_END, NOISE_GRAD_START) @@ -138,8 +138,8 @@ object WorldGenerator { //, TaggedJoise("Growing hearts of violet", noiseRidged(2.5f, 2.5f), 1.75f, Tile.STONE, Tile.STONE, Tile.RAW_AMETHYST) // //, TaggedJoise("Cutting over-grown hearts", noiseBlobs(0.7f, 0.7f), 0.17f, Tile.RAW_AMETHYST, Tile.STONE, Tile.STONE) - //) - //processNoiseLayers(noiseArray) + ) + processNoiseLayers(noiseArray) /** TODO Cobaltite, Ilmenite, Aurichalcum (and possibly pitchblende?) */ @@ -256,7 +256,7 @@ object WorldGenerator { return noiseArrayLocal } - private val TWO_PI = Math.PI * 2.0 + val TWO_PI = Math.PI * 2.0 /** * http://accidentalnoise.sourceforge.net/minecraftworlds.html @@ -694,8 +694,8 @@ object WorldGenerator { ThreadPool.map( i, ThreadProcessNoiseLayers( - ((HEIGHT / Terrarum.CORES) * i).toInt(), - ((HEIGHT / Terrarum.CORES) * i.plus(1)).toInt() - 1, + ((HEIGHT / Terrarum.CORES) * i), + ((HEIGHT / Terrarum.CORES) * i.plus(1)) - 1, noiseRecords ), "SampleJoiseMap"