diff --git a/.idea/artifacts/ModuleComputers.xml b/.idea/artifacts/ModuleComputers.xml index 563b7d854..25275cd23 100644 --- a/.idea/artifacts/ModuleComputers.xml +++ b/.idea/artifacts/ModuleComputers.xml @@ -5,6 +5,10 @@ + + + + \ No newline at end of file diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt index da7eb9442..885e961ba 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameitems/ItemWearableWorldRadar.kt @@ -44,17 +44,26 @@ class ItemWearableWorldRadar(originalID: String) : GameItem(originalID) { VMProgramRom(ModMgr.getGdxFile("dwarventech", "bios/pipboot.rom").path()), VMProgramRom(ModMgr.getGdxFile("dwarventech", "bios/pipcode.bas").path()) )) - private val vmRunner: VMRunner - 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 + } + private var booted = false + private var disposed = false + private lateinit var vmRunner: VMRunner + private lateinit var coroutineJob: Job + + init { + App.disposables.add(ui) + } + + private fun boot() { vm.getIO().blockTransferPorts[1].attachDevice(WorldRadar()) vm.peripheralTable[1] = PeripheralEntry( - ExtDisp(vm, 160, 140), 32768, 1, 0 + ExtDisp(vm, 160, 140), 32768, 1, 0 ) // MMIO stops working when somethingStream is not defined @@ -68,20 +77,32 @@ class ItemWearableWorldRadar(originalID: String) : GameItem(originalID) { } INGAME.disposables.add(Disposable { + closeVM() + }) + booted = true + } + + private fun closeVM() { + if (!disposed) { vmRunner.close() coroutineJob.cancel("item disposal") vm.dispose() - }) - App.disposables.add(ui) - + } + disposed = true + booted = false } override fun effectWhileEquipped(actor: ActorWithBody, delta: Float) { + if (!booted) { + booted = true + boot() + } (Terrarum.ingame!! as TerrarumIngame).wearableDeviceUI = ui } override fun effectOnUnequip(actor: ActorWithBody, delta: Float) { (Terrarum.ingame!! as TerrarumIngame).wearableDeviceUI = null + closeVM() } } diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index b5a41161b..908c6cca4 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -350,6 +350,7 @@ object ModMgr { FileSystems.getDefault().getPath("$modDirExternal/$module/$path").toFile() } fun hasFile(module: String, path: String): Boolean { + if (!moduleInfo.containsKey(module)) return false return getFile(module, path).exists() } fun getFiles(module: String, path: String): Array { diff --git a/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt b/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt index 4c371bf71..89e41eefc 100644 --- a/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt +++ b/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt @@ -87,7 +87,7 @@ class NoModuleDefaultTitlescreen(batch: FlippingSpriteBatch) : IngameInstance(ba App.fontGame.draw(it, pathText, pathButtonX, pathButtonY) } - if (Gdx.input.isKeyPressed(Keys.ESCAPE)) gamemode = 1 +// if (Gdx.input.isKeyPressed(Keys.ESCAPE)) gamemode = 1 } else if (gamemode == 1) { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt index b3907b6a9..8ac284074 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt @@ -16,8 +16,8 @@ import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UIItemModuleInfoCell import kotlin.math.roundToInt -val MODULEINFO_CELL_WIDTH = 480 -val MODULEINFO_CELL_HEIGHT = 48 +val MODULEINFO_CELL_WIDTH = 540 +val MODULEINFO_CELL_HEIGHT = 24*3 /** * Created by minjaesong on 2017-08-01. diff --git a/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt b/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt index d231705fe..4c9e57797 100644 --- a/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt +++ b/src/net/torvald/terrarum/ui/UIItemModuleInfoCell.kt @@ -38,6 +38,7 @@ class UIItemModuleInfoCell( private val modVer = modProp.version private val modDate = modProp.releaseDate private val modAuthor = modProp.author + private val modDesc = modProp.description init { modIcon.flip(false, false) @@ -56,40 +57,42 @@ class UIItemModuleInfoCell( private val ccZero2 = App.fontGame.toColorCode(12,12,12) private val ccNum = App.fontGame.toColorCode(15,14,6) private val ccNum2 = App.fontGame.toColorCode(12,11,4) + private val ccDesc = App.fontGame.toColorCode(13,13,13) override fun render(batch: SpriteBatch, camera: Camera) { blendNormal(batch) batch.color = Toolkit.Theme.COL_CELL_FILL - Toolkit.fillArea(batch, initialX, initialY, 32, 48) - Toolkit.fillArea(batch, initialX + 35, initialY, 48, 48) - Toolkit.fillArea(batch, initialX + 86, initialY, width - 86, 48) + Toolkit.fillArea(batch, initialX, initialY, 32, height) + Toolkit.fillArea(batch, initialX + 35, initialY, 48, height) + Toolkit.fillArea(batch, initialX + 86, initialY, width - 86, height) batch.color = Toolkit.Theme.COL_INACTIVE Toolkit.drawBoxBorder(batch, initialX - 1, initialY - 1, width + 2, height + 2) - Toolkit.fillArea(batch, initialX + 33, initialY, 1, 48) - Toolkit.fillArea(batch, initialX + 84, initialY, 1, 48) + Toolkit.fillArea(batch, initialX + 33, initialY, 1, height) + Toolkit.fillArea(batch, initialX + 84, initialY, 1, height) if (order < 9) - App.fontSmallNumbers.draw(batch, "${order+1}", initialX + 13f, initialY + 18f) + App.fontSmallNumbers.draw(batch, "${order+1}", initialX + 13f, initialY + 18f + 12f) else if (order < 99) - App.fontSmallNumbers.draw(batch, "${order+1}", initialX + 9f, initialY + 18f) + App.fontSmallNumbers.draw(batch, "${order+1}", initialX + 9f, initialY + 18f + 12f) else - App.fontSmallNumbers.draw(batch, "${order+1}", initialX + 6f, initialY + 18f) + App.fontSmallNumbers.draw(batch, "${order+1}", initialX + 6f, initialY + 18f + 12f) batch.color = Color.WHITE if (modErrored) { batch.shader = App.shaderGhastlyWhite batch.color = Color.LIGHT_GRAY } - batch.draw(modIcon, initialX + 35f, initialY.toFloat()) + batch.draw(modIcon, initialX + 35f, initialY + 12f) batch.shader = null batch.color = Color.WHITE - App.fontGame.draw(batch, "$ccZero${modName.toUpperCase()}$ccNum $modVer", initialX + 86f + 6f, initialY + 2f) - App.fontGame.draw(batch, "$ccZero2$modAuthor$ccNum2 $modDate", initialX + 86f + 6f, initialY + 26f) + App.fontGame.draw(batch, "$ccZero${modName.toUpperCase()}$ccNum $modVer", initialX + 86f + 3f, initialY + 2f) + App.fontGame.draw(batch, "$ccDesc$modDesc", initialX + 86f + 3f, initialY + 26f) + App.fontGame.draw(batch, "$ccZero2$modAuthor$ccNum2 $modDate", initialX + 86f + 3f, initialY + 50f) if (modErrored) { - batch.draw(CommonResourcePool.getAsTextureRegion("basegame_errored_icon32"), initialX + width - 40f, initialY + 8f) + batch.draw(CommonResourcePool.getAsTextureRegion("basegame_errored_icon32"), initialX + width - 40f, initialY + 8f + 12f) } }