still wip

This commit is contained in:
minjaesong
2021-10-11 19:02:51 +09:00
parent ef603ec5d5
commit 8dbedd270e
11 changed files with 40 additions and 35 deletions

View File

@@ -684,6 +684,8 @@ fun AppUpdateListOfSavegames() {
App.savegamePlayers.clear()
App.savegameWorlds.clear()
println("listing savegames...")
// create list of worlds
(File(App.worldsDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.map { file ->
try {
@@ -695,8 +697,12 @@ fun AppUpdateListOfSavegames() {
null
}
}.filter { it != null }.sortedByDescending { it!!.diskFile.lastModified() } as List<DiskSkimmer>).forEach {
println(it.diskFile.absolutePath)
it.rebuild() // disk skimmer was created without initialisation, so do it now
// TODO write simple and dumb SAX parser for JSON
val json = JsonReader().parse(ByteArray64Reader(it.getFile(-1L)!!.bytes, Common.CHARSET).readText())
val jsonFile = it.getFile(-1L)!!
val json = JsonReader().parse(ByteArray64Reader(jsonFile.bytes, Common.CHARSET).readText())
val worldUUID = UUID.fromString(json.get("worldIndex")!!.asString())
App.savegameWorlds[worldUUID] = it
}

View File

@@ -12,7 +12,7 @@ object TerrarumAppConfiguration {
// CONFIGURATION FOR THE APP ITSELF //
//////////////////////////////////////
const val GAME_NAME = "Terrarum"
const val COPYRIGHT_DATE_NAME = "Copyright 2013-2021 CuriousTorvald (minjaesong)"
const val COPYRIGHT_DATE_NAME = "Copyright 2013-2021 CuriousTovald (minjaesong)"
val COPYRIGHT_LICENSE: String; get() = Lang["COPYRIGHT_GNU_GPL_3"]
const val COPYRIGHT_LICENSE_ENGLISH = "Distributed under GNU GPL 3"
const val COPYRIGHT_LICENSE_TERMS_SHORT = """

View File

@@ -234,8 +234,8 @@ class TitleScreen(batch: SpriteBatch) : IngameInstance(batch) {
// load list of savegames
println("[TitleScreen] update list of savegames")
// TODO to show "Continue" and "Load" on the titlescreen, uncomment this line
// App.updateListOfSavegames()
// to show "Continue" and "Load" on the titlescreen, uncomment this line
App.updateListOfSavegames()
loadThingsWhileIntroIsVisible()

View File

@@ -72,7 +72,10 @@ object ThreadExecutor {
}
fun killAll() {
executor.shutdownNow()
try {
executor.shutdownNow()
}
catch (e: UninitializedPropertyAccessException) {}
}
}

View File

@@ -40,7 +40,7 @@ class GameWorldTitleScreen : GameWorld() {
open class GameWorld() : Disposable {
var worldName: String = "New World"
// var worldName: String = "New World"
var worldIndex: UUID = UUID.randomUUID() // should not be immutable as JSON loader will want to overwrite it
var worldCreator: UUID = UUID(0L,0L) // TODO record a value to this
var width: Int = 999; private set
@@ -55,14 +55,17 @@ open class GameWorld() : Disposable {
val randSeeds = LongArray(256) // stores 128 128-bit numbers
/** Creation time for this world, NOT the entire savegame */
internal var creationTime: Long = App.getTIME_T()
internal var creationTime = -1L
internal set
/** Creation time for this world, NOT the entire savegame */
internal var lastPlayTime: Long = App.getTIME_T()
internal var lastPlayTime = -1L
internal set // there's a case of save-and-continue-playing
/** Creation time for this world, NOT the entire savegame */
internal var totalPlayTime = 0L // cumulative value for this very world
init {
creationTime = App.getTIME_T()
}
//layers
@Transient lateinit open var layerWall: BlockLayer

View File

@@ -1,22 +1,9 @@
package net.torvald.terrarum.modulebasegame.console
import net.torvald.ELLIPSIS
import net.torvald.terrarum.App
import net.torvald.terrarum.ccC
import net.torvald.terrarum.ccG
import net.torvald.terrarum.ccR
import net.torvald.terrarum.console.ConsoleCommand
import net.torvald.terrarum.console.Echo
import net.torvald.terrarum.tvda.VDUtil
import net.torvald.terrarum.serialise.*
import java.io.File
import java.io.IOException
import java.util.logging.Level
/**
* Created by minjaesong on 2021-08-30.
*/
object Load : ConsoleCommand {
/*object Load : ConsoleCommand {
override fun execute(args: Array<String>) {
if (args.size == 2) {
@@ -43,4 +30,4 @@ object Load : ConsoleCommand {
Echo("Usage: load <filename>")
}
}
}*/

View File

@@ -14,14 +14,15 @@ import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.serialise.Common
import net.torvald.terrarum.serialise.LoadSavegame
import net.torvald.terrarum.tvda.*
import net.torvald.terrarum.tvda.ByteArray64InputStream
import net.torvald.terrarum.tvda.ByteArray64Reader
import net.torvald.terrarum.tvda.DiskSkimmer
import net.torvald.terrarum.tvda.EntryFile
import net.torvald.terrarum.ui.*
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import java.time.Instant
import java.time.format.DateTimeFormatter
import java.util.*
import java.util.logging.Level
import java.util.zip.GZIPInputStream
import kotlin.math.roundToInt
@@ -404,7 +405,7 @@ class UIItemWorldCells(
}
override var clickOnceListener: ((Int, Int, Int) -> Unit)? = { _: Int, _: Int, _: Int ->
LoadSavegame(VDUtil.readDiskArchive(skimmer.diskFile, Level.INFO))
TODO()
}
internal var hasTexture = false

View File

@@ -37,6 +37,7 @@ object UITitleRemoConYaml {
operator fun invoke(hasSave: Boolean) =
Yaml((if (!hasSave) menuWithSavefile else menuNewGame) + menuBase).parse()
//Yaml((if (hasSave) menuWithSavefile else menuNewGame) + menuBase).parse()
Yaml((if (true) menuWithSavefile else menuNewGame) + menuBase).parse()
}

View File

@@ -11,10 +11,7 @@ import net.torvald.terrarum.modulebasegame.IngameRenderer
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
import net.torvald.terrarum.realestate.LandUtil
import net.torvald.terrarum.tvda.ByteArray64
import net.torvald.terrarum.tvda.ByteArray64Reader
import net.torvald.terrarum.tvda.SimpleFileSystem
import net.torvald.terrarum.tvda.VirtualDisk
import net.torvald.terrarum.tvda.*
import java.io.File
import java.io.Reader
@@ -128,12 +125,17 @@ object LoadSavegame {
fun getFileBytes(disk: SimpleFileSystem, id: Long): ByteArray64 = disk.getFile(id)!!.bytes
fun getFileReader(disk: SimpleFileSystem, id: Long): Reader = ByteArray64Reader(getFileBytes(disk, id), Common.CHARSET)
operator fun invoke(playerDisk: SimpleFileSystem) {
/**
* @param playerDisk DiskSkimmer representing the Player.
* @param worldDisk0 DiskSkimmer representing the World to be loaded.
* If unset, last played world for the Player will be loaded.
*/
operator fun invoke(playerDisk: DiskSkimmer, worldDisk0: DiskSkimmer? = null) {
val newIngame = TerrarumIngame(App.batch)
val player = ReadActor.invoke(playerDisk, ByteArray64Reader(playerDisk.getFile(-1L)!!.bytes, Common.CHARSET)) as IngamePlayer
val currentWorldId = player.worldCurrentlyPlaying
val worldDisk = App.savegameWorlds[currentWorldId]!!
val worldDisk = worldDisk0 ?: App.savegameWorlds[currentWorldId]!!
val world = ReadWorld(ByteArray64Reader(worldDisk.getFile(-1L)!!.bytes, Common.CHARSET))
world.layerTerrain = BlockLayer(world.width, world.height)

View File

@@ -188,6 +188,8 @@ removefile:
* @return DiskEntry if the entry exists on the disk, `null` otherwise.
*/
fun requestFile(entryID: EntryID): DiskEntry? {
if (!initialised) throw IllegalStateException("File entries not built! Initialise the Skimmer by executing rebuild()")
entryToOffsetTable[entryID].let { offset ->
if (offset == null) {
debugPrintln("[DiskSkimmer.requestFile] entry $entryID does not exist on the table")

View File

@@ -22,7 +22,7 @@ import javax.swing.text.DefaultCaret
class VirtualDiskCracker(val sysCharset: Charset = Charsets.UTF_8) : JFrame() {
private val annoyHackers = true // Jar build settings. Intended for Terrarum proj.
private val annoyHackers = false // Jar build settings. Intended for Terrarum proj.
private val PREVIEW_MAX_BYTES = 4L * 1024 // 4 kBytes