diff --git a/src/net/torvald/terrarum/IngameInstance.kt b/src/net/torvald/terrarum/IngameInstance.kt index d9cebb591..34fbfdbf5 100644 --- a/src/net/torvald/terrarum/IngameInstance.kt +++ b/src/net/torvald/terrarum/IngameInstance.kt @@ -400,12 +400,6 @@ open class IngameInstance(val batch: SpriteBatch, val isMultiplayer: Boolean = f -// fun getSaveFileMain() = File(App.saveDir, savegameNickname) - fun getWorldSaveFiledesc(filename: String) = File(App.worldsDir, filename) - fun getPlayerSaveFiledesc(filename: String) = File(App.playersDir, filename) - fun getSharedSaveFiledesc(filename: String) = File(App.saveSharedDir, filename) - - // simple euclidean norm, squared private val actorDistanceCalculator = DistanceCalculator { t: ActorWithBody, p: PointND -> val dist1 = (p.getOrd(0) - t.hitbox.centeredX).sqr() + (p.getOrd(1) - t.hitbox.centeredY).sqr() diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index b5789f72f..52c77476c 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -321,6 +321,13 @@ object Terrarum : Disposable { } while (hasCollision(ret)) // check for collision return ret } + + + + fun getWorldSaveFiledesc(filename: String) = File(App.worldsDir, filename) + fun getPlayerSaveFiledesc(filename: String) = File(App.playersDir, filename) + fun getSharedSaveFiledesc(filename: String) = File(App.saveSharedDir, filename) + } inline fun SpriteBatch.inUse(action: (SpriteBatch) -> Unit) { diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index c05f0bda2..91036cd49 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -7,6 +7,8 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.EMDASH import net.torvald.terrarum.* import net.torvald.terrarum.App.* +import net.torvald.terrarum.Terrarum.getPlayerSaveFiledesc +import net.torvald.terrarum.Terrarum.getWorldSaveFiledesc import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED import net.torvald.terrarum.blockproperties.BlockPropUtil diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt index 10a1c6361..5b88df58e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt @@ -6,6 +6,8 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.App import net.torvald.terrarum.INGAME +import net.torvald.terrarum.Terrarum.getPlayerSaveFiledesc +import net.torvald.terrarum.Terrarum.getWorldSaveFiledesc import net.torvald.terrarum.TitleScreen import net.torvald.terrarum.blendNormal import net.torvald.terrarum.modulebasegame.TerrarumIngame @@ -96,8 +98,8 @@ class UIInventoryEscMenu(val full: UIInventoryFull) : UICanvas() { } val saveTime_t = App.getTIME_T() - val playerSavefile = INGAME.getPlayerSaveFiledesc(INGAME.playerSavefileName) - val worldSavefile = INGAME.getWorldSaveFiledesc(INGAME.worldSavefileName) + val playerSavefile = getPlayerSaveFiledesc(INGAME.playerSavefileName) + val worldSavefile = getWorldSaveFiledesc(INGAME.worldSavefileName) INGAME.makeSavegameBackupCopy(playerSavefile) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt new file mode 100644 index 000000000..215b8c10e --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt @@ -0,0 +1,140 @@ +package net.torvald.terrarum.modulebasegame.ui + +import com.badlogic.gdx.graphics.Camera +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.random.HQRNG +import net.torvald.terrarum.App +import net.torvald.terrarum.Second +import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.console.Echo +import net.torvald.terrarum.gameactors.AVKey +import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.gameactors.PlayerBuilderTestSubject1 +import net.torvald.terrarum.savegame.DiskSkimmer +import net.torvald.terrarum.savegame.VDUtil +import net.torvald.terrarum.savegame.VirtualDisk +import net.torvald.terrarum.serialise.Common +import net.torvald.terrarum.serialise.LoadSavegame +import net.torvald.terrarum.serialise.WritePlayer +import net.torvald.terrarum.serialise.WriteSavegame +import net.torvald.terrarum.toInt +import net.torvald.terrarum.ui.* +import net.torvald.terrarum.utils.RandomWordsName + +/** + * Created by minjaesong on 2021-12-09. + */ +class UINewCharacter(val remoCon: UIRemoCon) : UICanvas() { + + override var width = 480 + override var height = 480 + override var openCloseTime: Second = 0f + + private val drawX = (Toolkit.drawWidth - width) / 2 + private val drawY = (App.scr.height - height) / 2 + + private val row1 = 186 + 40 + + + private val inputWidth = 340 + + private val nameInput = UIItemTextLineInput(this, + drawX + width - inputWidth, drawY + row1, inputWidth, + { RandomWordsName(4) }, InputLenCap(VirtualDisk.NAME_LENGTH, InputLenCap.CharLenUnit.UTF8_BYTES)) + + private val goButtonWidth = 180 + private val backButton = UIItemTextButton(this, "MENU_LABEL_BACK", drawX + (width/2 - goButtonWidth) / 2, drawY + height - 24, goButtonWidth, true, alignment = UIItemTextButton.Companion.Alignment.CENTRE, hasBorder = true) + private val goButton = UIItemTextButton(this, "MENU_LABEL_CONFIRM_BUTTON", drawX + width/2 + (width/2 - goButtonWidth) / 2, drawY + height - 24, goButtonWidth, true, alignment = UIItemTextButton.Companion.Alignment.CENTRE, hasBorder = true) + + private var returnedFromChargen = false + + private var uiLocked = false + + init { + goButton.touchDownListener = { _, _, _, _ -> + uiLocked = true + + + val player = PlayerBuilderTestSubject1() + player.actorValue[AVKey.NAME] = nameInput.getTextOrPlaceholder() + + val disk = VDUtil.createNewDisk( + 1L shl 60, + player.actorValue.getAsString(AVKey.NAME) ?: "", + Common.CHARSET + ) + val outFile = Terrarum.getPlayerSaveFiledesc(LoadSavegame.getPlayerSavefileName(player)) + val time_t = App.getTIME_T() + + + val savingThread = Thread({ + + disk.saveMode = 2 // auto, no quick + disk.capacity = 0L + + WritePlayer(player, disk, null, time_t) + VDUtil.dumpToRealMachine(disk, outFile) + + uiLocked = false + returnedFromChargen = true + + + // comment below if chargen must send gamers back to the charcters list + UILoadGovernor.playerDisk = DiskSkimmer(outFile) + // comment above if chargen must send gamers back to the charcters list + + + }, "TerrarumBasegameNewCharcterSaveThread") + savingThread.start() + } + backButton.touchDownListener = { _, _, _, _ -> + remoCon.openUI(UILoadDemoSavefiles(remoCon, 0)) + } + + addUIitem(nameInput) + addUIitem(goButton) + addUIitem(backButton) + } + + override fun updateUI(delta: Float) { + if (!uiLocked) { + uiItems.forEach { it.update(delta) } + } + + if (returnedFromChargen) { + returnedFromChargen = false + remoCon.openUI(UILoadDemoSavefiles(remoCon, 1)) // 0 to go back (Terraria's behav), set variables up and 1 to choose world + } + } + + override fun renderUI(batch: SpriteBatch, camera: Camera) { + batch.color = Color.WHITE + // ui title +// val titlestr = Lang["CONTEXT_WORLD_NEW"] +// App.fontUITitle.draw(batch, titlestr, drawX + (width - App.fontGame.getWidth(titlestr)).div(2).toFloat(), titleTextPosY.toFloat()) + + + // name/seed input labels + App.fontGame.draw(batch, Lang["MENU_NAME"], drawX, drawY + row1) + + uiItems.forEach { it.render(batch, camera) } + } + + override fun doOpening(delta: Float) { + } + + override fun doClosing(delta: Float) { + } + + override fun endOpening(delta: Float) { + } + + override fun endClosing(delta: Float) { + } + + override fun dispose() { + + } + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt index 9391826a0..5610678e7 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt @@ -78,7 +78,7 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() { tex.forEach { it.flip(false, true) } goButton.touchDownListener = { _, _, _, _ -> - printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}") +// printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}") val ingame = TerrarumIngame(App.batch) val player = ReadActor.invoke(UILoadGovernor.playerDisk!!, ByteArray64Reader(UILoadGovernor.playerDisk!!.getFile(-1L)!!.bytes, Common.CHARSET)) as IngamePlayer diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt index aa8bbdbf3..6ea605182 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt @@ -38,7 +38,7 @@ object UITitleRemoConYaml { // todo add MENU_IO_IMPORT val injectedMenuSingleCharSel = """ -- CONTEXT_CHARACTER_NEW +- CONTEXT_CHARACTER_NEW : net.torvald.terrarum.modulebasegame.ui.UINewCharacter - MENU_LABEL_RETURN """ diff --git a/src/net/torvald/terrarum/serialise/WriteActor.kt b/src/net/torvald/terrarum/serialise/WriteActor.kt index 61010d135..089154fb5 100644 --- a/src/net/torvald/terrarum/serialise/WriteActor.kt +++ b/src/net/torvald/terrarum/serialise/WriteActor.kt @@ -9,6 +9,7 @@ import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.savegame.* import java.io.Reader +import java.util.* /** * Created by minjaesong on 2021-08-24. @@ -57,19 +58,19 @@ object WritePlayer { if (!dir.contains(file.entryID)) dir.add(file.entryID) } - operator fun invoke(player: IngamePlayer, playerDisk: VirtualDisk, ingame: TerrarumIngame, time_t: Long) { + operator fun invoke(player: IngamePlayer, playerDisk: VirtualDisk, ingame: TerrarumIngame?, time_t: Long) { player.lastPlayTime = time_t - player.totalPlayTime += time_t - ingame.loadedTime_t + player.totalPlayTime += time_t - (ingame?.loadedTime_t ?: time_t) // restore player prop backup created on load-time for multiplayer - if (ingame.isMultiplayer) { + if (ingame?.isMultiplayer == true) { player.setPosition(player.unauthorisedPlayerProps.physics.position) player.actorValue = player.unauthorisedPlayerProps.actorValue!! player.inventory = player.unauthorisedPlayerProps.inventory!! } - player.worldCurrentlyPlaying = ingame.world.worldIndex + player.worldCurrentlyPlaying = ingame?.world?.worldIndex ?: UUID(0L,0L) val actorJson = WriteActor.encodeToByteArray64(player)