diff --git a/src/net/torvald/UnsafePtr.kt b/src/net/torvald/UnsafePtr.kt index e962a7918..998f0c2e9 100644 --- a/src/net/torvald/UnsafePtr.kt +++ b/src/net/torvald/UnsafePtr.kt @@ -74,4 +74,5 @@ class UnsafePtr(val ptr: Long, val allocSize: Long) { } override fun toString() = "0x${ptr.toString(16)} with size $allocSize" + override fun equals(other: Any?) = this.ptr == (other as UnsafePtr).ptr } \ No newline at end of file diff --git a/src/net/torvald/terrarum/TitleScreen.kt b/src/net/torvald/terrarum/TitleScreen.kt index 857818eea..7fbcc55da 100644 --- a/src/net/torvald/terrarum/TitleScreen.kt +++ b/src/net/torvald/terrarum/TitleScreen.kt @@ -13,6 +13,7 @@ import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.jme3.math.FastMath import net.torvald.random.HQRNG import net.torvald.terrarum.AppLoader.printdbg +import net.torvald.terrarum.AppLoader.printdbgerr import net.torvald.terrarum.blockproperties.BlockCodex import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gameactors.ai.ActorAI @@ -29,7 +30,6 @@ import net.torvald.terrarum.modulebasegame.ui.UITitleRemoConYaml import net.torvald.terrarum.modulebasegame.weather.WeatherMixer import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.worlddrawer.CreateTileAtlas -import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.WorldCamera /** @@ -226,10 +226,6 @@ class TitleScreen(val batch: SpriteBatch) : Screen { // update UIs // uiContainer.forEach { it.update(delta) } - - - - LightmapRenderer.fireRecalculateEvent() // don't half-frame update; it will jitter! } fun renderScreen() { @@ -242,11 +238,11 @@ class TitleScreen(val batch: SpriteBatch) : Screen { gdxClearAndSetBlend(.64f, .754f, .84f, 1f) - if (!demoWorld.disposed) { // FIXME q&d hack to circumvent the dangling pointer issue #26 + if (!demoWorld.layerTerrain.ptr.destroyed) { // FIXME q&d hack to circumvent the dangling pointer issue #26 IngameRenderer.invoke(gamePaused = false, uisToDraw = uiContainer) } else { - System.err.println("[TitleScreen] demoworld is already destroyed") + printdbgerr(this, "Demoworld is already been destroyed") } diff --git a/src/net/torvald/terrarum/gameworld/BlockLayer.kt b/src/net/torvald/terrarum/gameworld/BlockLayer.kt index 19cf6bb4c..ac9a844cc 100644 --- a/src/net/torvald/terrarum/gameworld/BlockLayer.kt +++ b/src/net/torvald/terrarum/gameworld/BlockLayer.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.gameworld import com.badlogic.gdx.utils.Disposable import net.torvald.UnsafeHelper +import net.torvald.UnsafePtr import net.torvald.terrarum.AppLoader.printdbg /** @@ -13,7 +14,7 @@ import net.torvald.terrarum.AppLoader.printdbg open class BlockLayer(val width: Int, val height: Int) : Disposable { // using unsafe pointer gets you 100 fps, whereas using directbytebuffer gets you 90 - private val ptr = UnsafeHelper.allocate(width * height * BYTES_PER_BLOCK) + internal val ptr: UnsafePtr = UnsafeHelper.allocate(width * height * BYTES_PER_BLOCK) //private val directByteBuffer: ByteBuffer @@ -142,8 +143,6 @@ open class BlockLayer(val width: Int, val height: Int) : Disposable { printdbg(this, "BlockLayer successfully freed") } - internal fun getPtr() = ptr - companion object { @Transient val BYTES_PER_BLOCK = 2L } diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index 344f8c51a..97a307846 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -472,6 +472,8 @@ open class GameWorld : Disposable { disposed = true } + override fun equals(other: Any?) = layerTerrain.ptr == (other as GameWorld).layerTerrain.ptr + companion object { @Transient const val WALL = 0 @Transient const val TERRAIN = 1 diff --git a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt index ea41e4b11..3b798d671 100644 --- a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt +++ b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt @@ -28,7 +28,6 @@ import net.torvald.terrarum.serialise.toULittle48 import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UINSMenu import net.torvald.terrarum.worlddrawer.CreateTileAtlas.TILE_SIZE -import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.WorldCamera import java.io.File import java.io.FileOutputStream @@ -309,7 +308,6 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { IngameRenderer.setWorld(gameWorld) - LightmapRenderer.fireRecalculateEvent() } override fun show() { diff --git a/src/net/torvald/terrarum/modulebasegame/Ingame.kt b/src/net/torvald/terrarum/modulebasegame/Ingame.kt index 5eefcfba4..dac1e5ad7 100644 --- a/src/net/torvald/terrarum/modulebasegame/Ingame.kt +++ b/src/net/torvald/terrarum/modulebasegame/Ingame.kt @@ -32,7 +32,6 @@ import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.worlddrawer.CreateTileAtlas import net.torvald.terrarum.worlddrawer.CreateTileAtlas.TILE_SIZE import net.torvald.terrarum.worlddrawer.FeaturesDrawer -import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.WorldCamera import net.torvald.util.CircularArray import java.util.* @@ -377,14 +376,8 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { // these need to appear on top of any others uiContainer.add(notifier) - - LightmapRenderer.fireRecalculateEvent() - - AppLoader.setDebugTime("Ingame.updateCounter", 0) - - // some sketchy test code here @@ -963,7 +956,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { if (gameInitialised) { - LightmapRenderer.fireRecalculateEvent() + //LightmapRenderer.fireRecalculateEvent() } diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt index 114a2afb5..f49f0ff69 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRendererNew.kt @@ -69,6 +69,8 @@ object LightmapRenderer { } finally { this.world = world + + // fireRecalculateEvent() } } @@ -214,7 +216,7 @@ object LightmapRenderer { } catch (e: NullPointerException) { System.err.println("[LightmapRendererNew.fireRecalculateEvent] Attempted to refer destroyed unsafe array " + - "(${world.layerTerrain.getPtr()})") + "(${world.layerTerrain.ptr})") e.printStackTrace() return // something's wrong but we'll ignore it like a trustful AK }