two getthumbnail funs merget into one

This commit is contained in:
minjaesong
2023-07-11 19:52:56 +09:00
parent 64e05a4f17
commit 173f99f87d
6 changed files with 62 additions and 44 deletions

View File

@@ -106,32 +106,38 @@ class SavegameCollection(files0: List<DiskSkimmer>) {
} }
} }
private fun getThumbnail0(vid: EntryID, width: Int, height: Int, shrinkage: Double): TextureRegion? { fun getThumbnail(width: Int, height: Int, shrinkage: Double) = this.loadable().getThumbnail(width, height, shrinkage)
return this.loadable().requestFile(vid).let { file -> }
if (file != null) {
val zippedTga = (file.contents as EntryFile).bytes fun DiskSkimmer.getTgaGz(vid: EntryID, width: Int, height: Int, shrinkage: Double): TextureRegion? {
val gzin = GZIPInputStream(ByteArray64InputStream(zippedTga)) return this.requestFile(vid).let { file ->
val tgaFileContents = gzin.readAllBytes(); gzin.close() if (file != null) {
val pixmap = Pixmap(tgaFileContents, 0, tgaFileContents.size) val zippedTga = (file.contents as EntryFile).bytes
TextureRegion(Texture(pixmap)).also { val gzin = GZIPInputStream(ByteArray64InputStream(zippedTga))
App.disposables.add(it.texture) val tgaFileContents = gzin.readAllBytes(); gzin.close()
// do cropping and resizing val pixmap = Pixmap(tgaFileContents, 0, tgaFileContents.size)
it.setRegion( TextureRegion(Texture(pixmap)).also {
((pixmap.width - width*2) / shrinkage).roundToInt(), App.disposables.add(it.texture)
((pixmap.height - height*2) / shrinkage).roundToInt(), // do cropping and resizing
(width * shrinkage).roundToInt(), it.setRegion(
(height * shrinkage).roundToInt() ((pixmap.width - width*2) / shrinkage).roundToInt(),
) ((pixmap.height - height*2) / shrinkage).roundToInt(),
} (width * shrinkage).roundToInt(),
} (height * shrinkage).roundToInt()
else { )
null
} }
} }
else {
null
}
} }
fun getPlayerThumbnail(width: Int, height: Int, shrinkage: Double) = getThumbnail0(PLAYER_SCREENSHOT, width, height, shrinkage)
fun getWorldThumbnail(width: Int, height: Int, shrinkage: Double) = getThumbnail0(WORLD_SCREENSHOT, width, height, shrinkage)
} }
fun DiskSkimmer.getThumbnail(width: Int, height: Int, shrinkage: Double) =
when (this.getSaveKind()) {
1 -> this.getTgaGz(PLAYER_SCREENSHOT, width, height, shrinkage)
2 -> this.getTgaGz(WORLD_SCREENSHOT, width, height, shrinkage)
else -> throw IllegalArgumentException("Unknown save kind: ${this.getSaveKind()}")
}
class SavegameCollectionPair(private val player: SavegameCollection?, private val world: SavegameCollection?) { class SavegameCollectionPair(private val player: SavegameCollection?, private val world: SavegameCollection?) {

View File

@@ -862,27 +862,27 @@ object IngameRenderer : Disposable {
} }
override fun dispose() { override fun dispose() {
blurWriteQuad.tryDispose() if (::blurWriteQuad.isInitialized) blurWriteQuad.tryDispose()
blurWriteQuad2.tryDispose() if (::blurWriteQuad2.isInitialized) blurWriteQuad2.tryDispose()
//blurWriteQuad4.tryDispose() //if (::blurWriteQuad4.isInitialized) blurWriteQuad4.tryDispose()
fboRGB.tryDispose() if (::fboRGB.isInitialized) fboRGB.tryDispose()
fboA.tryDispose() if (::fboA.isInitialized) fboA.tryDispose()
fboRGB_lightMixed.tryDispose() if (::fboRGB_lightMixed.isInitialized) fboRGB_lightMixed.tryDispose()
fboA_lightMixed.tryDispose() if (::fboA_lightMixed.isInitialized) fboA_lightMixed.tryDispose()
fboMixedOut.tryDispose() if (::fboMixedOut.isInitialized) fboMixedOut.tryDispose()
lightmapFbo.tryDispose() if (::lightmapFbo.isInitialized) lightmapFbo.tryDispose()
blurtex0.tryDispose() blurtex0.tryDispose()
fboBlurHalf.tryDispose() if (::fboBlurHalf.isInitialized) fboBlurHalf.tryDispose()
//fboBlurQuarter.tryDispose() //if (::fboBlurQuarter.isInitialized) fboBlurQuarter.tryDispose()
LightmapRenderer.dispose() LightmapRenderer.dispose()
BlocksDrawer.dispose() BlocksDrawer.dispose()
WeatherMixer.dispose() WeatherMixer.dispose()
batch.tryDispose() if (::batch.isInitialized) batch.tryDispose()
shaderBlur.dispose() shaderBlur.dispose()
@@ -896,7 +896,7 @@ object IngameRenderer : Disposable {
shaderForActors.dispose() shaderForActors.dispose()
shaderDemultiply.dispose() shaderDemultiply.dispose()
fboRGBexport.tryDispose() if (::fboRGBexport.isInitialized) fboRGBexport.tryDispose()
} }
private fun worldCamToRenderPos(): Pair<Float, Float> { private fun worldCamToRenderPos(): Pair<Float, Float> {

View File

@@ -45,6 +45,8 @@ import kotlin.math.roundToInt
val SAVE_CELL_WIDTH = 480 val SAVE_CELL_WIDTH = 480
val SAVE_CELL_HEIGHT = 120 val SAVE_CELL_HEIGHT = 120
val SAVE_THUMBNAIL_MAIN_WIDTH = 480
val SAVE_THUMBNAIL_MAIN_HEIGHT = 320
/** /**
* The pinnacle of the dirty coding! This object exists only because I couldn't make * The pinnacle of the dirty coding! This object exists only because I couldn't make
@@ -485,10 +487,11 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : Advanceable() {
class UIItemPlayerCells( class UIItemPlayerCells(
parent: Advanceable, parent: Advanceable,
initialX: Int, initialX: Int,
initialY: Int, initialY: Int,
val playerUUID: UUID) : UIItem(parent, initialX, initialY) { val playerUUID: UUID,
) : UIItem(parent, initialX, initialY) {
override val width = SAVE_CELL_WIDTH override val width = SAVE_CELL_WIDTH
override val height = SAVE_CELL_HEIGHT override val height = SAVE_CELL_HEIGHT
@@ -528,7 +531,8 @@ class UIItemPlayerCells(
} }
savegameStatus = SavegameCollectionPair(App.savegamePlayers[playerUUID], App.savegameWorlds[worldUUID]).status val savegamePair = SavegameCollectionPair(App.savegamePlayers[playerUUID], App.savegameWorlds[worldUUID])
savegameStatus = savegamePair.status
} }
private fun parseDuration(seconds: Long): String { private fun parseDuration(seconds: Long): String {

View File

@@ -123,14 +123,14 @@ class UILoadManage(val full: UILoadSavegame) : UICanvas() {
} }
private var screencap: TextureRegion? = null private var screencap: TextureRegion? = null
private val screencapW = SAVE_CELL_WIDTH private val screencapW = SAVE_THUMBNAIL_MAIN_WIDTH
private val screencapH = SAVE_CELL_HEIGHT * 2 private val screencapH = SAVE_THUMBNAIL_MAIN_HEIGHT
override fun doOpening(delta: Float) { override fun doOpening(delta: Float) {
full.playerButtonSelected?.forceUnhighlight = true full.playerButtonSelected?.forceUnhighlight = true
full.playerButtonSelected?.let { button -> full.playerButtonSelected?.let { button ->
screencap?.texture?.tryDispose() screencap?.texture?.tryDispose()
screencap = App.savegamePlayers[button.playerUUID]!!.getPlayerThumbnail(screencapW, screencapH, 2.0) screencap = App.savegamePlayers[button.playerUUID]!!.getThumbnail(screencapW, screencapH, 2.0)
} }
} }

View File

@@ -447,12 +447,20 @@ removefile:
fa.close() fa.close()
} }
/**
* @return Save type (0b 0000 00ab)
* b: unset - full save; set - quicksave (only applicable to worlds -- quicksave just means the disk is in dirty state)
* a: set - generated by autosave
*/
fun getSaveMode(): Int { fun getSaveMode(): Int {
val fa = RandomAccessFile(diskFile, "rwd") val fa = RandomAccessFile(diskFile, "rwd")
fa.seek(49L) fa.seek(49L)
return fa.read().also { fa.close() } return fa.read().also { fa.close() }
} }
/**
* @return 1 if the savegame is player data, 2 if the savegame is world data, 0 otherwise
*/
fun getSaveKind(): Int { fun getSaveKind(): Int {
val fa = RandomAccessFile(diskFile, "rwd") val fa = RandomAccessFile(diskFile, "rwd")
fa.seek(50L) fa.seek(50L)

View File

@@ -62,7 +62,7 @@ class UIAutosaveNotifier : UICanvas() {
} }
else { else {
batch.color = errorCol batch.color = errorCol
batch.draw(spinner.get(0,4), offX, offY) batch.draw(spinner.get(0,4), offX, offY + 2f)
} }
batch.color = if (errored) errorCol else normalCol batch.color = if (errored) errorCol else normalCol
App.fontGame.draw(batch, text, offX + 30f, offY - 2f) App.fontGame.draw(batch, text, offX + 30f, offY - 2f)