mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-15 16:16:10 +09:00
buildingmaker: ore pen wip
This commit is contained in:
@@ -29,6 +29,8 @@ import net.torvald.terrarum.serialise.POILayer
|
|||||||
import net.torvald.terrarum.ui.Toolkit
|
import net.torvald.terrarum.ui.Toolkit
|
||||||
import net.torvald.terrarum.weather.WeatherMixer
|
import net.torvald.terrarum.weather.WeatherMixer
|
||||||
import net.torvald.terrarum.ui.UINSMenu
|
import net.torvald.terrarum.ui.UINSMenu
|
||||||
|
import net.torvald.terrarum.utils.OrePlacement
|
||||||
|
import net.torvald.terrarum.worlddrawer.BlocksDrawer
|
||||||
import net.torvald.terrarum.worlddrawer.WorldCamera
|
import net.torvald.terrarum.worlddrawer.WorldCamera
|
||||||
import net.torvald.util.CircularArray
|
import net.torvald.util.CircularArray
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -238,6 +240,7 @@ class BuildingMaker(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
|
|
||||||
const val PENTARGET_TERRAIN = 1
|
const val PENTARGET_TERRAIN = 1
|
||||||
const val PENTARGET_WALL = 2
|
const val PENTARGET_WALL = 2
|
||||||
|
const val PENTARGET_ORE = 4
|
||||||
|
|
||||||
val toolCursorColour = arrayOf(
|
val toolCursorColour = arrayOf(
|
||||||
Color.YELLOW,
|
Color.YELLOW,
|
||||||
@@ -477,6 +480,22 @@ class BuildingMaker(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getNearbyTilesPos8(x: Int, y: Int): Array<Point2i> {
|
||||||
|
return arrayOf(
|
||||||
|
Point2i(x + 1, y),
|
||||||
|
Point2i(x + 1, y + 1),
|
||||||
|
Point2i(x, y + 1),
|
||||||
|
Point2i(x - 1, y + 1),
|
||||||
|
Point2i(x - 1, y),
|
||||||
|
Point2i(x - 1, y - 1),
|
||||||
|
Point2i(x, y - 1),
|
||||||
|
Point2i(x + 1, y - 1)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
private fun getNearbyOres8(x: Int, y: Int): List<OrePlacement> {
|
||||||
|
return getNearbyTilesPos8(x, y).map { world.getTileFromOre(it.x, it.y) }
|
||||||
|
}
|
||||||
|
|
||||||
private fun makePenWork(x: Int, y: Int) {
|
private fun makePenWork(x: Int, y: Int) {
|
||||||
val world = gameWorld
|
val world = gameWorld
|
||||||
val palSelection = uiPaletteSelector.fore
|
val palSelection = uiPaletteSelector.fore
|
||||||
@@ -486,14 +505,25 @@ class BuildingMaker(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
PENMODE_PENCIL -> {
|
PENMODE_PENCIL -> {
|
||||||
if (palSelection.startsWith("wall@"))
|
if (palSelection.startsWith("wall@"))
|
||||||
world.setTileWall(x, y, palSelection.substring(5), true)
|
world.setTileWall(x, y, palSelection.substring(5), true)
|
||||||
|
else if (palSelection.startsWith("ore@")) {
|
||||||
|
// get autotiling placement
|
||||||
|
val autotiled = getNearbyOres8(x, y).foldIndexed(0) { index, acc, placement ->
|
||||||
|
acc or (placement.item == palSelection).toInt(index)
|
||||||
|
}
|
||||||
|
val placement = BlocksDrawer.connectLut47[autotiled]
|
||||||
|
|
||||||
|
world.setTileOre(x, y, palSelection, placement)
|
||||||
|
}
|
||||||
else
|
else
|
||||||
world.setTileTerrain(x, y, palSelection, true)
|
world.setTileTerrain(x, y, palSelection, true)
|
||||||
}
|
}
|
||||||
PENMODE_PENCIL_ERASE -> {
|
PENMODE_PENCIL_ERASE -> {
|
||||||
|
if (currentPenTarget and PENTARGET_TERRAIN != 0)
|
||||||
|
world.setTileTerrain(x, y, Block.AIR, true)
|
||||||
if (currentPenTarget and PENTARGET_WALL != 0)
|
if (currentPenTarget and PENTARGET_WALL != 0)
|
||||||
world.setTileWall(x, y, Block.AIR, true)
|
world.setTileWall(x, y, Block.AIR, true)
|
||||||
else
|
if (currentPenTarget and PENTARGET_ORE != 0)
|
||||||
world.setTileTerrain(x, y, Block.AIR, true)
|
world.setTileOre(x, y, Block.NULL, 0)
|
||||||
}
|
}
|
||||||
PENMODE_EYEDROPPER -> {
|
PENMODE_EYEDROPPER -> {
|
||||||
uiPaletteSelector.fore = if (world.getTileFromTerrain(x, y) == Block.AIR)
|
uiPaletteSelector.fore = if (world.getTileFromTerrain(x, y) == Block.AIR)
|
||||||
|
|||||||
@@ -157,8 +157,8 @@ internal object BlocksDrawer {
|
|||||||
*
|
*
|
||||||
* size of this LUT must be equal to 256.
|
* size of this LUT must be equal to 256.
|
||||||
*/
|
*/
|
||||||
private val connectLut47 = intArrayOf(17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,8,10,8,10,0,12,0,43,8,10,8,10,0,12,0,43,11,13,11,13,6,20,6,34,11,13,11,13,36,33,36,46,8,10,8,10,0,12,0,43,8,10,8,10,0,12,0,43,30,42,30,42,38,26,38,18,30,42,30,42,23,45,23,31,17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,8,28,8,28,0,41,0,21,8,28,8,28,0,41,0,21,11,44,11,44,6,27,6,40,11,44,11,44,36,19,36,32,8,28,8,28,0,41,0,21,8,28,8,28,0,41,0,21,30,29,30,29,38,39,38,25,30,29,30,29,23,24,23,22)
|
val connectLut47 = intArrayOf(17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,8,10,8,10,0,12,0,43,8,10,8,10,0,12,0,43,11,13,11,13,6,20,6,34,11,13,11,13,36,33,36,46,8,10,8,10,0,12,0,43,8,10,8,10,0,12,0,43,30,42,30,42,38,26,38,18,30,42,30,42,23,45,23,31,17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,17,1,17,1,2,3,2,14,17,1,17,1,2,3,2,14,9,7,9,7,4,5,4,35,9,7,9,7,16,37,16,15,8,28,8,28,0,41,0,21,8,28,8,28,0,41,0,21,11,44,11,44,6,27,6,40,11,44,11,44,36,19,36,32,8,28,8,28,0,41,0,21,8,28,8,28,0,41,0,21,30,29,30,29,38,39,38,25,30,29,30,29,23,24,23,22)
|
||||||
private val connectLut16 = intArrayOf(0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15,0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15)
|
val connectLut16 = intArrayOf(0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15,0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,0,2,0,2,4,6,4,6,0,2,0,2,4,6,4,6,8,10,8,10,12,14,12,14,8,10,8,10,12,14,12,14,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15,1,3,1,3,5,7,5,7,1,3,1,3,5,7,5,7,9,11,9,11,13,15,13,15,9,11,9,11,13,15,13,15)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
assert(256 == connectLut47.size)
|
assert(256 == connectLut47.size)
|
||||||
|
|||||||
Reference in New Issue
Block a user