mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-14 23:56:07 +09:00
Light fuck: At least I've figured out what the fuck was wrong with.
This commit is contained in:
BIN
assets/graphics/fonts/milky.tga
LFS
BIN
assets/graphics/fonts/milky.tga
LFS
Binary file not shown.
@@ -67,7 +67,7 @@ class TestPick extends 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 instanceof ActorWithPhysics && it.tilewiseHitbox.intersects(mousePoint))
|
if (it instanceof ActorWithPhysics && it.getHIntTilewiseHitbox.intersects(mousePoint))
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,8 @@ class FuckingWorldRenderer(val batch: SpriteBatch) : Screen {
|
|||||||
uiContainer.forEach { it.update(delta) }
|
uiContainer.forEach { it.update(delta) }
|
||||||
|
|
||||||
|
|
||||||
if (Terrarum.GLOBAL_RENDER_TIMER % 2 == 1) {
|
|
||||||
|
if (TerrarumAppLoader.GLOBAL_RENDER_TIMER % 2 == 1) {
|
||||||
LightmapRendererNew.fireRecalculateEvent()
|
LightmapRendererNew.fireRecalculateEvent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -224,7 +225,7 @@ class FuckingWorldRenderer(val batch: SpriteBatch) : Screen {
|
|||||||
fun renderScreen() {
|
fun renderScreen() {
|
||||||
|
|
||||||
// render and blur lightmap
|
// render and blur lightmap
|
||||||
processBlur(LightmapRendererNew.DRAW_FOR_RGB)
|
///////////processBlur(LightmapRendererNew.DRAW_FOR_RGB)
|
||||||
//camera.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
|
//camera.setToOrtho(true, Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat())
|
||||||
|
|
||||||
// render world
|
// render world
|
||||||
@@ -246,7 +247,7 @@ class FuckingWorldRenderer(val batch: SpriteBatch) : Screen {
|
|||||||
batch.shader = null
|
batch.shader = null
|
||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
renderMenus()
|
renderMenus()
|
||||||
//renderOverlayTexts()
|
renderOverlayTexts()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -280,33 +281,34 @@ class FuckingWorldRenderer(val batch: SpriteBatch) : Screen {
|
|||||||
|
|
||||||
|
|
||||||
// draw tiles //
|
// draw tiles //
|
||||||
|
|
||||||
blendNormal()
|
|
||||||
|
|
||||||
|
|
||||||
BlocksDrawer.renderWall(batch)
|
BlocksDrawer.renderWall(batch)
|
||||||
BlocksDrawer.renderTerrain(batch)
|
BlocksDrawer.renderTerrain(batch)
|
||||||
|
|
||||||
|
|
||||||
|
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // don't know why it is needed; it really depresses me
|
||||||
|
|
||||||
|
|
||||||
FeaturesDrawer.drawEnvOverlay(batch)
|
FeaturesDrawer.drawEnvOverlay(batch)
|
||||||
|
|
||||||
|
|
||||||
// draw lightmap //
|
// draw lightmap //
|
||||||
setCameraPosition(0f, 0f)
|
setCameraPosition(0f, 0f)
|
||||||
batch.shader = Terrarum.shaderBayer
|
//batch.shader = Terrarum.shaderBayer
|
||||||
batch.shader.setUniformf("rcount", 64f)
|
//batch.shader.setUniformf("rcount", 64f)
|
||||||
batch.shader.setUniformf("gcount", 64f)
|
//batch.shader.setUniformf("gcount", 64f)
|
||||||
batch.shader.setUniformf("bcount", 64f) // de-banding
|
//batch.shader.setUniformf("bcount", 64f) // de-banding
|
||||||
val lightTex = blurWriteBuffer.colorBufferTexture
|
//val lightTex = blurWriteBuffer.colorBufferTexture
|
||||||
lightTex.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
|
//lightTex.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear)
|
||||||
//blendMul()
|
//blendMul()
|
||||||
blendNormal()
|
blendNormal()
|
||||||
|
batch.shader = null
|
||||||
batch.color = Color.WHITE
|
batch.color = Color.WHITE
|
||||||
batch.draw(logo.texture,//lightTex,
|
/*batch.draw(lightTex,
|
||||||
0f, 0f,
|
0f, 0f,
|
||||||
//lightTex.width * Ingame.lightmapDownsample, lightTex.height * Ingame.lightmapDownsample
|
//lightTex.width * Ingame.lightmapDownsample, lightTex.height * Ingame.lightmapDownsample
|
||||||
lightTex.width.toFloat(), lightTex.height.toFloat()
|
lightTex.width.toFloat(), lightTex.height.toFloat()
|
||||||
)
|
)*/
|
||||||
|
LightmapRendererNew.draw(batch, LightmapRendererNew.DRAW_FOR_RGB)
|
||||||
|
|
||||||
batch.shader = null
|
batch.shader = null
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class Ingame(val batch: SpriteBatch) : Screen {
|
|||||||
val ZOOM_MINIMUM = 0.5f
|
val ZOOM_MINIMUM = 0.5f
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val lightmapDownsample = 2f //2f: still has choppy look when the camera moves but unnoticeable when blurred
|
val lightmapDownsample = 4f //2f: still has choppy look when the camera moves but unnoticeable when blurred
|
||||||
|
|
||||||
|
|
||||||
/** Sets camera position so that (0,0) would be top-left of the screen, (width, height) be bottom-right. */
|
/** Sets camera position so that (0,0) would be top-left of the screen, (width, height) be bottom-right. */
|
||||||
@@ -540,7 +540,7 @@ class Ingame(val batch: SpriteBatch) : Screen {
|
|||||||
|
|
||||||
|
|
||||||
// update lightmap on every other frames, OR full-frame if the option is true
|
// update lightmap on every other frames, OR full-frame if the option is true
|
||||||
if (Terrarum.getConfigBoolean("fullframelightupdate") or (Terrarum.GLOBAL_RENDER_TIMER % 2 == 1)) {
|
if (Terrarum.getConfigBoolean("fullframelightupdate") or (TerrarumAppLoader.GLOBAL_RENDER_TIMER % 2 == 1)) {
|
||||||
LightmapRenderer.fireRecalculateEvent()
|
LightmapRenderer.fireRecalculateEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,12 +117,6 @@ object Terrarum : Screen {
|
|||||||
val TARGET_INTERNAL_FPS: Double = 60.0
|
val TARGET_INTERNAL_FPS: Double = 60.0
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For the events depends on rendering frame (e.g. flicker on post-hit invincibility)
|
|
||||||
*/
|
|
||||||
var GLOBAL_RENDER_TIMER = Random().nextInt(1020) + 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -458,7 +452,8 @@ object Terrarum : Screen {
|
|||||||
|
|
||||||
override fun render(delta: Float) {
|
override fun render(delta: Float) {
|
||||||
//appLoader.screen.render(deltaTime)
|
//appLoader.screen.render(deltaTime)
|
||||||
GLOBAL_RENDER_TIMER += 1
|
//GLOBAL_RENDER_TIMER += 1
|
||||||
|
// moved to TerrarumAppLoader; global event must be place at the apploader to prevent ACCIDENTAL forgot-to-update type of bug.
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun pause() {
|
override fun pause() {
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import com.badlogic.gdx.graphics.glutils.ShaderProgram;
|
|||||||
import net.torvald.terrarumsansbitmap.gdx.GameFontBase;
|
import net.torvald.terrarumsansbitmap.gdx.GameFontBase;
|
||||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack;
|
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2017-08-01.
|
* Created by minjaesong on 2017-08-01.
|
||||||
*/
|
*/
|
||||||
@@ -49,6 +51,12 @@ public class TerrarumAppLoader implements ApplicationListener {
|
|||||||
|
|
||||||
public static GameFontBase fontGame;
|
public static GameFontBase fontGame;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the events depends on rendering frame (e.g. flicker on post-hit invincibility)
|
||||||
|
*/
|
||||||
|
public static int GLOBAL_RENDER_TIMER = new Random().nextInt(1020) + 1;
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
appConfig = new LwjglApplicationConfiguration();
|
appConfig = new LwjglApplicationConfiguration();
|
||||||
appConfig.vSyncEnabled = false;
|
appConfig.vSyncEnabled = false;
|
||||||
@@ -160,6 +168,9 @@ public class TerrarumAppLoader implements ApplicationListener {
|
|||||||
else {
|
else {
|
||||||
screen.render(Gdx.graphics.getDeltaTime());
|
screen.render(Gdx.graphics.getDeltaTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GLOBAL_RENDER_TIMER += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ class TitleScreen(val batch: SpriteBatch) : Screen {
|
|||||||
uiContainer.forEach { it.update(delta) }
|
uiContainer.forEach { it.update(delta) }
|
||||||
|
|
||||||
|
|
||||||
if (Terrarum.GLOBAL_RENDER_TIMER % 2 == 1) {
|
if (TerrarumAppLoader.GLOBAL_RENDER_TIMER % 2 == 1) {
|
||||||
LightmapRenderer.fireRecalculateEvent()
|
LightmapRenderer.fireRecalculateEvent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,12 +59,21 @@ open class ActorWithPhysics(val world: GameWorld, renderOrder: RenderOrder, val
|
|||||||
*/
|
*/
|
||||||
override val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0) // Hitbox is implemented using Double;
|
override val hitbox = Hitbox(0.0, 0.0, 0.0, 0.0) // Hitbox is implemented using Double;
|
||||||
|
|
||||||
val tilewiseHitbox: Hitbox
|
/** half integer tilewise hitbox */ // got the idea from gl_FragCoord
|
||||||
|
val hIntTilewiseHitbox: Hitbox
|
||||||
|
get() = Hitbox.fromTwoPoints(
|
||||||
|
hitbox.startX.div(TILE_SIZE).floor() + 0.5f,
|
||||||
|
hitbox.startY.div(TILE_SIZE).floor() + 0.5f,
|
||||||
|
hitbox.endX.div(TILE_SIZE).floor() + 0.5f,
|
||||||
|
hitbox.endY.div(TILE_SIZE).floor() + 0.5f
|
||||||
|
)
|
||||||
|
|
||||||
|
val intTilewiseHitbox: Hitbox
|
||||||
get() = Hitbox.fromTwoPoints(
|
get() = Hitbox.fromTwoPoints(
|
||||||
hitbox.startX.div(TILE_SIZE).floor(),
|
hitbox.startX.div(TILE_SIZE).floor(),
|
||||||
hitbox.startY.div(TILE_SIZE).floor(),
|
hitbox.startY.div(TILE_SIZE).floor(),
|
||||||
hitbox.endX.minus(0.00001).div(TILE_SIZE).floor(),
|
hitbox.endX.div(TILE_SIZE).floor(),
|
||||||
hitbox.endY.minus(0.00001).div(TILE_SIZE).floor()
|
hitbox.endY.div(TILE_SIZE).floor()
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -301,7 +310,7 @@ open class ActorWithPhysics(val world: GameWorld, renderOrder: RenderOrder, val
|
|||||||
inline val feetPosPoint: Point2d
|
inline val feetPosPoint: Point2d
|
||||||
get() = Point2d(hitbox.centeredX, hitbox.endY)
|
get() = Point2d(hitbox.centeredX, hitbox.endY)
|
||||||
inline val feetPosTile: IntArray
|
inline val feetPosTile: IntArray
|
||||||
get() = intArrayOf(tilewiseHitbox.centeredX.floorInt(), tilewiseHitbox.endY.floorInt())
|
get() = intArrayOf(hIntTilewiseHitbox.centeredX.floorInt(), hIntTilewiseHitbox.endY.floorInt())
|
||||||
|
|
||||||
override fun run() = update(updateDelta)
|
override fun run() = update(updateDelta)
|
||||||
|
|
||||||
@@ -1287,8 +1296,8 @@ open class ActorWithPhysics(val world: GameWorld, renderOrder: RenderOrder, val
|
|||||||
|
|
||||||
private fun forEachOccupyingTileNum(consumer: (Int?) -> Unit) {
|
private fun forEachOccupyingTileNum(consumer: (Int?) -> Unit) {
|
||||||
val tiles = ArrayList<Int?>()
|
val tiles = ArrayList<Int?>()
|
||||||
for (y in tilewiseHitbox.startY.toInt()..tilewiseHitbox.endY.toInt()) {
|
for (y in hIntTilewiseHitbox.startY.toInt()..hIntTilewiseHitbox.endY.toInt()) {
|
||||||
for (x in tilewiseHitbox.startX.toInt()..tilewiseHitbox.endX.toInt()) {
|
for (x in hIntTilewiseHitbox.startX.toInt()..hIntTilewiseHitbox.endX.toInt()) {
|
||||||
tiles.add(world.getTileFromTerrain(x, y))
|
tiles.add(world.getTileFromTerrain(x, y))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1298,8 +1307,8 @@ open class ActorWithPhysics(val world: GameWorld, renderOrder: RenderOrder, val
|
|||||||
|
|
||||||
private fun forEachOccupyingTile(consumer: (BlockProp?) -> Unit) {
|
private fun forEachOccupyingTile(consumer: (BlockProp?) -> Unit) {
|
||||||
val tileProps = ArrayList<BlockProp?>()
|
val tileProps = ArrayList<BlockProp?>()
|
||||||
for (y in tilewiseHitbox.startY.toInt()..tilewiseHitbox.endY.toInt()) {
|
for (y in hIntTilewiseHitbox.startY.toInt()..hIntTilewiseHitbox.endY.toInt()) {
|
||||||
for (x in tilewiseHitbox.startX.toInt()..tilewiseHitbox.endX.toInt()) {
|
for (x in hIntTilewiseHitbox.startX.toInt()..hIntTilewiseHitbox.endX.toInt()) {
|
||||||
tileProps.add(BlockCodex[world.getTileFromTerrain(x, y)])
|
tileProps.add(BlockCodex[world.getTileFromTerrain(x, y)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1331,7 +1340,7 @@ open class ActorWithPhysics(val world: GameWorld, renderOrder: RenderOrder, val
|
|||||||
// offset 1 pixel to the down so that friction would work
|
// offset 1 pixel to the down so that friction would work
|
||||||
val y = hitbox.endY.plus(1.0).div(TILE_SIZE).floorInt()
|
val y = hitbox.endY.plus(1.0).div(TILE_SIZE).floorInt()
|
||||||
|
|
||||||
for (x in tilewiseHitbox.startX.toInt()..tilewiseHitbox.endX.toInt()) {
|
for (x in hIntTilewiseHitbox.startX.toInt()..hIntTilewiseHitbox.endX.toInt()) {
|
||||||
tiles.add(world.getTileFromTerrain(x, y))
|
tiles.add(world.getTileFromTerrain(x, y))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1344,7 +1353,7 @@ open class ActorWithPhysics(val world: GameWorld, renderOrder: RenderOrder, val
|
|||||||
// offset 1 pixel to the down so that friction would work
|
// offset 1 pixel to the down so that friction would work
|
||||||
val y = hitbox.endY.plus(1.0).div(TILE_SIZE).floorInt()
|
val y = hitbox.endY.plus(1.0).div(TILE_SIZE).floorInt()
|
||||||
|
|
||||||
for (x in tilewiseHitbox.startX.toInt()..tilewiseHitbox.endX.toInt()) {
|
for (x in hIntTilewiseHitbox.startX.toInt()..hIntTilewiseHitbox.endX.toInt()) {
|
||||||
tileProps.add(BlockCodex[world.getTileFromTerrain(x, y)])
|
tileProps.add(BlockCodex[world.getTileFromTerrain(x, y)])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ class PlayableActorDelegate(val actor: ActorHumanoid) {
|
|||||||
|
|
||||||
|
|
||||||
fun update(delta: Float) {
|
fun update(delta: Float) {
|
||||||
//val oldTilewisePos = actor.tilewiseHitbox
|
//val oldTilewisePos = actor.hIntTilewiseHitbox
|
||||||
|
|
||||||
actor.update(delta)
|
actor.update(delta)
|
||||||
|
|
||||||
// fire lightmap recalculate event upon tilewise pos change
|
// fire lightmap recalculate event upon tilewise pos change
|
||||||
//val newTilewisePos = actor.tilewiseHitbox
|
//val newTilewisePos = actor.hIntTilewiseHitbox
|
||||||
//if (oldTilewisePos != newTilewisePos) {
|
//if (oldTilewisePos != newTilewisePos) {
|
||||||
// LightmapRenderer.fireRecalculateEvent()
|
// LightmapRenderer.fireRecalculateEvent()
|
||||||
//}
|
//}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ object ItemCodex {
|
|||||||
// check for collision with actors (BLOCK only)
|
// check for collision with actors (BLOCK only)
|
||||||
if (this.inventoryCategory == Category.BLOCK) {
|
if (this.inventoryCategory == Category.BLOCK) {
|
||||||
Terrarum.ingame!!.actorContainer.forEach {
|
Terrarum.ingame!!.actorContainer.forEach {
|
||||||
if (it is ActorWithPhysics && it.tilewiseHitbox.intersects(mousePoint))
|
if (it is ActorWithPhysics && it.hIntTilewiseHitbox.intersects(mousePoint))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,7 +138,7 @@ object ItemCodex {
|
|||||||
// 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 ActorWithPhysics && it.tilewiseHitbox.intersects(mousePoint))
|
if (it is ActorWithPhysics && it.hIntTilewiseHitbox.intersects(mousePoint))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ 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 ActorWithPhysics && it.tilewiseHitbox.intersects(mousePoint))
|
if (it is ActorWithPhysics && it.hIntTilewiseHitbox.intersects(mousePoint))
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class UIBasicNotifier(private val player: ActorHumanoid?) : UICanvas() {
|
|||||||
private val temperature: Int
|
private val temperature: Int
|
||||||
get() {
|
get() {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
val playerTilePos = player.tilewiseHitbox
|
val playerTilePos = player.hIntTilewiseHitbox
|
||||||
val tempCelsius = -273f + (Terrarum.ingame?.world?.getTemperature(playerTilePos.centeredX.toInt(), playerTilePos.centeredY.toInt()) ?: 288f)
|
val tempCelsius = -273f + (Terrarum.ingame?.world?.getTemperature(playerTilePos.centeredX.toInt(), playerTilePos.centeredY.toInt()) ?: 288f)
|
||||||
return if (Terrarum.getConfigBoolean("useamericanunit")) {
|
return if (Terrarum.getConfigBoolean("useamericanunit")) {
|
||||||
tempCelsius.times(1.8f).plus(32f).roundInt()
|
tempCelsius.times(1.8f).plus(32f).roundInt()
|
||||||
@@ -111,7 +111,7 @@ class UIBasicNotifier(private val player: ActorHumanoid?) : UICanvas() {
|
|||||||
val lightLevel: Color
|
val lightLevel: Color
|
||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
val playerPos = player.tilewiseHitbox
|
val playerPos = player.hIntTilewiseHitbox
|
||||||
lightLevel = (LightmapRenderer.getLight(playerPos.centeredX.toInt(), playerPos.centeredY.toInt()) ?:
|
lightLevel = (LightmapRenderer.getLight(playerPos.centeredX.toInt(), playerPos.centeredY.toInt()) ?:
|
||||||
Terrarum.ingame!!.world.globalLight
|
Terrarum.ingame!!.world.globalLight
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class UITierOneWatch(private val player: ActorHumanoid?) : UICanvas() {
|
|||||||
val lightLevel: Color
|
val lightLevel: Color
|
||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
val playerPos = player.tilewiseHitbox
|
val playerPos = player.hIntTilewiseHitbox
|
||||||
lightLevel = (LightmapRenderer.getLight(playerPos.centeredX.toInt(), playerPos.centeredY.toInt()) ?:
|
lightLevel = (LightmapRenderer.getLight(playerPos.centeredX.toInt(), playerPos.centeredY.toInt()) ?:
|
||||||
Terrarum.ingame!!.world.globalLight
|
Terrarum.ingame!!.world.globalLight
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -754,6 +754,7 @@ object BlocksDrawer {
|
|||||||
shader.setUniformi("atlasTexSize", tileAtlas.texture.width, tileAtlas.texture.height) //depends on the tile atlas
|
shader.setUniformi("atlasTexSize", tileAtlas.texture.width, tileAtlas.texture.height) //depends on the tile atlas
|
||||||
tilesQuad.render(shader, GL20.GL_TRIANGLES)
|
tilesQuad.render(shader, GL20.GL_TRIANGLES)
|
||||||
shader.end()
|
shader.end()
|
||||||
|
|
||||||
tilesBufferAsTex.dispose()
|
tilesBufferAsTex.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package net.torvald.terrarum.worlddrawer
|
package net.torvald.terrarum.worlddrawer
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
|
import com.badlogic.gdx.graphics.GL20
|
||||||
import com.badlogic.gdx.graphics.Pixmap
|
import com.badlogic.gdx.graphics.Pixmap
|
||||||
import com.badlogic.gdx.graphics.Texture
|
import com.badlogic.gdx.graphics.Texture
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
||||||
@@ -8,6 +10,7 @@ import net.torvald.terrarum.blockproperties.BlockCodex
|
|||||||
import com.jme3.math.FastMath
|
import com.jme3.math.FastMath
|
||||||
import net.torvald.terrarum.Ingame
|
import net.torvald.terrarum.Ingame
|
||||||
import net.torvald.terrarum.Terrarum
|
import net.torvald.terrarum.Terrarum
|
||||||
|
import net.torvald.terrarum.TerrarumAppLoader
|
||||||
import net.torvald.terrarum.gameworld.GameWorld
|
import net.torvald.terrarum.gameworld.GameWorld
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
import net.torvald.terrarum.gameactors.*
|
import net.torvald.terrarum.gameactors.*
|
||||||
@@ -306,15 +309,20 @@ object LightmapRendererNew {
|
|||||||
lateinit var lightBuffer: Pixmap
|
lateinit var lightBuffer: Pixmap
|
||||||
|
|
||||||
fun draw(batch: SpriteBatch, drawMode: Int) {
|
fun draw(batch: SpriteBatch, drawMode: Int) {
|
||||||
|
|
||||||
val this_x_start = for_x_start// + overscan_open
|
val this_x_start = for_x_start// + overscan_open
|
||||||
val this_x_end = for_x_end// + overscan_open
|
val this_x_end = for_x_end// + overscan_open
|
||||||
val this_y_start = for_y_start// + overscan_open
|
val this_y_start = for_y_start// + overscan_open
|
||||||
val this_y_end = for_y_end// + overscan_open
|
val this_y_end = for_y_end// + overscan_open
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// write to colour buffer
|
// write to colour buffer
|
||||||
for (y in this_y_start..this_y_end) {
|
for (y in this_y_start..this_y_end) {
|
||||||
|
//println("y: $y, this_y_start: $this_y_start")
|
||||||
|
if (y == this_y_start && this_y_start == 0) {
|
||||||
|
//throw Error("Fuck hits again...")
|
||||||
|
}
|
||||||
|
|
||||||
for (x in this_x_start..this_x_end) {
|
for (x in this_x_start..this_x_end) {
|
||||||
|
|
||||||
val color = if (drawMode == DRAW_FOR_RGB) {
|
val color = if (drawMode == DRAW_FOR_RGB) {
|
||||||
@@ -328,21 +336,40 @@ object LightmapRendererNew {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//lightBuffer.setColor(color)
|
lightBuffer.setColor(color)
|
||||||
lightBuffer.setColor(Color.ORANGE)
|
|
||||||
lightBuffer.drawPixel(x - this_x_start, y - this_y_start)
|
//lightBuffer.drawPixel(x - this_x_start, y - this_y_start)
|
||||||
|
|
||||||
|
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
|
||||||
val lightBufferAsTex = Texture(lightBuffer)
|
val lightBufferAsTex = Texture(lightBuffer)
|
||||||
lightBufferAsTex.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest)
|
lightBufferAsTex.setFilter(Texture.TextureFilter.Nearest, Texture.TextureFilter.Nearest)
|
||||||
|
|
||||||
// we might not need shader here...
|
|
||||||
batch.draw(lightBufferAsTex, 0f, 0f, lightBufferAsTex.width * DRAW_TILE_SIZE, lightBufferAsTex.height * DRAW_TILE_SIZE)
|
|
||||||
|
|
||||||
lightBufferAsTex.dispose()
|
Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0) // don't know why it is needed; it really depresses me
|
||||||
|
// we might not need shader here...
|
||||||
|
batch.draw(lightBufferAsTex, 0f, 0f, lightBufferAsTex.width.toFloat(), lightBufferAsTex.height.toFloat())
|
||||||
|
//batch.draw(lightBufferAsTex, 0f, 0f, lightBufferAsTex.width * DRAW_TILE_SIZE, lightBufferAsTex.height * TILE_SIZE.toFloat())
|
||||||
|
|
||||||
|
//lightBufferAsTex.dispose()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -537,7 +564,7 @@ object LightmapRendererNew {
|
|||||||
fun resize(width: Int, height: Int) {
|
fun resize(width: Int, height: Int) {
|
||||||
// make sure the BlocksDrawer is resized first!
|
// make sure the BlocksDrawer is resized first!
|
||||||
|
|
||||||
lightBuffer = Pixmap(BlocksDrawer.tilesInHorizontal, BlocksDrawer.tilesInVertical, Pixmap.Format.RGB888)
|
lightBuffer = Pixmap(BlocksDrawer.tilesInHorizontal, BlocksDrawer.tilesInVertical, Pixmap.Format.RGBA8888)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user