mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-13 03:54:06 +09:00
the-flattening wip
This commit is contained in:
@@ -5,128 +5,128 @@ package net.torvald.terrarum.blockproperties
|
||||
*/
|
||||
object Block {
|
||||
|
||||
const val AIR = 0 // hard coded; this is the standard
|
||||
const val AIR = "basegame:0" // hard coded; this is the standard
|
||||
|
||||
const val STONE = 16
|
||||
const val STONE_QUARRIED = 17
|
||||
const val STONE_TILE_WHITE = 18
|
||||
const val STONE_BRICKS = 19
|
||||
const val STONE = "basegame:16"
|
||||
const val STONE_QUARRIED = "basegame:17"
|
||||
const val STONE_TILE_WHITE = "basegame:18"
|
||||
const val STONE_BRICKS = "basegame:19"
|
||||
|
||||
const val DIRT = 32
|
||||
const val GRASS = 33
|
||||
const val GRASSWALL = 34
|
||||
const val DIRT = "basegame:32"
|
||||
const val GRASS = "basegame:33"
|
||||
const val GRASSWALL = "basegame:34"
|
||||
|
||||
const val PLANK_NORMAL = 48
|
||||
const val PLANK_EBONY = 49
|
||||
const val PLANK_BIRCH = 50
|
||||
const val PLANK_BLOODROSE = 51
|
||||
const val PLANK_NORMAL = "basegame:48"
|
||||
const val PLANK_EBONY = "basegame:49"
|
||||
const val PLANK_BIRCH = "basegame:50"
|
||||
const val PLANK_BLOODROSE = "basegame:51"
|
||||
|
||||
const val TRUNK_NORMAL = 64
|
||||
const val TRUNK_EBONY = 65
|
||||
const val TRUNK_BIRCH = 66
|
||||
const val TRUNK_BLOODROSE = 67
|
||||
const val TRUNK_NORMAL = "basegame:64"
|
||||
const val TRUNK_EBONY = "basegame:65"
|
||||
const val TRUNK_BIRCH = "basegame:66"
|
||||
const val TRUNK_BLOODROSE = "basegame:67"
|
||||
|
||||
const val SAND = 80
|
||||
const val SAND_WHITE = 81
|
||||
const val SAND_RED = 82
|
||||
const val SAND_DESERT = 83
|
||||
const val SAND_BLACK = 84
|
||||
const val SAND_GREEN = 85
|
||||
const val SAND = "basegame:80"
|
||||
const val SAND_WHITE = "basegame:81"
|
||||
const val SAND_RED = "basegame:82"
|
||||
const val SAND_DESERT = "basegame:83"
|
||||
const val SAND_BLACK = "basegame:84"
|
||||
const val SAND_GREEN = "basegame:85"
|
||||
|
||||
const val GRAVEL = 96
|
||||
const val GRAVEL_GREY = 97
|
||||
const val GRAVEL = "basegame:96"
|
||||
const val GRAVEL_GREY = "basegame:97"
|
||||
|
||||
const val ORE_COPPER = 112
|
||||
const val ORE_IRON = 113
|
||||
const val ORE_GOLD = 114
|
||||
const val ORE_SILVER = 115
|
||||
const val ORE_ILMENITE = 116
|
||||
const val ORE_AURICHALCUM = 117
|
||||
const val ORE_COPPER = "basegame:112"
|
||||
const val ORE_IRON = "basegame:113"
|
||||
const val ORE_GOLD = "basegame:114"
|
||||
const val ORE_SILVER = "basegame:115"
|
||||
const val ORE_ILMENITE = "basegame:116"
|
||||
const val ORE_AURICHALCUM = "basegame:117"
|
||||
|
||||
const val RAW_RUBY = 128
|
||||
const val RAW_EMERALD = 129
|
||||
const val RAW_SAPPHIRE = 130
|
||||
const val RAW_TOPAZ = 131
|
||||
const val RAW_DIAMOND = 132
|
||||
const val RAW_AMETHYST = 133
|
||||
const val RAW_RUBY = "basegame:128"
|
||||
const val RAW_EMERALD = "basegame:129"
|
||||
const val RAW_SAPPHIRE = "basegame:130"
|
||||
const val RAW_TOPAZ = "basegame:131"
|
||||
const val RAW_DIAMOND = "basegame:132"
|
||||
const val RAW_AMETHYST = "basegame:133"
|
||||
|
||||
const val SNOW = 144
|
||||
const val ICE_FRAGILE = 145
|
||||
const val ICE_NATURAL = 146
|
||||
const val ICE_MAGICAL = 147
|
||||
const val SNOW = "basegame:144"
|
||||
const val ICE_FRAGILE = "basegame:145"
|
||||
const val ICE_NATURAL = "basegame:146"
|
||||
const val ICE_MAGICAL = "basegame:147"
|
||||
|
||||
const val GLASS_CRUDE = 148
|
||||
const val GLASS_CLEAN = 149
|
||||
const val GLASS_CRUDE = "basegame:148"
|
||||
const val GLASS_CLEAN = "basegame:149"
|
||||
|
||||
const val PLATFORM_STONE = 160
|
||||
const val PLATFORM_WOODEN = 161
|
||||
const val PLATFORM_EBONY = 162
|
||||
const val PLATFORM_BIRCH = 163
|
||||
const val PLATFORM_BLOODROSE = 164
|
||||
const val PLATFORM_STONE = "basegame:160"
|
||||
const val PLATFORM_WOODEN = "basegame:161"
|
||||
const val PLATFORM_EBONY = "basegame:162"
|
||||
const val PLATFORM_BIRCH = "basegame:163"
|
||||
const val PLATFORM_BLOODROSE = "basegame:164"
|
||||
|
||||
const val TORCH = 176
|
||||
const val TORCH_FROST = 177
|
||||
const val TORCH = "basegame:176"
|
||||
const val TORCH_FROST = "basegame:177"
|
||||
|
||||
const val TORCH_OFF = 192
|
||||
const val TORCH_FROST_OFF = 193
|
||||
const val TORCH_OFF = "basegame:192"
|
||||
const val TORCH_FROST_OFF = "basegame:193"
|
||||
|
||||
const val ILLUMINATOR_WHITE = 208
|
||||
const val ILLUMINATOR_YELLOW = 209
|
||||
const val ILLUMINATOR_ORANGE = 210
|
||||
const val ILLUMINATOR_RED = 211
|
||||
const val ILLUMINATOR_FUCHSIA = 212
|
||||
const val ILLUMINATOR_PURPLE = 213
|
||||
const val ILLUMINATOR_BLUE = 214
|
||||
const val ILLUMINATOR_CYAN = 215
|
||||
const val ILLUMINATOR_GREEN = 216
|
||||
const val ILLUMINATOR_GREEN_DARK = 217
|
||||
const val ILLUMINATOR_BROWN = 218
|
||||
const val ILLUMINATOR_TAN = 219
|
||||
const val ILLUMINATOR_GREY_LIGHT = 220
|
||||
const val ILLUMINATOR_GREY_MED = 221
|
||||
const val ILLUMINATOR_GREY_DARK = 222
|
||||
const val ILLUMINATOR_BLACK = 223
|
||||
const val ILLUMINATOR_WHITE = "basegame:208"
|
||||
const val ILLUMINATOR_YELLOW = "basegame:209"
|
||||
const val ILLUMINATOR_ORANGE = "basegame:210"
|
||||
const val ILLUMINATOR_RED = "basegame:211"
|
||||
const val ILLUMINATOR_FUCHSIA = "basegame:212"
|
||||
const val ILLUMINATOR_PURPLE = "basegame:213"
|
||||
const val ILLUMINATOR_BLUE = "basegame:214"
|
||||
const val ILLUMINATOR_CYAN = "basegame:215"
|
||||
const val ILLUMINATOR_GREEN = "basegame:216"
|
||||
const val ILLUMINATOR_GREEN_DARK = "basegame:217"
|
||||
const val ILLUMINATOR_BROWN = "basegame:218"
|
||||
const val ILLUMINATOR_TAN = "basegame:219"
|
||||
const val ILLUMINATOR_GREY_LIGHT = "basegame:220"
|
||||
const val ILLUMINATOR_GREY_MED = "basegame:221"
|
||||
const val ILLUMINATOR_GREY_DARK = "basegame:222"
|
||||
const val ILLUMINATOR_BLACK = "basegame:223"
|
||||
|
||||
const val ILLUMINATOR_WHITE_OFF = 224
|
||||
const val ILLUMINATOR_YELLOW_OFF = 225
|
||||
const val ILLUMINATOR_ORANGE_OFF = 226
|
||||
const val ILLUMINATOR_RED_OFF = 227
|
||||
const val ILLUMINATOR_FUCHSIA_OFF = 228
|
||||
const val ILLUMINATOR_PURPLE_OFF = 229
|
||||
const val ILLUMINATOR_BLUE_OFF = 230
|
||||
const val ILLUMINATOR_CYAN_OFF = 231
|
||||
const val ILLUMINATOR_GREEN_OFF = 232
|
||||
const val ILLUMINATOR_GREEN_DARK_OFF = 233
|
||||
const val ILLUMINATOR_BROWN_OFF = 234
|
||||
const val ILLUMINATOR_TAN_OFF = 235
|
||||
const val ILLUMINATOR_GREY_LIGHT_OFF = 236
|
||||
const val ILLUMINATOR_GREY_MED_OFF = 237
|
||||
const val ILLUMINATOR_GREY_DARK_OFF = 238
|
||||
const val ILLUMINATOR_BLACK_OFF = 239
|
||||
const val ILLUMINATOR_WHITE_OFF = "basegame:224"
|
||||
const val ILLUMINATOR_YELLOW_OFF = "basegame:225"
|
||||
const val ILLUMINATOR_ORANGE_OFF = "basegame:226"
|
||||
const val ILLUMINATOR_RED_OFF = "basegame:227"
|
||||
const val ILLUMINATOR_FUCHSIA_OFF = "basegame:228"
|
||||
const val ILLUMINATOR_PURPLE_OFF = "basegame:229"
|
||||
const val ILLUMINATOR_BLUE_OFF = "basegame:230"
|
||||
const val ILLUMINATOR_CYAN_OFF = "basegame:231"
|
||||
const val ILLUMINATOR_GREEN_OFF = "basegame:232"
|
||||
const val ILLUMINATOR_GREEN_DARK_OFF = "basegame:233"
|
||||
const val ILLUMINATOR_BROWN_OFF = "basegame:234"
|
||||
const val ILLUMINATOR_TAN_OFF = "basegame:235"
|
||||
const val ILLUMINATOR_GREY_LIGHT_OFF = "basegame:236"
|
||||
const val ILLUMINATOR_GREY_MED_OFF = "basegame:237"
|
||||
const val ILLUMINATOR_GREY_DARK_OFF = "basegame:238"
|
||||
const val ILLUMINATOR_BLACK_OFF = "basegame:239"
|
||||
|
||||
const val SANDSTONE = 240
|
||||
const val SANDSTONE_WHITE = 241
|
||||
const val SANDSTONE_RED = 242
|
||||
const val SANDSTONE_DESERT = 243
|
||||
const val SANDSTONE_BLACK = 244
|
||||
const val SANDSTONE_GREEN = 245
|
||||
const val SANDSTONE = "basegame:240"
|
||||
const val SANDSTONE_WHITE = "basegame:241"
|
||||
const val SANDSTONE_RED = "basegame:242"
|
||||
const val SANDSTONE_DESERT = "basegame:243"
|
||||
const val SANDSTONE_BLACK = "basegame:244"
|
||||
const val SANDSTONE_GREEN = "basegame:245"
|
||||
|
||||
const val LANTERN = 256
|
||||
const val SUNSTONE = 257
|
||||
const val DAYLIGHT_CAPACITOR = 258
|
||||
const val LANTERN = "basegame:256"
|
||||
const val SUNSTONE = "basegame:257"
|
||||
const val DAYLIGHT_CAPACITOR = "basegame:258"
|
||||
|
||||
|
||||
const val ACTORBLOCK_NO_COLLISION = 4091
|
||||
const val ACTORBLOCK_FULL_COLLISION = 4092
|
||||
const val ACTORBLOCK_ALLOW_MOVE_DOWN = 4093
|
||||
const val ACTORBLOCK_NO_PASS_RIGHT = 4094
|
||||
const val ACTORBLOCK_NO_PASS_LEFT = 4095
|
||||
const val ACTORBLOCK_NO_COLLISION = "basegame:4091"
|
||||
const val ACTORBLOCK_FULL_COLLISION = "basegame:4092"
|
||||
const val ACTORBLOCK_ALLOW_MOVE_DOWN = "basegame:4093"
|
||||
const val ACTORBLOCK_NO_PASS_RIGHT = "basegame:4094"
|
||||
const val ACTORBLOCK_NO_PASS_LEFT = "basegame:4095"
|
||||
|
||||
|
||||
const val LAVA = 4094
|
||||
const val WATER = 4095
|
||||
const val LAVA = "basegame:4094"
|
||||
const val WATER = "basegame:4095"
|
||||
|
||||
const val NULL = -1
|
||||
const val NULL = "basegame:-1"
|
||||
|
||||
val actorblocks = listOf(
|
||||
ACTORBLOCK_NO_COLLISION,
|
||||
|
||||
@@ -5,6 +5,7 @@ import net.torvald.terrarum.AppLoader
|
||||
import net.torvald.terrarum.AppLoader.printdbg
|
||||
import net.torvald.terrarum.AppLoader.printmsg
|
||||
import net.torvald.terrarum.ReferencingRanges
|
||||
import net.torvald.terrarum.gameitem.ItemID
|
||||
import net.torvald.terrarum.gameworld.FluidType
|
||||
import net.torvald.terrarum.gameworld.GameWorld
|
||||
import net.torvald.terrarum.utils.CSVFetcher
|
||||
@@ -18,12 +19,12 @@ import java.io.IOException
|
||||
*/
|
||||
object BlockCodex {
|
||||
|
||||
private var blockProps = HashMap<Int, BlockProp>()
|
||||
private var blockProps = HashMap<ItemID, BlockProp>()
|
||||
|
||||
val dynamicLights = SortedArrayList<Int>() // does not include virtual ones
|
||||
val dynamicLights = SortedArrayList<ItemID>() // does not include virtual ones
|
||||
|
||||
/** 65536 */
|
||||
val MAX_TERRAIN_TILES = GameWorld.TILES_SUPPORTED
|
||||
//val MAX_TERRAIN_TILES = GameWorld.TILES_SUPPORTED
|
||||
|
||||
private val nullProp = BlockProp()
|
||||
|
||||
@@ -32,12 +33,9 @@ object BlockCodex {
|
||||
|
||||
// fake props for "randomised" dynamic lights
|
||||
const val DYNAMIC_RANDOM_CASES = 64
|
||||
var virtualPropsCount = 0
|
||||
private set
|
||||
/** always points to the HIGHEST prop ID. <Original ID, Virtual ID> */
|
||||
val dynamicToVirtualPropMapping = ArrayList<Pair<Int, Int>>()
|
||||
/** for random access dont iterate over this */
|
||||
val dynamicToVirtualMap = hashMapOf<Int, Int>()
|
||||
private var virtualTileCursor = 0
|
||||
val tileToVirtual = HashMap<ItemID, List<ItemID>>()
|
||||
val virtualToTile = HashMap<ItemID, ItemID>()
|
||||
|
||||
/**
|
||||
* Later entry (possible from other modules) will replace older ones
|
||||
@@ -56,27 +54,29 @@ object BlockCodex {
|
||||
setProp(blockProps[intVal(it, "id")], it)
|
||||
}*/
|
||||
|
||||
val id = intVal(it, "id")
|
||||
setProp(id, it)
|
||||
val numericID = intVal(it, "id")
|
||||
setProp(module, numericID, it)
|
||||
val tileId = "tile@$module:$numericID"
|
||||
|
||||
// register tiles with dynamic light
|
||||
if ((blockProps[id]?.dynamicLuminosityFunction ?: 0) != 0) {
|
||||
dynamicLights.add(id)
|
||||
if ((blockProps[tileId]?.dynamicLuminosityFunction ?: 0) != 0) {
|
||||
dynamicLights.add(tileId)
|
||||
|
||||
// add virtual props for dynamic lights
|
||||
val virtualIDMax = ReferencingRanges.VIRTUAL_TILES.first - virtualPropsCount
|
||||
dynamicToVirtualPropMapping.add(id to virtualIDMax)
|
||||
dynamicToVirtualMap[id] = virtualIDMax
|
||||
repeat(DYNAMIC_RANDOM_CASES) { i ->
|
||||
setProp(virtualIDMax - i, it)
|
||||
printdbg(this, "Block ID $id -> Virtual ID ${virtualIDMax - i}, baseLum: ${blockProps[virtualIDMax - i]?.baseLumCol}")
|
||||
val virtualChunk = ArrayList<ItemID>()
|
||||
repeat(DYNAMIC_RANDOM_CASES) { _ ->
|
||||
val virtualID = "virt:$virtualTileCursor"
|
||||
|
||||
virtualPropsCount += 1
|
||||
virtualToTile[virtualID] = tileId
|
||||
virtualChunk.add(virtualID)
|
||||
|
||||
setProp("virt", virtualTileCursor, it)
|
||||
|
||||
printdbg(this, "Block ID $tileId -> Virtual ID $virtualID, baseLum: ${blockProps[virtualID]?.baseLumCol}")
|
||||
virtualTileCursor += 1
|
||||
}
|
||||
tileToVirtual[tileId] = virtualChunk.sorted().toList()
|
||||
}
|
||||
|
||||
if (id > highestNumber)
|
||||
highestNumber = id
|
||||
}
|
||||
}
|
||||
catch (e: IOException) {
|
||||
@@ -84,6 +84,8 @@ object BlockCodex {
|
||||
}
|
||||
}
|
||||
|
||||
fun getAll() = blockProps.values
|
||||
|
||||
/*fun get(index: Int): BlockProp {
|
||||
try {
|
||||
return blockProps[index]
|
||||
@@ -97,7 +99,7 @@ object BlockCodex {
|
||||
}
|
||||
}*/
|
||||
|
||||
operator fun get(rawIndex: Int?): BlockProp {
|
||||
/*operator fun get(rawIndex: Int?): BlockProp {
|
||||
if (rawIndex == null || rawIndex == Block.NULL) {
|
||||
return nullProp
|
||||
}
|
||||
@@ -108,31 +110,45 @@ object BlockCodex {
|
||||
catch (e: NullPointerException) {
|
||||
throw NullPointerException("Blockprop with raw id $rawIndex does not exist.")
|
||||
}
|
||||
}
|
||||
|
||||
operator fun get(fluidType: FluidType?): BlockProp {
|
||||
if (fluidType == null || fluidType.value == 0) {
|
||||
return blockProps[Block.AIR]!!
|
||||
}*/
|
||||
operator fun get(blockID: ItemID?): BlockProp {
|
||||
if (blockID == null || blockID == "basegame:"+Block.NULL) {
|
||||
return nullProp
|
||||
}
|
||||
|
||||
try {
|
||||
return blockProps[fluidType.abs() + GameWorld.TILES_SUPPORTED - 1]!!
|
||||
return blockProps[blockID]!!
|
||||
}
|
||||
catch (e: NullPointerException) {
|
||||
throw NullPointerException("Blockprop with raw id $fluidType does not exist.")
|
||||
throw NullPointerException("Blockprop with id $blockID does not exist.")
|
||||
}
|
||||
}
|
||||
|
||||
fun getOrNull(rawIndex: Int?): BlockProp? {//<O>
|
||||
return blockProps[rawIndex]
|
||||
operator fun get(fluidType: FluidType?): BlockProp {
|
||||
// TODO fluid from other mods
|
||||
|
||||
if (fluidType == null || fluidType.value == 0) {
|
||||
return blockProps["basegame:"+Block.AIR]!!
|
||||
}
|
||||
|
||||
try {
|
||||
return blockProps["basegame:${fluidType.abs() + GameWorld.TILES_SUPPORTED - 1}"]!!
|
||||
}
|
||||
catch (e: NullPointerException) {
|
||||
throw NullPointerException("Blockprop with id $fluidType does not exist.")
|
||||
}
|
||||
}
|
||||
|
||||
private fun setProp(key: Int, record: CSVRecord) {
|
||||
fun getOrNull(blockID: ItemID?): BlockProp? {//<O>
|
||||
return blockProps[blockID]
|
||||
}
|
||||
|
||||
private fun setProp(modname: String, key: Int, record: CSVRecord) {
|
||||
val prop = BlockProp()
|
||||
prop.nameKey = record.get("name")
|
||||
|
||||
prop.id = if (key == -1) 0 else intVal(record, "id")
|
||||
prop.drop = intVal(record, "drop")
|
||||
prop.id = "$modname:${(if (key == -1) 0 else intVal(record, "id"))}"
|
||||
prop.drop = "$modname:${intVal(record, "drop")}"
|
||||
|
||||
prop.shadeColR = floatVal(record, "shdr")
|
||||
prop.shadeColG = floatVal(record, "shdg")
|
||||
@@ -163,9 +179,9 @@ object BlockCodex {
|
||||
|
||||
prop.dynamicLuminosityFunction = intVal(record, "dlfn")
|
||||
|
||||
blockProps[key] = prop
|
||||
blockProps["$modname:$key"] = prop
|
||||
|
||||
printmsg(this, "${intVal(record, "id")}\t" + prop.nameKey)
|
||||
printmsg(this, "$modname:${intVal(record, "id")}\t" + prop.nameKey)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package net.torvald.terrarum.blockproperties
|
||||
|
||||
import net.torvald.gdx.graphics.Cvec
|
||||
import net.torvald.random.XXHash32
|
||||
import net.torvald.terrarum.gameitem.ItemID
|
||||
import net.torvald.terrarum.gameworld.fmod
|
||||
import net.torvald.terrarum.serialise.toLittle
|
||||
|
||||
@@ -10,7 +11,7 @@ import net.torvald.terrarum.serialise.toLittle
|
||||
*/
|
||||
class BlockProp {
|
||||
|
||||
var id: Int = 0
|
||||
var id: ItemID = ""
|
||||
|
||||
var nameKey: String = ""
|
||||
|
||||
@@ -62,14 +63,14 @@ class BlockProp {
|
||||
baseLumCol
|
||||
} else {
|
||||
val offset = XXHash32.hash(((x and 0xFFFF).shl(16) or (y and 0xFFFF)).toLittle(), 10000).fmod(BlockCodex.DYNAMIC_RANDOM_CASES)
|
||||
BlockCodex[BlockCodex.dynamicToVirtualMap[id]!! - offset]._lumCol
|
||||
BlockCodex[BlockCodex.tileToVirtual[id]!![offset]]._lumCol
|
||||
}
|
||||
|
||||
fun getLumCol(x: Int, y: Int, channel: Int): Float = if (dynamicLuminosityFunction == 0) {
|
||||
baseLumCol.getElem(channel)
|
||||
} else {
|
||||
val offset = XXHash32.hash(((x and 0xFFFF).shl(16) or (y and 0xFFFF)).toLittle(), 10000).fmod(BlockCodex.DYNAMIC_RANDOM_CASES)
|
||||
BlockCodex[BlockCodex.dynamicToVirtualMap[id]!! - offset]._lumCol.getElem(channel)
|
||||
BlockCodex[BlockCodex.tileToVirtual[id]!![offset]]._lumCol.getElem(channel)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -80,7 +81,7 @@ class BlockProp {
|
||||
|
||||
//fun getLum(channel: Int) = lumCol.getElem(channel)
|
||||
|
||||
var drop: Int = 0
|
||||
var drop: ItemID = ""
|
||||
|
||||
var maxSupport: Int = -1 // couldn't use NULL at all...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user