mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
fixed bad light calc from 1b83e7deb7 [formerly d900c0733a6d1dcbd9aaed8e9f7f1671c3866624] [formerly 5611e2d89f4601e57d014c45f0479600778217f6]
Former-commit-id: 7906df081a965ba70224fce4890ec3e067ea1636 Former-commit-id: f63552ac04de18ebc4b3283b87cf803eca5ae347
This commit is contained in:
@@ -421,6 +421,8 @@ object LightmapRenderer {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val lightScalingMagic = 8f
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subtract each channel's RGB value.
|
* Subtract each channel's RGB value.
|
||||||
*
|
*
|
||||||
@@ -432,12 +434,12 @@ object LightmapRenderer {
|
|||||||
if (darken < 0 || darken >= COLOUR_RANGE_SIZE)
|
if (darken < 0 || darken >= COLOUR_RANGE_SIZE)
|
||||||
throw IllegalArgumentException("darken: out of range ($darken)")
|
throw IllegalArgumentException("darken: out of range ($darken)")
|
||||||
|
|
||||||
// use equation with magic number 9.0
|
// use equation with magic number 8.0
|
||||||
// smooooooth
|
// should draw somewhat exponential curve when you plot the propagation of light in-game
|
||||||
|
|
||||||
val r = data.r() * (1f - darken.r() * 9.0f)
|
val r = data.r() * (1f - darken.r() * lightScalingMagic)
|
||||||
val g = data.g() * (1f - darken.g() * 9.0f)
|
val g = data.g() * (1f - darken.g() * lightScalingMagic)
|
||||||
val b = data.b() * (1f - darken.b() * 9.0f)
|
val b = data.b() * (1f - darken.b() * lightScalingMagic)
|
||||||
|
|
||||||
return constructRGBFromFloat(r.clampZero(), g.clampZero(), b.clampZero())
|
return constructRGBFromFloat(r.clampZero(), g.clampZero(), b.clampZero())
|
||||||
}
|
}
|
||||||
@@ -461,12 +463,9 @@ object LightmapRenderer {
|
|||||||
if (brighten < 0 || brighten >= COLOUR_RANGE_SIZE)
|
if (brighten < 0 || brighten >= COLOUR_RANGE_SIZE)
|
||||||
throw IllegalArgumentException("brighten: out of range ($brighten)")
|
throw IllegalArgumentException("brighten: out of range ($brighten)")
|
||||||
|
|
||||||
val r = data.r() * (1f + brighten.r() * 6.5f)
|
val r = data.r() * (1f + brighten.r() * lightScalingMagic)
|
||||||
val g = data.g() * (1f + brighten.g() * 6.5f)
|
val g = data.g() * (1f + brighten.g() * lightScalingMagic)
|
||||||
val b = data.b() * (1f + brighten.b() * 6.5f)
|
val b = data.b() * (1f + brighten.b() * lightScalingMagic)
|
||||||
//val r = data.r() + brighten.r()
|
|
||||||
//val g = data.g() + brighten.g()
|
|
||||||
//val b = data.b() + brighten.b()
|
|
||||||
|
|
||||||
return constructRGBFromFloat(r.clampChannel(), g.clampChannel(), b.clampChannel())
|
return constructRGBFromFloat(r.clampChannel(), g.clampChannel(), b.clampChannel())
|
||||||
}
|
}
|
||||||
@@ -498,6 +497,7 @@ object LightmapRenderer {
|
|||||||
constructRGBFromFloat(-brighten, -brighten, -brighten)
|
constructRGBFromFloat(-brighten, -brighten, -brighten)
|
||||||
else
|
else
|
||||||
constructRGBFromFloat(brighten, brighten, brighten)
|
constructRGBFromFloat(brighten, brighten, brighten)
|
||||||
|
|
||||||
return if (brighten < 0)
|
return if (brighten < 0)
|
||||||
darkenColoured(data, modifier)
|
darkenColoured(data, modifier)
|
||||||
else
|
else
|
||||||
@@ -624,12 +624,12 @@ object LightmapRenderer {
|
|||||||
private fun Float.clampChannel() = if (this > CHANNEL_MAX_DECIMAL) CHANNEL_MAX_DECIMAL else this
|
private fun Float.clampChannel() = if (this > CHANNEL_MAX_DECIMAL) CHANNEL_MAX_DECIMAL else this
|
||||||
|
|
||||||
fun getValueFromMap(x: Int, y: Int): Int? = getLight(x, y)
|
fun getValueFromMap(x: Int, y: Int): Int? = getLight(x, y)
|
||||||
fun getLowestRGB(x: Int, y: Int): Int? {
|
fun getHighestRGB(x: Int, y: Int): Int? {
|
||||||
val value = getLight(x, y)
|
val value = getLight(x, y)
|
||||||
if (value == null)
|
if (value == null)
|
||||||
return null
|
return null
|
||||||
else
|
else
|
||||||
return FastMath.min(value.rawR(), value.rawG(), value.rawB())
|
return FastMath.max(value.rawR(), value.rawG(), value.rawB())
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun purgeLightmap() {
|
private fun purgeLightmap() {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import java.util.*
|
|||||||
object TilesDrawer {
|
object TilesDrawer {
|
||||||
private val world: GameWorld = Terrarum.ingame.world
|
private val world: GameWorld = Terrarum.ingame.world
|
||||||
private val TILE_SIZE = FeaturesDrawer.TILE_SIZE
|
private val TILE_SIZE = FeaturesDrawer.TILE_SIZE
|
||||||
|
private val TILE_SIZEF = FeaturesDrawer.TILE_SIZE.toFloat()
|
||||||
|
|
||||||
var tilesTerrain: SpriteSheet = SpriteSheet("./assets/graphics/terrain/terrain.tga", TILE_SIZE, TILE_SIZE)
|
var tilesTerrain: SpriteSheet = SpriteSheet("./assets/graphics/terrain/terrain.tga", TILE_SIZE, TILE_SIZE)
|
||||||
private set // Slick has some weird quirks with PNG's transparency. I'm using 32-bit targa here.
|
private set // Slick has some weird quirks with PNG's transparency. I'm using 32-bit targa here.
|
||||||
@@ -310,25 +311,21 @@ object TilesDrawer {
|
|||||||
if ((mode == WALL || mode == TERRAIN) && // not an air tile
|
if ((mode == WALL || mode == TERRAIN) && // not an air tile
|
||||||
(thisTile ?: 0) != Tile.AIR) {
|
(thisTile ?: 0) != Tile.AIR) {
|
||||||
// check if light level of nearby or this tile is illuminated
|
// check if light level of nearby or this tile is illuminated
|
||||||
if ( LightmapRenderer.getLowestRGB(x, y) ?: 0 >= tileDrawLightThreshold ||
|
if ( LightmapRenderer.getHighestRGB(x, y) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x - 1, y) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x - 1, y) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x + 1, y) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x + 1, y) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x - 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x - 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x + 1, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x + 1, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x + 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
LightmapRenderer.getHighestRGB(x + 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||||
LightmapRenderer.getLowestRGB(x - 1, y + 1) ?: 0 >= tileDrawLightThreshold) {
|
LightmapRenderer.getHighestRGB(x - 1, y + 1) ?: 0 >= tileDrawLightThreshold) {
|
||||||
// blackness
|
// blackness
|
||||||
/*if (zeroTileCounter > 0) {
|
if (zeroTileCounter > 0) {
|
||||||
g.color = Color.black
|
/* unable to do anything */
|
||||||
g.fillRect(
|
|
||||||
(x - zeroTileCounter) * TILE_SIZE.toFloat(), y * TILE_SIZE.toFloat(),
|
|
||||||
zeroTileCounter * TILE_SIZE.toFloat(), TILE_SIZE.toFloat()
|
|
||||||
)
|
|
||||||
g.color = Color.white
|
|
||||||
zeroTileCounter = 0
|
zeroTileCounter = 0
|
||||||
}*/
|
}
|
||||||
|
|
||||||
|
|
||||||
val nearbyTilesInfo: Int
|
val nearbyTilesInfo: Int
|
||||||
@@ -370,7 +367,19 @@ object TilesDrawer {
|
|||||||
} // end if (is illuminated)
|
} // end if (is illuminated)
|
||||||
else {
|
else {
|
||||||
zeroTileCounter++
|
zeroTileCounter++
|
||||||
drawTile(mode, x, y, 1, 0) // black patch
|
//drawTile(mode, x, y, 1, 0) // black patch
|
||||||
|
GL11.glColor4f(0f, 0f, 0f, 1f)
|
||||||
|
|
||||||
|
GL11.glTexCoord2f(0f, 0f)
|
||||||
|
GL11.glVertex3f(x * TILE_SIZE.toFloat(), y * TILE_SIZE.toFloat(), 0f)
|
||||||
|
GL11.glTexCoord2f(0f, 0f + TILE_SIZE)
|
||||||
|
GL11.glVertex3f(x * TILE_SIZE.toFloat(), (y + 1) * TILE_SIZE.toFloat(), 0f)
|
||||||
|
GL11.glTexCoord2f(0f + TILE_SIZE, 0f + TILE_SIZE)
|
||||||
|
GL11.glVertex3f((x + 1) * TILE_SIZE.toFloat(), (y + 1) * TILE_SIZE.toFloat(), 0f)
|
||||||
|
GL11.glTexCoord2f(0f + TILE_SIZE, 0f)
|
||||||
|
GL11.glVertex3f((x + 1) * TILE_SIZE.toFloat(), y * TILE_SIZE.toFloat(), 0f)
|
||||||
|
|
||||||
|
GL11.glColor4f(1f, 1f, 1f, 1f)
|
||||||
}
|
}
|
||||||
} // end if (not an air)
|
} // end if (not an air)
|
||||||
} catch (e: NullPointerException) {
|
} catch (e: NullPointerException) {
|
||||||
|
|||||||
Reference in New Issue
Block a user