more fixme comments

This commit is contained in:
minjaesong
2022-01-06 11:40:36 +09:00
parent 4ab9ad6a21
commit b1856852e4
3 changed files with 17 additions and 6 deletions

View File

@@ -70,7 +70,7 @@ class FixtureHomeComputer : FixtureBase {
vmRunner.executeCommand(vm.roms[0]!!.readAll())
}
App.disposables.add(Disposable {
INGAME.disposables.add(Disposable {
vmRunner.close()
coroutineJob.cancel("fixture disposal")
vm.dispose()

View File

@@ -9,10 +9,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import net.torvald.terrarum.App
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.ModMgr
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.*
import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID
@@ -51,6 +48,7 @@ class ItemWearableWorldRadar(originalID: String) : GameItem(originalID) {
private val coroutineJob: Job
private val ui = WearableWorldRadarUI(vm)
// FIXME initialise computer stuff when the Item is first used, not when it's registered by the Modmgr
init {
super.equipPosition = EquipPosition.HAND_GRIP
@@ -69,7 +67,7 @@ class ItemWearableWorldRadar(originalID: String) : GameItem(originalID) {
vmRunner.executeCommand(vm.roms[0]!!.readAll())
}
App.disposables.add(Disposable {
INGAME.disposables.add(Disposable {
vmRunner.close()
coroutineJob.cancel("item disposal")
vm.dispose()

View File

@@ -1,6 +1,8 @@
package net.torvald.terrarum
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.utils.Disposable
import com.badlogic.gdx.utils.GdxRuntimeException
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.gameactors.Actor
@@ -26,6 +28,7 @@ import java.io.FileNotFoundException
import java.io.IOException
import java.util.*
import java.util.concurrent.locks.Lock
import java.util.function.Consumer
/**
* Although the game (as product) can have infinitely many stages/planets/etc., those stages must be manually managed by YOU;
@@ -50,6 +53,8 @@ open class IngameInstance(val batch: SpriteBatch, val isMultiplayer: Boolean = f
}
}
val disposables = HashSet<Disposable>()
lateinit var worldDisk: VirtualDisk; internal set
lateinit var playerDisk: VirtualDisk; internal set
lateinit var worldSavefileName: String; internal set
@@ -179,6 +184,14 @@ open class IngameInstance(val batch: SpriteBatch, val isMultiplayer: Boolean = f
actorContainerActive.forEach { it.dispose() }
actorContainerInactive.forEach { it.dispose() }
world.dispose()
disposables.forEach(Consumer {
try { it.dispose() }
catch (_: NullPointerException) { }
catch (_: IllegalArgumentException) { }
catch (_: GdxRuntimeException) { }
catch (_: ConcurrentModificationException) { }
})
}
////////////