diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index b72dbdb82..a44b74a1d 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -597,8 +597,8 @@ open class GameWorld( layerOres.unsafeSetTile(x, y, tileNameToNumberMap[ore]!!, placement) } - fun terrainIterator(): Iterator { - return object : Iterator { + fun terrainIterator(): Iterator> { + return object : Iterator> { private var iteratorCount = 0 @@ -606,13 +606,13 @@ open class GameWorld( return iteratorCount < width * height } - override fun next(): ItemID { + override fun next(): List { val y = iteratorCount / width val x = iteratorCount % width // advance counter iteratorCount += 1 - return getTileFromTerrain(x, y) + return listOf(getTileFromTerrain(x, y), getTileFromWall(x, y), getTileFromOre(x, y).item) } } diff --git a/src/net/torvald/terrarum/modulebasegame/console/ExportMap.kt b/src/net/torvald/terrarum/modulebasegame/console/ExportMap.kt index c3da6d2dd..f5d98dea9 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/ExportMap.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/ExportMap.kt @@ -1,12 +1,16 @@ package net.torvald.terrarum.modulebasegame.console +import com.badlogic.gdx.graphics.Color import net.torvald.gdx.graphics.Cvec import net.torvald.terrarum.App +import net.torvald.terrarum.BlockCodex import net.torvald.terrarum.INGAME +import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.console.ConsoleCommand import net.torvald.terrarum.console.Echo import net.torvald.terrarum.console.EchoError import net.torvald.terrarum.utils.RasterWriter +import net.torvald.terrarum.worlddrawer.CreateTileAtlas.Companion.WALL_OVERLAY_COLOUR import net.torvald.terrarum.worlddrawer.toRGBA import java.io.File import java.io.IOException @@ -20,6 +24,14 @@ internal object ExportMap : ConsoleCommand { // private var mapDataPointer = 0 + private val oreColourMap = hashMapOf( + Block.AIR to Cvec(0), + "ores@basegame:1" to Cvec(0x00e9c8ff), + "ores@basegame:2" to Cvec(0xff9a5dff.toInt()), + "ores@basegame:3" to Cvec(0x383314ff), + ) + + private val WALL_OVERLAY = Cvec(0.35f, 0.35f, 0.35f, 1f) override fun execute(args: Array) { val world = (INGAME.world) @@ -31,8 +43,13 @@ internal object ExportMap : ConsoleCommand { var mapData = ByteArray(world.width * world.height * 3) var mapDataPointer = 0 - for (tile in world.terrainIterator()) { - val colArray = App.tileMaker.terrainTileColourMap.get(tile)!!.toByteArray() + for ((terr, wall, ore) in world.terrainIterator()) { + val colOre = (oreColourMap.get(ore) ?: throw NullPointerException("nullore $ore")).toByteArray() + val colFore = (App.tileMaker.terrainTileColourMap.get(terr) ?: throw NullPointerException("nullterr $terr")).toByteArray() + val colWall = (App.tileMaker.terrainTileColourMap.get(wall) ?: throw NullPointerException("nullwall $wall")).cpy().mul(WALL_OVERLAY).toByteArray() + + val colArray = if (ore != Block.AIR) colOre else if (BlockCodex[terr].isSolid) colFore else colWall + for (i in 0..2) { mapData[mapDataPointer + i] = colArray[i]