adjusting disposing behavs so that we can go back and forth the ingame and titlescr

This commit is contained in:
minjaesong
2019-01-31 00:12:38 +09:00
parent 1475fa08dc
commit b3e323965f
12 changed files with 62 additions and 49 deletions

View File

@@ -435,6 +435,11 @@ public class AppLoader implements ApplicationListener {
IngameRenderer.INSTANCE.dispose(); IngameRenderer.INSTANCE.dispose();
if (Controllers.isCreated()) Controllers.destroy(); if (Controllers.isCreated()) Controllers.destroy();
Terrarum.INSTANCE.dispose();
fontGame.dispose();
fontSmallNumbers.dispose();
// delete temp files // delete temp files
new File("./tmp_wenquanyi.tga").delete(); // FIXME this is pretty much ad-hoc new File("./tmp_wenquanyi.tga").delete(); // FIXME this is pretty much ad-hoc
} }

View File

@@ -313,7 +313,6 @@ object LoadScreen : ScreenAdapter() {
} }
override fun hide() { override fun hide() {
dispose()
} }
override fun resize(width: Int, height: Int) { override fun resize(width: Int, height: Int) {

View File

@@ -401,24 +401,15 @@ object Terrarum : Screen {
AppLoader.getINSTANCE().screen.resume() AppLoader.getINSTANCE().screen.resume()
} }
/** Don't call this! Call AppLoader.dispose() */
override fun dispose() { override fun dispose() {
AppLoader.getINSTANCE().screen.dispose()
fontGame.dispose()
fontSmallNumbers.dispose()
//dispose any other resources used in this level //dispose any other resources used in this level
shaderBayer.dispose() shaderBayer.dispose()
shaderSkyboxFill.dispose() shaderSkyboxFill.dispose()
shaderBlur.dispose() shaderBlur.dispose()
shaderBlendGlow.dispose() shaderBlendGlow.dispose()
ingame?.dispose()
shapeRender.dispose()
batch.dispose()
} }
override fun hide() { override fun hide() {

View File

@@ -105,7 +105,7 @@ class UIItemInventoryCatBar(
private val highlighterYPos = catIcons.tileH + 4f private val highlighterYPos = catIcons.tileH + 4f
private var highlighterMoving = false private var highlighterMoving = false
private val highlighterMoveDuration: Second = 0.1f private val highlighterMoveDuration: Second = 0.15f
private var highlighterMoveTimer: Second = 0f private var highlighterMoveTimer: Second = 0f
private var transitionFired = false private var transitionFired = false

View File

@@ -123,7 +123,10 @@ inline class Yaml(val text: String) {
val nodeString = it.drop(2) val nodeString = it.drop(2)
val nodeNameAndInvocation = nodeString.split(SEPARATOR) val nodeNameAndInvocation = nodeString.split(SEPARATOR)
val nodeName = nodeNameAndInvocation[0] val nodeName = nodeNameAndInvocation[0]
val nodeInvocation = loadClass(nodeNameAndInvocation[1]) val nodeInvocation = if (nodeNameAndInvocation.size == 2)
loadClass(nodeNameAndInvocation[1])
else
null
val nameInvokePair = nodeName to nodeInvocation val nameInvokePair = nodeName to nodeInvocation
@@ -193,5 +196,5 @@ inline class Yaml(val text: String) {
* *
*/ */
interface YamlInvokable { interface YamlInvokable {
operator fun invoke() operator fun invoke(vararg args: Any?)
} }

View File

@@ -1,6 +1,6 @@
package net.torvald.terrarum.console package net.torvald.terrarum.console
import net.torvald.terrarum.console.ConsoleCommand import com.badlogic.gdx.Gdx
/** /**
* Created by minjaesong on 2016-01-15. * Created by minjaesong on 2016-01-15.
@@ -8,7 +8,7 @@ import net.torvald.terrarum.console.ConsoleCommand
internal object QuitApp : ConsoleCommand { internal object QuitApp : ConsoleCommand {
override fun execute(args: Array<String>) { override fun execute(args: Array<String>) {
System.exit(1) Gdx.app.exit()
} }
override fun printUsage() { override fun printUsage() {

View File

@@ -4,10 +4,7 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.InputAdapter import com.badlogic.gdx.InputAdapter
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.AppLoader import net.torvald.terrarum.*
import net.torvald.terrarum.IngameInstance
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.Yaml
import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gameactors.*
import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gamecontroller.KeyToggler
@@ -20,7 +17,6 @@ import net.torvald.terrarum.ui.UINSMenu
import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.LightmapRenderer
import net.torvald.terrarum.worlddrawer.WorldCamera import net.torvald.terrarum.worlddrawer.WorldCamera
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import kotlin.system.measureNanoTime
/** /**
* Created by minjaesong on 2018-07-06. * Created by minjaesong on 2018-07-06.
@@ -35,6 +31,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) {
- Import… - Import…
- Save world… - Save world…
- Load world… - Load world…
- Exit to Title : net.torvald.terrarum.modulebasegame.YamlCommandExit
- Tool - Tool
- Pencil - Pencil
- Eyedropper - Eyedropper
@@ -135,6 +132,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) {
uiToolbox.setPosition(0, 0) uiToolbox.setPosition(0, 0)
uiToolbox.isVisible = true uiToolbox.isVisible = true
notifier.setPosition( notifier.setPosition(
(Terrarum.WIDTH - notifier.width) / 2, Terrarum.HEIGHT - notifier.height) (Terrarum.WIDTH - notifier.width) / 2, Terrarum.HEIGHT - notifier.height)
@@ -260,3 +258,9 @@ class MovableWorldCamera : ActorHumanoid(0, usePhysics = false) {
} }
} }
class YamlCommandExit : YamlInvokable {
override fun invoke(vararg args: Any?) {
Terrarum.setScreen(TitleScreen(Terrarum.batch))
}
}

View File

@@ -22,8 +22,6 @@ import net.torvald.terrarum.modulebasegame.gameactors.*
import net.torvald.terrarum.modulebasegame.gameactors.physicssolver.CollisionSolver import net.torvald.terrarum.modulebasegame.gameactors.physicssolver.CollisionSolver
import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension
import net.torvald.terrarum.modulebasegame.gameworld.WorldSimulator import net.torvald.terrarum.modulebasegame.gameworld.WorldSimulator
import net.torvald.terrarum.modulebasegame.imagefont.Watch7SegMain
import net.torvald.terrarum.modulebasegame.imagefont.WatchDotAlph
import net.torvald.terrarum.modulebasegame.ui.* import net.torvald.terrarum.modulebasegame.ui.*
import net.torvald.terrarum.modulebasegame.weather.WeatherMixer import net.torvald.terrarum.modulebasegame.weather.WeatherMixer
import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser import net.torvald.terrarum.modulebasegame.worldgenerator.RoguelikeRandomiser
@@ -890,7 +888,7 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
} }
override fun hide() { override fun hide() {
dispose() uiContainer.forEach { it.handler.dispose() }
} }
@@ -943,26 +941,16 @@ open class Ingame(batch: SpriteBatch) : IngameInstance(batch) {
} }
override fun dispose() { override fun dispose() {
IngameRenderer.dispose()
actorsRenderBehind.forEach { it.dispose() } actorsRenderBehind.forEach { it.dispose() }
actorsRenderMiddle.forEach { it.dispose() } actorsRenderMiddle.forEach { it.dispose() }
actorsRenderMidTop.forEach { it.dispose() } actorsRenderMidTop.forEach { it.dispose() }
actorsRenderFront.forEach { it.dispose() } actorsRenderFront.forEach { it.dispose() }
actorsRenderOverlay.forEach { it.dispose() } actorsRenderOverlay.forEach { it.dispose() }
uiAliases.forEach { it.dispose() } uiContainer.forEach {
uiAliasesPausing.forEach { it.dispose() } it.handler.dispose()
it.dispose()
}
WatchDotAlph.dispose()
Watch7SegMain.dispose()
WatchDotAlph.dispose()
ItemSlotImageFactory.dispose()
MessageWindow.SEGMENT_BLACK.dispose()
MessageWindow.SEGMENT_WHITE.dispose()
} }

View File

@@ -135,7 +135,7 @@ class UIInventoryFull(
private var transitionReqSource = SCREEN_INVENTORY private var transitionReqSource = SCREEN_INVENTORY
private var transitionReqTarget = SCREEN_INVENTORY private var transitionReqTarget = SCREEN_INVENTORY
private var transitionTimer = 0f private var transitionTimer = 0f
private val transitionLength = 0.333f private val transitionLength = 0.212f
private val transitionalUpdateUIs = ArrayList<UIItem>() private val transitionalUpdateUIs = ArrayList<UIItem>()
@@ -174,6 +174,16 @@ class UIInventoryFull(
addToTransitionalGroup(itemList) addToTransitionalGroup(itemList)
addToTransitionalGroup(equipped) addToTransitionalGroup(equipped)
addToTransitionalGroup(gameMenuButtons) addToTransitionalGroup(gameMenuButtons)
// make gameMenuButtons work
gameMenuButtons.selectionChangeListener = { old, new ->
if (new == 0) {
Terrarum.setScreen(TitleScreen(Terrarum.batch))
}
else if (new == 1) {
Gdx.app.exit()
}
}
} }
private var offsetX = ((Terrarum.WIDTH - internalWidth) / 2).toFloat() private var offsetX = ((Terrarum.WIDTH - internalWidth) / 2).toFloat()

View File

@@ -3,6 +3,7 @@ package net.torvald.terrarum.ui
import com.badlogic.gdx.Gdx import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Camera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.utils.Disposable
import net.torvald.terrarum.AppLoader import net.torvald.terrarum.AppLoader
import net.torvald.terrarum.Second import net.torvald.terrarum.Second
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
@@ -21,7 +22,7 @@ abstract class UICanvas(
// UI positions itself? (you must g.flush() yourself after the g.translate(Int, Int)) // UI positions itself? (you must g.flush() yourself after the g.translate(Int, Int))
customPositioning: Boolean = false, // mainly used by vital meter customPositioning: Boolean = false, // mainly used by vital meter
doNotWarnConstant: Boolean = false doNotWarnConstant: Boolean = false
) { ): Disposable {
abstract var width: Int abstract var width: Int
abstract var height: Int abstract var height: Int
@@ -36,7 +37,7 @@ abstract class UICanvas(
/** /**
* Usage: (in StateInGame:) uiHandlerField.ui.handler = uiHandlerField * Usage: (in StateInGame:) uiHandlerField.ui.handler = uiHandlerField
*/ */
protected val handler = UIHandler(toggleKeyLiteral, toggleButtonLiteral, customPositioning, doNotWarnConstant) val handler = UIHandler(toggleKeyLiteral, toggleButtonLiteral, customPositioning, doNotWarnConstant)
init { init {
@@ -111,7 +112,7 @@ abstract class UICanvas(
*/ */
abstract fun endClosing(delta: Float) abstract fun endClosing(delta: Float)
abstract fun dispose() abstract override fun dispose()
fun addItem(uiItem: UIItem) { fun addItem(uiItem: UIItem) {
uiItems.add(uiItem) uiItems.add(uiItem)

View File

@@ -3,8 +3,9 @@ package net.torvald.terrarum.ui
import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Camera
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.modulebasegame.Ingame import com.badlogic.gdx.utils.Disposable
import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gamecontroller.KeyToggler
import net.torvald.terrarum.modulebasegame.Ingame
/** /**
* UIHandler is a handler for UICanvas. It opens/closes the attached UI, moves the "window" (or "canvas") * UIHandler is a handler for UICanvas. It opens/closes the attached UI, moves the "window" (or "canvas")
@@ -20,7 +21,7 @@ class UIHandler(//var UI: UICanvas,
// UI positions itself? (you must g.flush() yourself after the g.translate(Int, Int)) // UI positions itself? (you must g.flush() yourself after the g.translate(Int, Int))
var customPositioning: Boolean = false, // mainly used by vital meter var customPositioning: Boolean = false, // mainly used by vital meter
var doNotWarnConstant: Boolean = false var doNotWarnConstant: Boolean = false
) { ): Disposable {
// X/Y Position relative to the game window. // X/Y Position relative to the game window.
var posX: Int = 0 var posX: Int = 0
@@ -341,4 +342,10 @@ class UIHandler(//var UI: UICanvas,
return false return false
} }
} }
/** Don't dispose common assets, this function is called when the ingame does hide() */
override fun dispose() {
toggleKey?.let { KeyToggler.forceSet(it, false) }
toggleButton?.let { /* ButtonToggler.forceSet(it, false) */ }
}
} }

View File

@@ -13,6 +13,7 @@ import net.torvald.terrarum.*
class UINSMenu( class UINSMenu(
var title: String = "", var title: String = "",
val minimumWidth: Int, val minimumWidth: Int,
/** Optional instance of YamlInvokable can be used */
treeRepresentation: Yaml, treeRepresentation: Yaml,
val titleBackCol: Color = Color(0f,0f,0f,.77f), val titleBackCol: Color = Color(0f,0f,0f,.77f),
@@ -29,7 +30,7 @@ class UINSMenu(
val CHILD_ARROW = "${0x2023.toChar()}" val CHILD_ARROW = "${0x2023.toChar()}"
val tree = treeRepresentation.parse() val tree = treeRepresentation.parseAsYamlInvokable()
override var width = 0 override var width = 0
override var height = 0 override var height = 0
//override var width = maxOf(minimumWidth, tree.getLevelData(1).map { Terrarum.fontGame.getWidth(it ?: "") }.max() ?: 0) //override var width = maxOf(minimumWidth, tree.getLevelData(1).map { Terrarum.fontGame.getWidth(it ?: "") }.max() ?: 0)
@@ -53,10 +54,10 @@ class UINSMenu(
addSubMenu(tree) addSubMenu(tree)
} }
private fun addSubMenu(tree: QNDTreeNode<String>) { private fun addSubMenu(tree: QNDTreeNode<Pair<String, YamlInvokable?>>) {
val menuTitle = tree.data ?: title val menuTitle = tree.data?.first ?: title
val stringsFromTree = Array<String>(tree.children.size) { val stringsFromTree = Array<String>(tree.children.size) {
tree.children[it].toString() + if (tree.children[it].children.isNotEmpty()) " $CHILD_ARROW" else "" tree.children[it].data?.first + if (tree.children[it].children.isNotEmpty()) " $CHILD_ARROW" else ""
} }
val listWidth = maxOf( val listWidth = maxOf(
@@ -98,6 +99,10 @@ class UINSMenu(
if (tree.children[new].children.isNotEmpty()) { if (tree.children[new].children.isNotEmpty()) {
addSubMenu(tree.children[new]) addSubMenu(tree.children[new])
} }
// invoke whatever command there is
//printdbg(this, "Selected: ${tree.children[new].data?.second}")
tree.children[new].data?.second?.invoke()
} }
// END List selection change listener // END List selection change listener