mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +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.
|
||||
*
|
||||
@@ -432,12 +434,12 @@ object LightmapRenderer {
|
||||
if (darken < 0 || darken >= COLOUR_RANGE_SIZE)
|
||||
throw IllegalArgumentException("darken: out of range ($darken)")
|
||||
|
||||
// use equation with magic number 9.0
|
||||
// smooooooth
|
||||
// use equation with magic number 8.0
|
||||
// should draw somewhat exponential curve when you plot the propagation of light in-game
|
||||
|
||||
val r = data.r() * (1f - darken.r() * 9.0f)
|
||||
val g = data.g() * (1f - darken.g() * 9.0f)
|
||||
val b = data.b() * (1f - darken.b() * 9.0f)
|
||||
val r = data.r() * (1f - darken.r() * lightScalingMagic)
|
||||
val g = data.g() * (1f - darken.g() * lightScalingMagic)
|
||||
val b = data.b() * (1f - darken.b() * lightScalingMagic)
|
||||
|
||||
return constructRGBFromFloat(r.clampZero(), g.clampZero(), b.clampZero())
|
||||
}
|
||||
@@ -461,12 +463,9 @@ object LightmapRenderer {
|
||||
if (brighten < 0 || brighten >= COLOUR_RANGE_SIZE)
|
||||
throw IllegalArgumentException("brighten: out of range ($brighten)")
|
||||
|
||||
val r = data.r() * (1f + brighten.r() * 6.5f)
|
||||
val g = data.g() * (1f + brighten.g() * 6.5f)
|
||||
val b = data.b() * (1f + brighten.b() * 6.5f)
|
||||
//val r = data.r() + brighten.r()
|
||||
//val g = data.g() + brighten.g()
|
||||
//val b = data.b() + brighten.b()
|
||||
val r = data.r() * (1f + brighten.r() * lightScalingMagic)
|
||||
val g = data.g() * (1f + brighten.g() * lightScalingMagic)
|
||||
val b = data.b() * (1f + brighten.b() * lightScalingMagic)
|
||||
|
||||
return constructRGBFromFloat(r.clampChannel(), g.clampChannel(), b.clampChannel())
|
||||
}
|
||||
@@ -498,6 +497,7 @@ object LightmapRenderer {
|
||||
constructRGBFromFloat(-brighten, -brighten, -brighten)
|
||||
else
|
||||
constructRGBFromFloat(brighten, brighten, brighten)
|
||||
|
||||
return if (brighten < 0)
|
||||
darkenColoured(data, modifier)
|
||||
else
|
||||
@@ -624,12 +624,12 @@ object LightmapRenderer {
|
||||
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 getLowestRGB(x: Int, y: Int): Int? {
|
||||
fun getHighestRGB(x: Int, y: Int): Int? {
|
||||
val value = getLight(x, y)
|
||||
if (value == null)
|
||||
return null
|
||||
else
|
||||
return FastMath.min(value.rawR(), value.rawG(), value.rawB())
|
||||
return FastMath.max(value.rawR(), value.rawG(), value.rawB())
|
||||
}
|
||||
|
||||
private fun purgeLightmap() {
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.*
|
||||
object TilesDrawer {
|
||||
private val world: GameWorld = Terrarum.ingame.world
|
||||
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)
|
||||
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
|
||||
(thisTile ?: 0) != Tile.AIR) {
|
||||
// check if light level of nearby or this tile is illuminated
|
||||
if ( LightmapRenderer.getLowestRGB(x, y) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x - 1, y) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x + 1, y) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x - 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x + 1, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x + 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getLowestRGB(x - 1, y + 1) ?: 0 >= tileDrawLightThreshold) {
|
||||
if ( LightmapRenderer.getHighestRGB(x, y) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x - 1, y) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x + 1, y) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x - 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x + 1, y + 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x + 1, y - 1) ?: 0 >= tileDrawLightThreshold ||
|
||||
LightmapRenderer.getHighestRGB(x - 1, y + 1) ?: 0 >= tileDrawLightThreshold) {
|
||||
// blackness
|
||||
/*if (zeroTileCounter > 0) {
|
||||
g.color = Color.black
|
||||
g.fillRect(
|
||||
(x - zeroTileCounter) * TILE_SIZE.toFloat(), y * TILE_SIZE.toFloat(),
|
||||
zeroTileCounter * TILE_SIZE.toFloat(), TILE_SIZE.toFloat()
|
||||
)
|
||||
g.color = Color.white
|
||||
if (zeroTileCounter > 0) {
|
||||
/* unable to do anything */
|
||||
|
||||
zeroTileCounter = 0
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
val nearbyTilesInfo: Int
|
||||
@@ -370,7 +367,19 @@ object TilesDrawer {
|
||||
} // end if (is illuminated)
|
||||
else {
|
||||
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)
|
||||
} catch (e: NullPointerException) {
|
||||
|
||||
Reference in New Issue
Block a user