mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
amount of fluid affects the light absorption
This commit is contained in:
@@ -46,8 +46,8 @@
|
|||||||
"145"; "0";"BLOCK_ICE_FRAGILE" ;"0.0508";"0.0508";"0.0508";"0.0508"; "5"; "930";"ICEI"; "1"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0"; "4";"0.0000";"0.0000";"0.0000";"0.0000"
|
"145"; "0";"BLOCK_ICE_FRAGILE" ;"0.0508";"0.0508";"0.0508";"0.0508"; "5"; "930";"ICEI"; "1"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0"; "4";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"146"; "146";"BLOCK_ICE_NATURAL" ;"0.1016";"0.1016";"0.1016";"0.1016"; "35"; "930";"ICEI"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0"; "4";"0.0000";"0.0000";"0.0000";"0.0000"
|
"146"; "146";"BLOCK_ICE_NATURAL" ;"0.1016";"0.1016";"0.1016";"0.1016"; "35"; "930";"ICEI"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0"; "4";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"147"; "147";"BLOCK_ICE_CLEAR_MAGICAL" ;"0.1252";"0.1252";"0.1252";"0.1252"; "48";"3720";"ICEX"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0"; "4";"0.0744";"0.1252";"0.2268";"0.0000"
|
"147"; "147";"BLOCK_ICE_CLEAR_MAGICAL" ;"0.1252";"0.1252";"0.1252";"0.1252"; "48";"3720";"ICEX"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0"; "4";"0.0744";"0.1252";"0.2268";"0.0000"
|
||||||
"148"; "148";"BLOCK_GLASS_CRUDE" ;"0.0120";"0.0040";"0.0120";"0.0080"; "5";"2500";"GLAS"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"148"; "148";"BLOCK_GLASS_CRUDE" ;"0.0876";"0.0424";"0.0876";"0.1252"; "5";"2500";"GLAS"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"149"; "149";"BLOCK_GLASS_CLEAN" ;"0.0040";"0.0040";"0.0040";"0.0020"; "5";"2203";"GLAS"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"149"; "149";"BLOCK_GLASS_CLEAN" ;"0.0424";"0.0424";"0.0424";"0.0636"; "5";"2203";"GLAS"; "1"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"160"; "160";"BLOCK_PLATFORM_STONE" ;"0.0312";"0.0312";"0.0312";"0.0312"; "5"; "N/A";"ROCK"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"160"; "160";"BLOCK_PLATFORM_STONE" ;"0.0312";"0.0312";"0.0312";"0.0312"; "5"; "N/A";"ROCK"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"161"; "161";"BLOCK_PLATFORM_WOODEN" ;"0.0312";"0.0312";"0.0312";"0.0312"; "5"; "N/A";"WOOD"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"161"; "161";"BLOCK_PLATFORM_WOODEN" ;"0.0312";"0.0312";"0.0312";"0.0312"; "5"; "N/A";"WOOD"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"162"; "162";"BLOCK_PLATFORM_EBONY" ;"0.0312";"0.0312";"0.0312";"0.0312"; "5"; "N/A";"WOOD"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"162"; "162";"BLOCK_PLATFORM_EBONY" ;"0.0312";"0.0312";"0.0312";"0.0312"; "5"; "N/A";"WOOD"; "0"; "1"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
"256"; "256";"BLOCK_LANTERN_IRON_REGULAR" ;"0.0312";"0.0312";"0.0312";"0.0312"; "1"; "N/A";"FXTR"; "0"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"1.0000";"0.6372";"0.0000";"0.0000"
|
"256"; "256";"BLOCK_LANTERN_IRON_REGULAR" ;"0.0312";"0.0312";"0.0312";"0.0312"; "1"; "N/A";"FXTR"; "0"; "0"; "1"; "0"; "0"; "0"; "N/A"; "0";"16";"1.0000";"0.6372";"0.0000";"0.0000"
|
||||||
"257"; "257";"BLOCK_SUNSTONE" ;"0.1252";"0.1252";"0.1252";"0.1252"; "1"; "N/A";"ROCK"; "1"; "0"; "0"; "0"; "0"; "2"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"257"; "257";"BLOCK_SUNSTONE" ;"0.1252";"0.1252";"0.1252";"0.1252"; "1"; "N/A";"ROCK"; "1"; "0"; "0"; "0"; "0"; "2"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"258"; "258";"BLOCK_DAYLIGHT_CAPACITOR" ;"0.1252";"0.1252";"0.1252";"0.1252"; "1"; "N/A";"GLAS"; "1"; "0"; "0"; "0"; "0"; "3"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"258"; "258";"BLOCK_DAYLIGHT_CAPACITOR" ;"0.1252";"0.1252";"0.1252";"0.1252"; "1"; "N/A";"GLAS"; "1"; "0"; "0"; "0"; "0"; "3"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"4096"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508";"0.0508";"100";"1000";"WATR"; "0"; "0"; "1"; "0"; "0"; "0"; "16"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"4096"; "0";"BLOCK_WATER" ;"0.1016";"0.0744";"0.0508";"0.0826";"100";"1000";"WATR"; "0"; "0"; "1"; "0"; "0"; "0"; "16"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
"4097"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696";"0.9696";"100";"2600";"ROCK"; "0"; "0"; "1"; "0"; "0"; "0"; "32"; "0";"16";"0.7664";"0.2032";"0.0000";"0.0000"
|
"4097"; "0";"BLOCK_LAVA" ;"0.9696";"0.9696";"0.9696";"0.9696";"100";"2600";"ROCK"; "0"; "0"; "1"; "0"; "0"; "0"; "32"; "0";"16";"0.7664";"0.2032";"0.0000";"0.0000"
|
||||||
"-1"; "0";"BLOCK_NULL" ;"4.0000";"4.0000";"4.0000";"4.0000"; "-1";"2600";"NULL"; "0"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
"-1"; "0";"BLOCK_NULL" ;"4.0000";"4.0000";"4.0000";"4.0000"; "-1";"2600";"NULL"; "0"; "0"; "1"; "1"; "0"; "0"; "N/A"; "0";"16";"0.0000";"0.0000";"0.0000";"0.0000"
|
||||||
|
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 1 and column 20.
|
@@ -192,12 +192,38 @@ object ItemCodex {
|
|||||||
|
|
||||||
override fun startSecondaryUse(delta: Float): Boolean {
|
override fun startSecondaryUse(delta: Float): Boolean {
|
||||||
val ingame = Terrarum.ingame!! as Ingame // must be in here
|
val ingame = Terrarum.ingame!! as Ingame // must be in here
|
||||||
ingame.world.setFluid(Terrarum.mouseTileX, Terrarum.mouseTileY, Fluid.WATER, 1f)
|
ingame.world.setFluid(Terrarum.mouseTileX, Terrarum.mouseTileY, Fluid.WATER, 4f)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// test lava bucket
|
||||||
|
itemCodex[9001] = object : GameItem() {
|
||||||
|
override var dynamicID: ItemID = 9001
|
||||||
|
override val originalID: ItemID = 9001
|
||||||
|
|
||||||
|
override val isUnique: Boolean = true
|
||||||
|
override val originalName: String = "Infinite Lava Bucket"
|
||||||
|
|
||||||
|
override var baseMass: Double = 1000.0
|
||||||
|
override var baseToolSize: Double? = null
|
||||||
|
|
||||||
|
override var inventoryCategory: String = "tool"
|
||||||
|
override var stackable: Boolean = false
|
||||||
|
|
||||||
|
override val isDynamic: Boolean = false
|
||||||
|
override val material: Material = Material(1,1,1,1,1,1,1,1,1,1.0)
|
||||||
|
|
||||||
|
override val equipPosition: Int = EquipPosition.HAND_GRIP
|
||||||
|
|
||||||
|
override fun startSecondaryUse(delta: Float): Boolean {
|
||||||
|
val ingame = Terrarum.ingame!! as Ingame // must be in here
|
||||||
|
ingame.world.setFluid(Terrarum.mouseTileX, Terrarum.mouseTileY, Fluid.LAVA, 4f)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// read from save (if applicable) and fill dynamicItemDescription
|
// read from save (if applicable) and fill dynamicItemDescription
|
||||||
|
|
||||||
|
|||||||
@@ -99,5 +99,6 @@ object PlayerBuilderSigrid {
|
|||||||
walls.forEach { inventory.add(it + 4096, 9995) }
|
walls.forEach { inventory.add(it + 4096, 9995) }
|
||||||
inventory.add(ItemCodex.ITEM_STATIC.first)
|
inventory.add(ItemCodex.ITEM_STATIC.first)
|
||||||
inventory.add(9000)
|
inventory.add(9000)
|
||||||
|
inventory.add(9001)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class PickaxeGeneric(override val originalID: ItemID) : GameItem() {
|
|||||||
override var stackable = true
|
override var stackable = true
|
||||||
override var maxDurability = 147
|
override var maxDurability = 147
|
||||||
override var durability = maxDurability.toFloat()
|
override var durability = maxDurability.toFloat()
|
||||||
override val equipPosition = 9
|
override val equipPosition = GameItem.EquipPosition.HAND_GRIP
|
||||||
override var inventoryCategory = Category.TOOL
|
override var inventoryCategory = Category.TOOL
|
||||||
override val isUnique = false
|
override val isUnique = false
|
||||||
override val isDynamic = true
|
override val isDynamic = true
|
||||||
@@ -47,10 +47,10 @@ class PickaxeGeneric(override val originalID: ItemID) : GameItem() {
|
|||||||
|
|
||||||
// linear search filter (check for intersection with tilewise mouse point and tilewise hitbox)
|
// linear search filter (check for intersection with tilewise mouse point and tilewise hitbox)
|
||||||
// return false if hitting actors
|
// return false if hitting actors
|
||||||
Terrarum.ingame!!.actorContainer.forEach({
|
Terrarum.ingame!!.actorContainer.forEach {
|
||||||
if (it is ActorWBMovable && it.hIntTilewiseHitbox.intersects(mousePoint))
|
if (it is ActorWBMovable && it.hIntTilewiseHitbox.intersects(mousePoint))
|
||||||
return false
|
return false
|
||||||
})
|
}
|
||||||
|
|
||||||
// return false if here's no tile
|
// return false if here's no tile
|
||||||
if (Block.AIR == (Terrarum.ingame!!.world).getTileFromTerrain(mouseTileX, mouseTileY))
|
if (Block.AIR == (Terrarum.ingame!!.world).getTileFromTerrain(mouseTileX, mouseTileY))
|
||||||
|
|||||||
@@ -407,14 +407,15 @@ object LightmapRenderer {
|
|||||||
|
|
||||||
|
|
||||||
//private val ambientAccumulator = Color(0f,0f,0f,0f)
|
//private val ambientAccumulator = Color(0f,0f,0f,0f)
|
||||||
private val lightLevelThis = Color(0f,0f,0f,0f)
|
private val lightLevelThis = Color(0)
|
||||||
private var thisTerrain = 0
|
private var thisTerrain = 0
|
||||||
private var thisFluid = Fluid.NULL
|
private var thisFluid = GameWorld.FluidInfo(Fluid.NULL, 0f)
|
||||||
|
private val fluidAmountToCol = Color(0)
|
||||||
private var thisWall = 0
|
private var thisWall = 0
|
||||||
private val thisTileLuminosity = Color(0f,0f,0f,0f)
|
private val thisTileLuminosity = Color(0)
|
||||||
private val thisTileOpacity = Color(0f,0f,0f,0f)
|
private val thisTileOpacity = Color(0)
|
||||||
private val thisTileOpacity2 = Color(0f,0f,0f,0f) // thisTileOpacity * sqrt(2)
|
private val thisTileOpacity2 = Color(0) // thisTileOpacity * sqrt(2)
|
||||||
private val sunLight = Color(0f,0f,0f,0f)
|
private val sunLight = Color(0)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -422,8 +423,12 @@ object LightmapRenderer {
|
|||||||
*/
|
*/
|
||||||
private fun calculate(x: Int, y: Int): Color {
|
private fun calculate(x: Int, y: Int): Color {
|
||||||
|
|
||||||
|
// TODO is JEP 338 released yet?
|
||||||
|
|
||||||
|
|
||||||
// TODO if we only use limited set of operations (max, mul, sub) then int-ify should be possible.
|
// TODO if we only use limited set of operations (max, mul, sub) then int-ify should be possible.
|
||||||
// 0xiiii_ffff, 65536 for 1.0
|
// 0xiiii_ffff, 65536 for 1.0
|
||||||
|
// Tested it, no perf gain :(
|
||||||
|
|
||||||
// O(9n) == O(n) where n is a size of the map
|
// O(9n) == O(n) where n is a size of the map
|
||||||
// TODO devise multithreading on this
|
// TODO devise multithreading on this
|
||||||
@@ -433,20 +438,21 @@ object LightmapRenderer {
|
|||||||
// this six fetch tasks take 2 ms ?!
|
// this six fetch tasks take 2 ms ?!
|
||||||
lightLevelThis.set(colourNull)
|
lightLevelThis.set(colourNull)
|
||||||
thisTerrain = world.getTileFromTerrain(x, y) ?: Block.STONE
|
thisTerrain = world.getTileFromTerrain(x, y) ?: Block.STONE
|
||||||
thisFluid = world.getFluid(x, y).type
|
thisFluid = world.getFluid(x, y)
|
||||||
thisWall = world.getTileFromWall(x, y) ?: Block.STONE
|
thisWall = world.getTileFromWall(x, y) ?: Block.STONE
|
||||||
|
|
||||||
if (thisFluid != Fluid.NULL) {
|
if (thisFluid.type != Fluid.NULL) {
|
||||||
|
fluidAmountToCol.set(thisFluid.amount, thisFluid.amount, thisFluid.amount, thisFluid.amount)
|
||||||
|
|
||||||
thisTileLuminosity.set(BlockCodex[thisTerrain].luminosity)
|
thisTileLuminosity.set(BlockCodex[thisTerrain].luminosity)
|
||||||
thisTileLuminosity.maxAndAssign(BlockCodex[thisFluid].luminosity) // already been div by four
|
thisTileLuminosity.maxAndAssign(BlockCodex[thisFluid.type].luminosity mul fluidAmountToCol) // already been div by four
|
||||||
thisTileOpacity.set(BlockCodex[thisTerrain].opacity)
|
thisTileOpacity.set(BlockCodex[thisTerrain].opacity)
|
||||||
thisTileOpacity.maxAndAssign(BlockCodex[thisFluid].opacity) // already been div by four
|
thisTileOpacity.maxAndAssign(BlockCodex[thisFluid.type].opacity mul fluidAmountToCol) // already been div by four
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
thisTileLuminosity.set(BlockCodex[thisTerrain].luminosity)
|
thisTileLuminosity.set(BlockCodex[thisTerrain].luminosity)
|
||||||
thisTileOpacity.set(BlockCodex[thisTerrain].opacity)
|
thisTileOpacity.set(BlockCodex[thisTerrain].opacity)
|
||||||
}
|
}
|
||||||
// TODO thisTileOpacity: take fluid amount into account
|
|
||||||
|
|
||||||
thisTileOpacity2.set(thisTileOpacity); thisTileOpacity2.mul(1.41421356f)
|
thisTileOpacity2.set(thisTileOpacity); thisTileOpacity2.mul(1.41421356f)
|
||||||
sunLight.set(world.globalLight); sunLight.mul(DIV_FLOAT)
|
sunLight.set(world.globalLight); sunLight.mul(DIV_FLOAT)
|
||||||
@@ -480,7 +486,7 @@ object LightmapRenderer {
|
|||||||
/* * */lightLevelThis.maxAndAssign(darkenColoured(getLightInternal(x + 1, y) ?: colourNull, thisTileOpacity))
|
/* * */lightLevelThis.maxAndAssign(darkenColoured(getLightInternal(x + 1, y) ?: colourNull, thisTileOpacity))
|
||||||
|
|
||||||
|
|
||||||
return lightLevelThis.cpy() // it HAS to be a cpy()
|
return lightLevelThis.cpy() // it HAS to be a cpy(), otherwise all cells gets the same instance
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getLightForOpaque(x: Int, y: Int): Color? { // ...so that they wouldn't appear too dark
|
private fun getLightForOpaque(x: Int, y: Int): Color? { // ...so that they wouldn't appear too dark
|
||||||
@@ -542,20 +548,6 @@ object LightmapRenderer {
|
|||||||
lightBuffer.drawPixel(x - this_x_start, lightBuffer.height - 1 - y + this_y_start) // flip Y
|
lightBuffer.drawPixel(x - this_x_start, lightBuffer.height - 1 - y + this_y_start) // flip Y
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//println()
|
|
||||||
|
|
||||||
// FIXME FUCKS SAKE: this_y_start is sometimes fixed at zero, which fucked old light sys with black screen
|
|
||||||
// -> recalculate event not being fired
|
|
||||||
|
|
||||||
|
|
||||||
// so this code actually works now...
|
|
||||||
/*for (y in 0 until lightBuffer.height) {
|
|
||||||
for (x in 0 until lightBuffer.width) {
|
|
||||||
val rnd = Math.random().toFloat()
|
|
||||||
lightBuffer.setColor(Color(rnd, rnd, rnd, 1f))
|
|
||||||
lightBuffer.drawPixel(x, y)
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
// draw to the batch
|
// draw to the batch
|
||||||
|
|||||||
Reference in New Issue
Block a user