mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 02:54:04 +09:00
asynchronous lightmap update wip
This commit is contained in:
@@ -13,6 +13,7 @@ import net.torvald.terrarum.blockproperties.BlockPropUtil
|
||||
import net.torvald.terrarum.gameactors.*
|
||||
import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent
|
||||
import net.torvald.terrarum.gameitems.ItemID
|
||||
import net.torvald.terrarum.gameparticles.ParticleBase
|
||||
import net.torvald.terrarum.gameworld.GameWorld
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
|
||||
import net.torvald.terrarum.gameworld.WorldTime
|
||||
@@ -22,6 +23,7 @@ import net.torvald.terrarum.modulebasegame.ui.UIPaletteSelector
|
||||
import net.torvald.terrarum.weather.WeatherMixer
|
||||
import net.torvald.terrarum.ui.UINSMenu
|
||||
import net.torvald.terrarum.worlddrawer.WorldCamera
|
||||
import net.torvald.util.CircularArray
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2018-07-06.
|
||||
@@ -385,10 +387,21 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) {
|
||||
BlockPropUtil.dynamicLumFuncTickClock()
|
||||
}
|
||||
|
||||
private val particles = CircularArray<ParticleBase>(16, true)
|
||||
|
||||
private fun renderGame() {
|
||||
_testMarkerDrawCalls = 0L
|
||||
|
||||
IngameRenderer.invoke(false, actorsRenderOverlay = if (showSelection) actorsRenderOverlay + essentialOverlays else essentialOverlays, uiContainer = uiContainer)
|
||||
IngameRenderer.invoke(false,
|
||||
1f,
|
||||
listOf(),
|
||||
listOf(),
|
||||
listOf(),
|
||||
listOf(),
|
||||
if (showSelection) actorsRenderOverlay + essentialOverlays else essentialOverlays,
|
||||
particles,
|
||||
uiContainer = uiContainer
|
||||
)
|
||||
|
||||
App.setDebugTime("Test.MarkerDrawCalls", _testMarkerDrawCalls)
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.badlogic.gdx.utils.GdxRuntimeException
|
||||
import net.torvald.random.HQRNG
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.App.measureDebugTime
|
||||
import net.torvald.terrarum.App.printdbg
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||
@@ -196,22 +197,20 @@ object IngameRenderer : Disposable {
|
||||
operator fun invoke(
|
||||
gamePaused: Boolean,
|
||||
zoom: Float = 1f,
|
||||
actorsRenderBehind : List<ActorWithBody>? = null,
|
||||
actorsRenderMiddle : List<ActorWithBody>? = null,
|
||||
actorsRenderMidTop : List<ActorWithBody>? = null,
|
||||
actorsRenderFront : List<ActorWithBody>? = null,
|
||||
actorsRenderOverlay: List<ActorWithBody>? = null,
|
||||
particlesContainer : CircularArray<ParticleBase>? = null,
|
||||
actorsRenderBehind : List<ActorWithBody>,
|
||||
actorsRenderMiddle : List<ActorWithBody>,
|
||||
actorsRenderMidTop : List<ActorWithBody>,
|
||||
actorsRenderFront : List<ActorWithBody>,
|
||||
actorsRenderOverlay: List<ActorWithBody>,
|
||||
particlesContainer : CircularArray<ParticleBase>,
|
||||
player: ActorWithBody? = null,
|
||||
uiContainer: UIContainer? = null
|
||||
) {
|
||||
renderingActorsCount = (actorsRenderBehind?.size ?: 0) +
|
||||
(actorsRenderMiddle?.size ?: 0) +
|
||||
(actorsRenderMidTop?.size ?: 0) +
|
||||
(actorsRenderFront?.size ?: 0) +
|
||||
(actorsRenderOverlay?.size ?: 0)
|
||||
//renderingParticleCount = particlesContainer?.size ?: 0
|
||||
//renderingParticleCount = (particlesContainer?.buffer?.map { (!it.flagDespawn).toInt() } ?: listOf(0)).sum()
|
||||
renderingActorsCount = (actorsRenderBehind.size) +
|
||||
(actorsRenderMiddle.size) +
|
||||
(actorsRenderMidTop.size) +
|
||||
(actorsRenderFront.size) +
|
||||
(actorsRenderOverlay.size)
|
||||
renderingUIsCount = uiContainer?.countVisible() ?: 0
|
||||
|
||||
invokeInit()
|
||||
@@ -225,8 +224,9 @@ object IngameRenderer : Disposable {
|
||||
if (!gamePaused || newWorldLoadedLatch) {
|
||||
measureDebugTime("Renderer.LightRun*") {
|
||||
// recalculate for even frames, or if the sign of the cam-x changed
|
||||
if (App.GLOBAL_RENDER_TIMER % 3 == 0 || Math.abs(WorldCamera.x - oldCamX) >= world.width * 0.85f * TILE_SIZEF || newWorldLoadedLatch) {
|
||||
LightmapRenderer.fireRecalculateEvent(actorsRenderBehind, actorsRenderFront, actorsRenderMidTop, actorsRenderMiddle, actorsRenderOverlay)
|
||||
if (App.GLOBAL_RENDER_TIMER % 80 == 0 || Math.abs(WorldCamera.x - oldCamX) >= world.width * 0.85f * TILE_SIZEF || newWorldLoadedLatch) {
|
||||
printdbg(this, "LightmapRenderer requestRecalculation")
|
||||
LightmapRenderer.requestRecalculation { actorsRenderBehind + actorsRenderFront + actorsRenderMidTop + actorsRenderMiddle + actorsRenderOverlay }
|
||||
}
|
||||
oldCamX = WorldCamera.x
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import net.torvald.terrarum.console.CommandDict
|
||||
import net.torvald.terrarum.gameactors.*
|
||||
import net.torvald.terrarum.gameactors.ai.ActorAI
|
||||
import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent
|
||||
import net.torvald.terrarum.gameparticles.ParticleBase
|
||||
import net.torvald.terrarum.gameworld.GameWorld
|
||||
import net.torvald.terrarum.gameworld.WorldTime
|
||||
import net.torvald.terrarum.gameworld.fmod
|
||||
@@ -31,6 +32,7 @@ import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.weather.WeatherMixer
|
||||
import net.torvald.terrarum.worlddrawer.WorldCamera
|
||||
import net.torvald.util.CircularArray
|
||||
import java.io.IOException
|
||||
import kotlin.math.atan2
|
||||
import kotlin.math.cos
|
||||
@@ -285,6 +287,8 @@ class TitleScreen(batch: SpriteBatch) : IngameInstance(batch) {
|
||||
uiContainer.forEach { it?.update(delta) }
|
||||
}
|
||||
|
||||
private val particles = CircularArray<ParticleBase>(16, true)
|
||||
|
||||
fun renderScreen() {
|
||||
Gdx.graphics.setTitle(TerrarumIngame.getCanonicalTitle())
|
||||
|
||||
@@ -296,7 +300,17 @@ class TitleScreen(batch: SpriteBatch) : IngameInstance(batch) {
|
||||
|
||||
|
||||
if (!demoWorld.layerTerrain.ptr.destroyed) { // FIXME q&d hack to circumvent the dangling pointer issue #26
|
||||
IngameRenderer.invoke(gamePaused = false, uiContainer = uiContainer)
|
||||
IngameRenderer.invoke(
|
||||
false,
|
||||
1f,
|
||||
listOf(),
|
||||
listOf(),
|
||||
listOf(),
|
||||
listOf(),
|
||||
listOf(),
|
||||
particles,
|
||||
uiContainer = uiContainer
|
||||
)
|
||||
}
|
||||
else {
|
||||
printdbgerr(this, "Demoworld is already been destroyed")
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
package net.torvald.terrarum.modulebasegame.console
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import com.badlogic.gdx.Input
|
||||
import net.torvald.terrarum.console.ConsoleAlias
|
||||
import net.torvald.terrarum.console.ConsoleCommand
|
||||
import net.torvald.terrarum.console.Echo
|
||||
//import net.torvald.terrarum.swingapp.IMStringReader
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2017-02-05.
|
||||
*/
|
||||
|
||||
@ConsoleAlias("imtest")
|
||||
internal object JavaIMTest : ConsoleCommand {
|
||||
|
||||
override fun execute(args: Array<String>) {
|
||||
/*IMStringReader(
|
||||
{ Echo("[JavaIMTest -> IMStringReader] $it") }, // send input to Echo
|
||||
"JavaIMTest"
|
||||
)*/
|
||||
val inputListener = object : Input.TextInputListener {
|
||||
override fun input(text: String?) {
|
||||
Echo("[TextInputText] $text")
|
||||
}
|
||||
override fun canceled() {
|
||||
Echo("[TextInputText] (input canceled)")
|
||||
}
|
||||
}
|
||||
Gdx.input.getTextInput(inputListener, "TextInputTest", "", "type anything!")
|
||||
}
|
||||
|
||||
override fun printUsage() {
|
||||
Echo("Tests Swing input window to get non-English text input")
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package net.torvald.terrarum.modulebasegame.console
|
||||
|
||||
import net.torvald.terrarum.console.ConsoleAlias
|
||||
import net.torvald.terrarum.console.ConsoleCommand
|
||||
import net.torvald.terrarum.console.Echo
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2016-07-04.
|
||||
*/
|
||||
@ConsoleAlias("tips")
|
||||
internal object PrintRandomTips : ConsoleCommand {
|
||||
override fun execute(args: Array<String>) {
|
||||
Echo("Nope.")
|
||||
//Echo(Lang["GAME_TIPS_${Random().nextInt(Lang.TIPS_COUNT) + 1}"])
|
||||
}
|
||||
|
||||
override fun printUsage() {
|
||||
Echo("Prints random tips for game.")
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package net.torvald.terrarum.modulebasegame.console
|
||||
|
||||
import net.torvald.terrarum.INGAME
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.console.ConsoleCommand
|
||||
import net.torvald.terrarum.console.Echo
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.PhysTestLuarLander
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2018-01-18.
|
||||
*/
|
||||
internal object SpawnPhysTestLunarLander : ConsoleCommand {
|
||||
override fun execute(args: Array<String>) {
|
||||
val mouseX = Terrarum.mouseX
|
||||
val mouseY = Terrarum.mouseY
|
||||
val lander = PhysTestLuarLander()
|
||||
|
||||
lander.setPosition(mouseX, mouseY)
|
||||
|
||||
INGAME.queueActorAddition(lander)
|
||||
}
|
||||
|
||||
override fun printUsage() {
|
||||
Echo("control it with arrow keys")
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package net.torvald.terrarum.modulebasegame.console
|
||||
|
||||
import net.torvald.terrarum.INGAME
|
||||
import net.torvald.terrarum.console.ConsoleCommand
|
||||
import net.torvald.terrarum.console.Echo
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.DecodeTapestry
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2017-01-14.
|
||||
*/
|
||||
internal object SpawnTapestry : ConsoleCommand {
|
||||
override fun execute(args: Array<String>) {
|
||||
if (args.size < 2) {
|
||||
printUsage()
|
||||
return
|
||||
}
|
||||
|
||||
val tapestry = DecodeTapestry(File(args[1]))
|
||||
INGAME.queueActorAddition(tapestry)
|
||||
}
|
||||
|
||||
override fun printUsage() {
|
||||
Echo("Usage: spawntapestry <tapestry_file>")
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package net.torvald.terrarum.modulebasegame.console
|
||||
|
||||
import net.torvald.terrarum.INGAME
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.console.ConsoleCommand
|
||||
import net.torvald.terrarum.console.ConsoleNoExport
|
||||
import net.torvald.terrarum.console.Echo
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.FixtureTikiTorch
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 2016-12-17.
|
||||
*/
|
||||
@ConsoleNoExport
|
||||
internal object SpawnTikiTorch : ConsoleCommand {
|
||||
override fun execute(args: Array<String>) {
|
||||
val torch = FixtureTikiTorch()
|
||||
torch.setPosition(Terrarum.mouseX, Terrarum.mouseY)
|
||||
|
||||
INGAME.queueActorAddition(torch)
|
||||
}
|
||||
|
||||
override fun printUsage() {
|
||||
Echo("Usage: spawntorch")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user