mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-17 00:56:07 +09:00
trying to make savegame collecting faster
This commit is contained in:
@@ -1581,17 +1581,18 @@ public class App implements ApplicationListener {
|
||||
|
||||
public static void printdbg(Object obj, Object message) {
|
||||
if (IS_DEVELOPMENT_BUILD) {
|
||||
var timeNow = getTIME_T();
|
||||
var ss = timeNow % 60;
|
||||
var mm = (timeNow / 60) % 60;
|
||||
var hh = (timeNow / 3600) % 24;
|
||||
var timeNow = System.currentTimeMillis();
|
||||
var ss = (timeNow / 1000) % 60;
|
||||
var mm = (timeNow / 60000) % 60;
|
||||
var hh = (timeNow / 3600000) % 24;
|
||||
var ms = timeNow % 1000;
|
||||
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
|
||||
String prompt = csiG+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csi0,out);
|
||||
String prompt = csiG+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csi0,out);
|
||||
if (message == null) {
|
||||
System.out.println(prompt+"null");
|
||||
}
|
||||
else {
|
||||
String indentation = " ".repeat(out.length() + 11);
|
||||
String indentation = " ".repeat(out.length() + 15);
|
||||
String[] msgLines = message.toString().split("\\n");
|
||||
for (int i = 0; i < msgLines.length; i++) {
|
||||
System.out.println((i == 0 ? prompt : indentation) + msgLines[i]);
|
||||
@@ -1602,12 +1603,13 @@ public class App implements ApplicationListener {
|
||||
|
||||
public static void printdbgerr(Object obj, Object message) {
|
||||
if (IS_DEVELOPMENT_BUILD) {
|
||||
var timeNow = getTIME_T();
|
||||
var ss = timeNow % 60;
|
||||
var mm = (timeNow / 60) % 60;
|
||||
var hh = (timeNow / 3600) % 24;
|
||||
var timeNow = System.currentTimeMillis();
|
||||
var ss = (timeNow / 1000) % 60;
|
||||
var mm = (timeNow / 60000) % 60;
|
||||
var hh = (timeNow / 3600000) % 24;
|
||||
var ms = timeNow % 1000;
|
||||
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
|
||||
String prompt = csiB+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csiR,out);
|
||||
String prompt = csiB+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csiR,out);
|
||||
if (message == null) {
|
||||
System.out.println(prompt+"null"+csi0);
|
||||
}
|
||||
@@ -1622,12 +1624,13 @@ public class App implements ApplicationListener {
|
||||
}
|
||||
|
||||
public static void printmsg(Object obj, Object message) {
|
||||
var timeNow = getTIME_T();
|
||||
var ss = timeNow % 60;
|
||||
var mm = (timeNow / 60) % 60;
|
||||
var hh = (timeNow / 3600) % 24;
|
||||
var timeNow = System.currentTimeMillis();
|
||||
var ss = (timeNow / 1000) % 60;
|
||||
var mm = (timeNow / 60000) % 60;
|
||||
var hh = (timeNow / 3600000) % 24;
|
||||
var ms = timeNow % 1000;
|
||||
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
|
||||
String prompt = csiG+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csi0,out);
|
||||
String prompt = csiG+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csi0,out);
|
||||
if (message == null)
|
||||
System.out.println(prompt+"null");
|
||||
else
|
||||
@@ -1635,12 +1638,13 @@ public class App implements ApplicationListener {
|
||||
}
|
||||
|
||||
public static void printmsgerr(Object obj, Object message) {
|
||||
var timeNow = getTIME_T();
|
||||
var ss = timeNow % 60;
|
||||
var mm = (timeNow / 60) % 60;
|
||||
var hh = (timeNow / 3600) % 24;
|
||||
var timeNow = System.currentTimeMillis();
|
||||
var ss = (timeNow / 1000) % 60;
|
||||
var mm = (timeNow / 60000) % 60;
|
||||
var hh = (timeNow / 3600000) % 24;
|
||||
var ms = timeNow % 1000;
|
||||
String out = (obj instanceof String) ? (String) obj : obj.getClass().getSimpleName();
|
||||
String prompt = csiB+String.format("%02d:%02d:%02d%s [%s] ",hh,mm,ss,csiR,out);
|
||||
String prompt = csiB+String.format("%02d:%02d:%02d.%03d%s [%s] ",hh,mm,ss,ms,csiR,out);
|
||||
if (message == null)
|
||||
System.out.println(prompt+"null"+csi0);
|
||||
else
|
||||
|
||||
@@ -44,8 +44,13 @@ class SavegameCollection(files0: List<DiskSkimmer>) {
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun collectFromBaseFilename(basedir: File, name: String): SavegameCollection {
|
||||
val files = basedir.listFiles().filter { it.name.startsWith(name) }
|
||||
fun collectFromBaseFilename(skimmers: List<DiskSkimmer>, name: String): SavegameCollection {
|
||||
return SavegameCollection(skimmers)
|
||||
}
|
||||
|
||||
|
||||
fun collectFromBaseFilename(dir: File, name: String): SavegameCollection {
|
||||
val files = dir.listFiles().filter { it.name.startsWith(name) }
|
||||
.mapNotNull { try { DiskSkimmer(it, true) } catch (e: Throwable) { null } }
|
||||
return SavegameCollection(files)
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ object Terrarum : Disposable {
|
||||
fun setCurrentIngameInstance(ingame: IngameInstance) {
|
||||
this.ingame = ingame
|
||||
|
||||
printdbg(this, "Accepting new ingame instance '${ingame.javaClass.canonicalName}', called by:")
|
||||
printdbg("ListSavegames", "Accepting new ingame instance '${ingame.javaClass.canonicalName}', called by:")
|
||||
printStackTrace(this)
|
||||
}
|
||||
|
||||
@@ -204,7 +204,7 @@ object Terrarum : Disposable {
|
||||
/*fun resize(width: Int, height: Int) {
|
||||
ingame?.resize(width, height)
|
||||
|
||||
printdbg(this, "newsize: ${Gdx.graphics.width}x${Gdx.graphics.height} | internal: ${width}x$height")
|
||||
printdbg("ListSavegames", "newsize: ${Gdx.graphics.width}x${Gdx.graphics.height} | internal: ${width}x$height")
|
||||
}*/
|
||||
|
||||
|
||||
@@ -786,11 +786,10 @@ fun AppUpdateListOfSavegames() {
|
||||
App.savegamePlayers.clear()
|
||||
App.savegamePlayersName.clear()
|
||||
|
||||
println("Listing saved worlds...")
|
||||
|
||||
|
||||
// create list of worlds
|
||||
File(worldsDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
|
||||
printdbg("ListSavegames", "Listing saved worlds...")
|
||||
val worldsDirLs = File(worldsDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
|
||||
try {
|
||||
DiskSkimmer(file, true)
|
||||
}
|
||||
@@ -799,19 +798,30 @@ fun AppUpdateListOfSavegames() {
|
||||
e.printStackTrace()
|
||||
null
|
||||
}
|
||||
}.sortedByDescending { it.getLastModifiedTime() }.forEachIndexed { index, it ->
|
||||
println("${index+1}.\t${it.diskFile.absolutePath}")
|
||||
// it.rebuild()
|
||||
}.sortedByDescending { it.getLastModifiedTime() }
|
||||
val filteringResults = arrayListOf<List<DiskSkimmer>>()
|
||||
worldsDirLs.forEach {
|
||||
val li = arrayListOf(it)
|
||||
listOf(".1",".2",".3",".a",".b",".c").forEach { suffix ->
|
||||
val file = File(it.diskFile.absolutePath + suffix)
|
||||
try {
|
||||
val d = DiskSkimmer(file, true)
|
||||
li.add(d)
|
||||
}
|
||||
catch (e: Throwable) {}
|
||||
}
|
||||
filteringResults.add(li)
|
||||
}
|
||||
filteringResults.forEachIndexed { index, list ->
|
||||
val it = list.first()
|
||||
printdbg("ListSavegames", " ${index+1}.\t${it.diskFile.absolutePath}")
|
||||
|
||||
// val jsonFile = it.getFile(SAVEGAMEINFO)!!
|
||||
// var worldUUID: UUID? = null
|
||||
// JsonFetcher.readFromJsonString(ByteArray64Reader(jsonFile.bytes, Common.CHARSET)).forEachSiblings { name, value ->
|
||||
// if (name == "worldIndex") worldUUID = UUID.fromString(value.asString())
|
||||
// }
|
||||
|
||||
val collection = SavegameCollection.collectFromBaseFilename(File(worldsDir), it.diskFile.name)
|
||||
printdbg("ListSavegames", " collecting...")
|
||||
val collection = SavegameCollection.collectFromBaseFilename(list, it.diskFile.name)
|
||||
printdbg("ListSavegames", " get UUID...")
|
||||
val worldUUID = collection.getUUID()
|
||||
|
||||
printdbg("ListSavegames", " registration...")
|
||||
// if multiple valid savegames with same UUID exist, only the most recent one is retained
|
||||
if (!App.savegameWorlds.contains(worldUUID)) {
|
||||
App.savegameWorlds[worldUUID] = collection
|
||||
@@ -821,32 +831,41 @@ fun AppUpdateListOfSavegames() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
println("Listing saved players...")
|
||||
|
||||
// create list of players
|
||||
File(playersDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
|
||||
printdbg("ListSavegames", "Listing saved players...")
|
||||
val playersDirLs = File(playersDir).listFiles().filter { !it.isDirectory && !it.name.contains('.') }.mapNotNull { file ->
|
||||
try {
|
||||
DiskSkimmer(file, true)
|
||||
}
|
||||
catch (e: Throwable) {
|
||||
System.err.println("Unable to load a player file ${file.absolutePath}")
|
||||
System.err.println("Unable to load a world file ${file.absolutePath}")
|
||||
e.printStackTrace()
|
||||
null
|
||||
}
|
||||
}.sortedByDescending { it.getLastModifiedTime() }.forEachIndexed { index, it ->
|
||||
println("${index+1}.\t${it.diskFile.absolutePath}")
|
||||
// it.rebuild()
|
||||
}.sortedByDescending { it.getLastModifiedTime() }
|
||||
val filteringResults2 = arrayListOf<List<DiskSkimmer>>()
|
||||
playersDirLs.forEach {
|
||||
val li = arrayListOf(it)
|
||||
listOf(".1",".2",".3",".a",".b",".c").forEach { suffix ->
|
||||
val file = File(it.diskFile.absolutePath + suffix)
|
||||
try {
|
||||
val d = DiskSkimmer(file, true)
|
||||
li.add(d)
|
||||
}
|
||||
catch (e: Throwable) {}
|
||||
}
|
||||
filteringResults2.add(li)
|
||||
}
|
||||
filteringResults2.forEachIndexed { index, list ->
|
||||
val it = list.first()
|
||||
printdbg("ListSavegames", " ${index+1}.\t${it.diskFile.absolutePath}")
|
||||
|
||||
// val jsonFile = it.getFile(SAVEGAMEINFO)!!
|
||||
// var playerUUID: UUID? = null
|
||||
// JsonFetcher.readFromJsonString(ByteArray64Reader(jsonFile.bytes, Common.CHARSET)).forEachSiblings { name, value ->
|
||||
// if (name == "uuid") playerUUID = UUID.fromString(value.asString())
|
||||
// }
|
||||
|
||||
val collection = SavegameCollection.collectFromBaseFilename(File(playersDir), it.diskFile.name)
|
||||
printdbg("ListSavegames", " collecting...")
|
||||
val collection = SavegameCollection.collectFromBaseFilename(list, it.diskFile.name)
|
||||
printdbg("ListSavegames", " get UUID...")
|
||||
val playerUUID = collection.getUUID()
|
||||
|
||||
printdbg("ListSavegames", " registration...")
|
||||
// if multiple valid savegames with same UUID exist, only the most recent one is retained
|
||||
if (!App.savegamePlayers.contains(playerUUID)) {
|
||||
App.savegamePlayers[playerUUID] = collection
|
||||
|
||||
@@ -45,6 +45,8 @@ fun main() {
|
||||
|
||||
// write pixels
|
||||
for (gammaPair in 0..1) {
|
||||
val gamma = if (gammaPair == 0) HALF_PI else 3* HALF_PI
|
||||
|
||||
for (albedo0 in 0 until Skybox.albedoCnt) {
|
||||
val albedo = Skybox.albedos[albedo0]
|
||||
println("Albedo=$albedo")
|
||||
@@ -74,9 +76,9 @@ fun main() {
|
||||
// println("$yp\t$theta")
|
||||
|
||||
val xyz = CIEXYZ(
|
||||
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, HALF_PI, 0).toFloat(),
|
||||
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, HALF_PI, 1).toFloat(),
|
||||
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, HALF_PI, 2).toFloat()
|
||||
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, gamma, 0).toFloat(),
|
||||
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, gamma, 1).toFloat(),
|
||||
ArHosekSkyModel.arhosek_tristim_skymodel_radiance(state, theta, gamma, 2).toFloat()
|
||||
)
|
||||
val xyz2 = xyz.scaleToFit(elevationDeg)
|
||||
val rgb = xyz2.toRGB().toColor()
|
||||
|
||||
@@ -520,7 +520,10 @@ class UIItemPlayerCells(
|
||||
private val isImported: Boolean
|
||||
|
||||
init {
|
||||
App.savegamePlayers[playerUUID]!!.loadable().getFile(SAVEGAMEINFO)?.bytes?.let {
|
||||
val loadable = App.savegamePlayers[playerUUID]!!.loadable()
|
||||
printdbg(this, "UUID: ${playerUUID}")
|
||||
printdbg(this, "File: ${loadable.diskFile.absolutePath}")
|
||||
loadable.getFile(SAVEGAMEINFO)?.bytes?.let {
|
||||
var lastPlayTime0 = 0L
|
||||
|
||||
JsonFetcher.readFromJsonString(ByteArray64Reader(it, Common.CHARSET)).forEachSiblings { name, value ->
|
||||
@@ -536,7 +539,7 @@ class UIItemPlayerCells(
|
||||
.atZone(TimeZone.getDefault().toZoneId())
|
||||
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
|
||||
|
||||
}
|
||||
} ?: throw Error("SAVEGAMEINFO not found on Skimmer:${loadable.diskFile}")
|
||||
|
||||
val savegamePair = SavegameCollectionPair(App.savegamePlayers[playerUUID], App.savegameWorlds[worldUUID])
|
||||
savegameStatus = savegamePair.status
|
||||
|
||||
Reference in New Issue
Block a user