From 88db71f7802706c347909865084df59c794f8f80 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 22 Jan 2019 03:50:35 +0900 Subject: [PATCH] ingame will only render visible actor --- .../torvald/terrarum/modulebasegame/Ingame.kt | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/net/torvald/terrarum/modulebasegame/Ingame.kt b/src/net/torvald/terrarum/modulebasegame/Ingame.kt index 13a579320..778ae95c0 100644 --- a/src/net/torvald/terrarum/modulebasegame/Ingame.kt +++ b/src/net/torvald/terrarum/modulebasegame/Ingame.kt @@ -66,6 +66,11 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { private val actorsRenderFront = ArrayList(ACTORCONTAINER_INITIAL_SIZE) private val actorsRenderOverlay= ArrayList(ACTORCONTAINER_INITIAL_SIZE) + private var visibleActorsRenderBehind: List = ArrayList(1) + private var visibleActorsRenderMiddle: List = ArrayList(1) + private var visibleActorsRenderMidTop: List = ArrayList(1) + private var visibleActorsRenderFront: List = ArrayList(1) + private var visibleActorsRenderOverlay: List = ArrayList(1) //var screenZoom = 1.0f // definition moved to IngameInstance //val ZOOM_MAXIMUM = 4.0f // definition moved to IngameInstance @@ -453,10 +458,9 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { // ASYNCHRONOUS UPDATE AND RENDER // - /** UPDATE CODE GOES HERE */ - - updateAkku += AppLoader.getSmoothDelta() + val dt = AppLoader.getSmoothDelta() + updateAkku += dt var i = 0L while (updateAkku >= delta) { @@ -467,6 +471,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { AppLoader.debugTimers["Ingame.updateCounter"] = i + /** RENDER CODE GOES HERE */ AppLoader.debugTimers["Ingame.render"] = measureNanoTime { renderGame() } AppLoader.debugTimers["Ingame.render-Light"] = @@ -517,6 +522,13 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { particlesContainer.forEach { if (!it.flagDespawn) particlesActive++; it.update(delta) } // TODO thread pool(?) CollisionSolver.process() + + + visibleActorsRenderBehind = actorsRenderBehind.filter { it.inScreen() } + visibleActorsRenderMiddle = actorsRenderMiddle.filter { it.inScreen() } + visibleActorsRenderMidTop = actorsRenderMidTop.filter { it.inScreen() } + visibleActorsRenderFront = actorsRenderFront.filter { it.inScreen() } + visibleActorsRenderOverlay=actorsRenderOverlay.filter { it.inScreen() } } @@ -538,15 +550,13 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { private fun renderGame() { Gdx.graphics.setTitle(getCanonicalTitle()) - - IngameRenderer.invoke( world as GameWorldExtension, - actorsRenderBehind, - actorsRenderMiddle, - actorsRenderMidTop, - actorsRenderFront, - actorsRenderOverlay, + visibleActorsRenderBehind, + visibleActorsRenderMiddle, + visibleActorsRenderMidTop, + visibleActorsRenderFront, + visibleActorsRenderOverlay, particlesContainer, actorNowPlaying, uiContainer @@ -959,4 +969,5 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) { printdbg(this, "-> $it") } } + }