From 63e416f47232daf6b110f0681db07196944066b0 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 10 Mar 2019 00:28:47 +0900 Subject: [PATCH] minimap: only update and render when needed --- .../terrarum/blockstats/MinimapComposer.kt | 28 +++++++++++++++---- .../modulebasegame/ui/UIInventoryFull.kt | 13 +++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/net/torvald/terrarum/blockstats/MinimapComposer.kt b/src/net/torvald/terrarum/blockstats/MinimapComposer.kt index f4b2da5fa..86de07651 100644 --- a/src/net/torvald/terrarum/blockstats/MinimapComposer.kt +++ b/src/net/torvald/terrarum/blockstats/MinimapComposer.kt @@ -46,8 +46,8 @@ object MinimapComposer { var topLeftCoordY = 0 const val LIVETILE_SIZE = 64 - const val DISPLAY_CANVAS_WIDTH = 2048 - const val DISPLAY_CANVAS_HEIGHT = 1024 + const val DISPLAY_CANVAS_WIDTH = 2048 // must be divisible by LIVETILE_SIZE + const val DISPLAY_CANVAS_HEIGHT = 1024 // must be divisible by LIVETILE_SIZE val minimap = Pixmap(DISPLAY_CANVAS_WIDTH, DISPLAY_CANVAS_HEIGHT, Pixmap.Format.RGBA8888) const val TILES_IN_X = DISPLAY_CANVAS_WIDTH / LIVETILE_SIZE const val TILES_IN_Y = DISPLAY_CANVAS_HEIGHT / LIVETILE_SIZE @@ -96,12 +96,30 @@ object MinimapComposer { // TODO } + fun revalidateAll() { + liveTilesMeta.forEach { it.revalidate = true } + } + + private var rerender = true + + /** + * When to call: + * - every 5 seconds or so + * - every .5 seconds for 10 seconds after the tilemap changed + */ + fun requestRender() { + printdbg(this, "Rerender requested") + rerender = true + } fun renderToBackground() { - for (y in 0 until TILES_IN_Y) { - for (x in 0 until TILES_IN_X) { - minimap.drawPixmap(liveTiles[tilemap[y][x]], x * LIVETILE_SIZE, y * LIVETILE_SIZE) + if (rerender) { + for (y in 0 until TILES_IN_Y) { + for (x in 0 until TILES_IN_X) { + minimap.drawPixmap(liveTiles[tilemap[y][x]], x * LIVETILE_SIZE, y * LIVETILE_SIZE) + } } + rerender = false } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt index 3a99e10ac..25361bf3c 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt @@ -220,6 +220,8 @@ class UIInventoryFull( MinimapComposer.setWorld(Terrarum.ingame!!.world) MinimapComposer.update() } + + minimapRerenderTimer += Gdx.graphics.rawDeltaTime } private val gradStartCol = Color(0x404040_60) @@ -232,6 +234,9 @@ class UIInventoryFull( private var xEnd = (Terrarum.WIDTH + internalWidth).div(2).toFloat() private var yEnd = (Terrarum.HEIGHT + internalHeight).div(2).toFloat() + private var minimapRerenderTimer = 0f + private val minimapRerenderInterval = .5f + fun requestTransition(target: Int) { if (!transitionOngoing) { transitionRequested = true @@ -398,12 +403,18 @@ class UIInventoryFull( // render minimap batch.end() + if (minimapRerenderTimer >= minimapRerenderInterval) { + minimapRerenderTimer = 0f + MinimapComposer.requestRender() + } + MinimapComposer.renderToBackground() minimapFBO.inAction(minimapCamera, batch) { // whatever. MinimapComposer.tempTex.dispose() MinimapComposer.tempTex = Texture(MinimapComposer.minimap) + MinimapComposer.tempTex.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Nearest) batch.inUse { @@ -545,6 +556,8 @@ class UIInventoryFull( override fun endClosing(delta: Float) { (Terrarum.ingame as? Ingame)?.setTooltipMessage(null) // required! + + MinimapComposer.revalidateAll() }