From 7c8baa151f1ad61e90ac107ca1c88c23fe413584 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 20 Feb 2026 10:39:53 +0900 Subject: [PATCH] asset archiving wip --- .../Terrarum__no_prebuild_.xml | 15 ++++ lib/TerranVirtualDisk-src.jar | 4 +- lib/TerranVirtualDisk.jar | 4 +- src/net/torvald/terrarum/App.java | 6 +- .../torvald/terrarum/AssetArchiveBuilder.kt | 70 ++++++++++++++++--- src/net/torvald/terrarum/AssetCache.kt | 12 +++- src/net/torvald/terrarum/ClustfileHandle.kt | 2 + src/net/torvald/terrarum/ColorLimiterTest.kt | 4 +- .../torvald/terrarum/CommonResourcePool.kt | 8 +-- src/net/torvald/terrarum/GlslTilingTest.kt | 8 +-- src/net/torvald/terrarum/ModMgr.kt | 2 +- .../torvald/terrarum/MusicComposerApp.java | 2 +- src/net/torvald/terrarum/SanicLoadScreen.kt | 4 +- src/net/torvald/terrarum/ShitOnGlsl.kt | 8 +-- .../torvald/terrarum/TerrarumPostProcessor.kt | 6 +- src/net/torvald/terrarum/TestTestTest.kt | 4 +- .../torvald/terrarum/TexRegionTilingTest.kt | 2 +- .../torvald/terrarum/gamecontroller/IME.kt | 5 +- .../gamecontroller/IMEProviderDelegate.kt | 3 +- .../torvald/terrarum/imagefont/BigAlphNum.kt | 3 +- .../torvald/terrarum/imagefont/TinyAlphNum.kt | 5 +- src/net/torvald/terrarum/langpack/Lang.kt | 7 +- .../terrarum/modulebasegame/TitleScreen.kt | 6 +- .../modulebasegame/console/MusicTest.kt | 3 +- .../modulebasegame/gameitems/ItemTapestry.kt | 3 +- .../modulebasegame/imagefont/NewRunes.kt | 3 +- .../modulebasegame/ui/ControlPanelCommon.kt | 5 +- .../modulebasegame/ui/ItemSlotImageFactory.kt | 3 +- .../modulebasegame/ui/MessageWindow.kt | 4 +- .../terrarum/modulebasegame/ui/UIInventory.kt | 4 +- .../ui/UIItemInventoryCellBase.kt | 3 +- .../ui/UIItemInventoryItemGrid.kt | 4 +- .../modulebasegame/ui/UILoadDemoSavefiles.kt | 4 +- .../terrarum/modulebasegame/ui/UILoadList.kt | 2 +- .../modulebasegame/ui/UILoadSavegame.kt | 4 +- .../modulebasegame/ui/UIProxyNewBTeXTest.kt | 4 +- .../spriteassembler/AssembleSheetPixmap.kt | 3 +- src/net/torvald/terrarum/tests/BTeXTest.kt | 5 +- .../torvald/terrarum/tests/ColorMapTest.kt | 3 +- .../terrarum/tests/SurroundPannerTest.kt | 5 +- .../terrarum/tests/WorldgenNoiseSandbox.kt | 2 +- .../terrarum/ui/BasicDebugInfoWindow.kt | 6 +- src/net/torvald/terrarum/ui/Toolkit.kt | 10 +-- .../torvald/terrarum/ui/UIItemConfigKeycap.kt | 3 +- .../terrarum/ui/UIItemRedeemCodeArea.kt | 3 +- .../torvald/terrarum/ui/UIItemToggleButton.kt | 3 +- .../terrarum/weather/SkyboxModelHosek.kt | 3 +- .../torvald/terrarum/weather/WeatherMixer.kt | 4 +- .../terrarum/worlddrawer/CreateTileAtlas.kt | 8 +-- 49 files changed, 193 insertions(+), 101 deletions(-) create mode 100644 .idea/runConfigurations/Terrarum__no_prebuild_.xml diff --git a/.idea/runConfigurations/Terrarum__no_prebuild_.xml b/.idea/runConfigurations/Terrarum__no_prebuild_.xml new file mode 100644 index 000000000..f90cc3abb --- /dev/null +++ b/.idea/runConfigurations/Terrarum__no_prebuild_.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/lib/TerranVirtualDisk-src.jar b/lib/TerranVirtualDisk-src.jar index d8afa5418..4c0e9ff83 100644 --- a/lib/TerranVirtualDisk-src.jar +++ b/lib/TerranVirtualDisk-src.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5148d00a56a7decfcc4ef561fbbb38ad410af8234bc366e5cd5d3c2ffcacf58 -size 93607 +oid sha256:5d0935b809cf0ede65dc728656b37017a3053f75b84e5d4202b4b8f74bcfb76b +size 93953 diff --git a/lib/TerranVirtualDisk.jar b/lib/TerranVirtualDisk.jar index 628638663..0328d411e 100644 --- a/lib/TerranVirtualDisk.jar +++ b/lib/TerranVirtualDisk.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce9fa6de2159931cb6251f150c559a5e90607bf04165da439cb6f5792af182d7 -size 5095118 +oid sha256:e8b882af1cf3e90f3fb13cc22a2001290930ef2efeb43e005f8b5320e85f810d +size 5095718 diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index 3bd73f6f8..93ab0b7df 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -629,7 +629,7 @@ public class App implements ApplicationListener { // make loading list CommonResourcePool.INSTANCE.loadAll(); - newTempFile("wenquanyi.tga"); // temp file required by the font +// newTempFile("wenquanyi.tga"); // temp file required by the font // set basis of draw @@ -1992,8 +1992,8 @@ public class App implements ApplicationListener { } public static ShaderProgram loadShaderFromFile(String vert, String frag) { - String v = Gdx.files.internal(vert).readString("utf-8"); - String f = Gdx.files.internal(frag).readString("utf-8"); + String v = AssetCache.INSTANCE.getFileHandle(vert).readString("utf-8"); + String f = AssetCache.INSTANCE.getFileHandle(frag).readString("utf-8"); return loadShaderInline(v, f); } diff --git a/src/net/torvald/terrarum/AssetArchiveBuilder.kt b/src/net/torvald/terrarum/AssetArchiveBuilder.kt index 08a108c52..dfe4a4775 100644 --- a/src/net/torvald/terrarum/AssetArchiveBuilder.kt +++ b/src/net/torvald/terrarum/AssetArchiveBuilder.kt @@ -8,6 +8,8 @@ import java.io.File * Build-time tool that creates assets.tevd from assets_release/ directory. * * Usage: java -cp net.torvald.terrarum.AssetArchiveBuilderKt [assets_release_dir] [output_file] + * + * Created by minjaesong on 2026-02-19. */ fun main(args: Array) { val srcDir = File(if (args.isNotEmpty()) args[0] else "assets_release") @@ -24,21 +26,35 @@ fun main(args: Array) { println("Scanning $srcDir...") var totalSize = 0L var fileCount = 0 - srcDir.walkTopDown().filter { it.isFile }.forEach { - totalSize += it.length() - fileCount++ + var dirCount = 0 + srcDir.walkTopDown().forEach { + if (it.isFile) { + totalSize += it.length() + fileCount++ + } else if (it.isDirectory && it != srcDir) { + dirCount++ + } } - // Calculate capacity in sectors (4096 bytes per sector/cluster) - // Add overhead for FAT entries and directory structures + // Calculate capacity in sectors (4096 bytes per cluster) + // Each file uses at least 1 cluster regardless of size + // Each directory also needs a FAT entry and cluster(s) for its directory listing + // FAT entries are 256 bytes each; each cluster holds 16 FAT entries val clusterSize = ClusteredFormatDOM.CLUSTER_SIZE + val totalEntries = fileCount + dirCount + // Sectors for actual file data (each file rounds up to whole clusters) val sectorsForData = (totalSize + clusterSize - 1) / clusterSize - // Add ~25% overhead for FAT, directory entries, and slack space - val capacityInSectors = ((sectorsForData * 1.25) + fileCount + 256).toLong() + // Each entry (file or dir) needs at least 1 sector, plus FAT overhead + // FAT entries: 256 bytes each, so totalEntries * 256 / 4096 sectors for FAT + val sectorsForFAT = (totalEntries.toLong() * ClusteredFormatDOM.FAT_ENTRY_SIZE + clusterSize - 1) / clusterSize + // Directory listings: each dir needs cluster(s) to store its child entries + val sectorsForDirs = dirCount.toLong() + // Total with generous margin (50% on data + fixed overhead) + val capacityInSectors = ((sectorsForData * 1.5) + sectorsForFAT + sectorsForDirs + totalEntries + 512).toLong() .coerceAtMost(ClusteredFormatDOM.MAX_CAPA_IN_SECTORS.toLong()) .toInt() - println(" Files: $fileCount") + println(" Files: $fileCount, Directories: $dirCount") println(" Total size: ${totalSize / 1024} KB") println(" Allocating $capacityInSectors sectors...") @@ -46,14 +62,46 @@ fun main(args: Array) { val diskArchive = ClusteredFormatDOM.createNewArchive(outFile, Charsets.UTF_8, "Terrarum Assets", capacityInSectors) val dom = ClusteredFormatDOM(diskArchive) + // Pre-grow the FAT area to avoid growFAT/renum being triggered mid-import. + // Initial FAT is 2 clusters (32 entries). Each growFAT roughly doubles it. + // Each file/dir needs 1 FAT entry PLUS extended entries for inline data, long filenames, etc. + // Inline files need ~ceil(fileSize/248) extended entries; inline dirs need extended entries for listings. + // Conservative estimate: each entry needs ~3 FAT slots on average (1 head + 2 extended). + val neededFatClusters = (totalEntries * 3 + 20) / 16 + 4 + var estimatedFatClusters = 2 + var growthCount = 0 + while (estimatedFatClusters < neededFatClusters) { + estimatedFatClusters = 2 * estimatedFatClusters + 2 + growthCount++ + } + if (growthCount > 0) { + println(" Pre-growing FAT: $growthCount growth(s) -> ~$estimatedFatClusters FAT clusters (${estimatedFatClusters * 16} entries)...") + repeat(growthCount) { dom.growFAT() } + } + println("Importing files from ${srcDir.path}...") - val root = Clustfile(dom, "/") - root.importFrom(srcDir) + val children = srcDir.listFiles() ?: run { + System.err.println("Error: Could not list files in ${srcDir.path}") + System.exit(1) + return + } + var importedCount = 0 + for (child in children.sortedBy { it.name }) { + println(" Importing: ${child.name} (${if (child.isDirectory) "dir" else "${child.length()} bytes"})...") + val dest = Clustfile(dom, "/${child.name}") + val success = dest.importFrom(child) + if (!success) { + System.err.println("Warning: Failed to import ${child.name}") + } else { + importedCount++ + println(" Imported: ${child.name}") + } + } println("Trimming archive...") dom.trimArchive() dom.dispose() - println("Done. Output:") + println("Done. Imported $importedCount top-level entries. Output:") println(" ${outFile.path} (${outFile.length() / 1024} KB, $fileCount files)") } diff --git a/src/net/torvald/terrarum/AssetCache.kt b/src/net/torvald/terrarum/AssetCache.kt index a8d703a28..286f7641a 100644 --- a/src/net/torvald/terrarum/AssetCache.kt +++ b/src/net/torvald/terrarum/AssetCache.kt @@ -5,12 +5,17 @@ import com.badlogic.gdx.files.FileHandle import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.archivers.ClusteredFormatDOM import net.torvald.terrarum.modulecomputers.virtualcomputer.tvd.archivers.Clustfile import java.io.File +import java.io.FileNotFoundException import java.io.RandomAccessFile /** - * Central accessor for the TerranVirtualDisk asset archive. + * Central accessor for the game assets. * In distribution mode, assets are read directly from assets.tevd. * In development mode, assets are read from the local ./assets/ directory. + * + * Never call `gdx.files.internal` directly! + * + * Created by minjaesong on 2026-02-19. */ object AssetCache { @@ -39,7 +44,10 @@ object AssetCache { */ fun getClustfile(relativePath: String): Clustfile { val path = if (relativePath.startsWith("/")) relativePath else "/$relativePath" - return Clustfile(dom!!, path) + return Clustfile(dom!!, path).let { + if (!it.exists()) throw FileNotFoundException("Clustfile not exists: /$relativePath") + else it + } } /** diff --git a/src/net/torvald/terrarum/ClustfileHandle.kt b/src/net/torvald/terrarum/ClustfileHandle.kt index 9b55c3eab..1102fe794 100644 --- a/src/net/torvald/terrarum/ClustfileHandle.kt +++ b/src/net/torvald/terrarum/ClustfileHandle.kt @@ -9,6 +9,8 @@ import java.io.InputStream /** * A GDX FileHandle backed by a Clustfile from TerranVirtualDisk. * Allows transparent asset loading from .tevd archives using all standard GDX APIs. + * + * Created by minjaesong on 2026-02-19. */ class ClustfileHandle(private val clustfile: Clustfile) : FileHandle() { diff --git a/src/net/torvald/terrarum/ColorLimiterTest.kt b/src/net/torvald/terrarum/ColorLimiterTest.kt index e4fbd5262..e2b2bee91 100644 --- a/src/net/torvald/terrarum/ColorLimiterTest.kt +++ b/src/net/torvald/terrarum/ColorLimiterTest.kt @@ -38,7 +38,7 @@ object ColorLimiterTest : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - shader4096 = ShaderProgram(Gdx.files.internal("assets/shaders/default.vert"), Gdx.files.internal("assets/shaders/postproc_dither.frag")) + shader4096 = ShaderProgram(AssetCache.getFileHandle("shaders/default.vert"), AssetCache.getFileHandle("shaders/postproc_dither.frag")) shader4096.bind() shader4096.setUniformf("rcount", 4f) shader4096.setUniformf("gcount", 4f) @@ -50,7 +50,7 @@ object ColorLimiterTest : ApplicationAdapter() { batch = SpriteBatch() shapeRenderer = App.makeShapeRenderer() - font = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap") + font = TerrarumSansBitmap() if (!shader4096.isCompiled) { diff --git a/src/net/torvald/terrarum/CommonResourcePool.kt b/src/net/torvald/terrarum/CommonResourcePool.kt index 17f18ce14..16b3c3ac5 100644 --- a/src/net/torvald/terrarum/CommonResourcePool.kt +++ b/src/net/torvald/terrarum/CommonResourcePool.kt @@ -22,16 +22,16 @@ object CommonResourcePool { init { addToLoadingList("itemplaceholder_16") { - TextureRegion(Texture("assets/item_kari_16.tga")).also { it.flip(false, false) } + TextureRegion(Texture(AssetCache.getFileHandle("item_kari_16.tga"))).also { it.flip(false, false) } } addToLoadingList("itemplaceholder_24") { - TextureRegion(Texture("assets/item_kari_24.tga")).also { it.flip(false, false) } + TextureRegion(Texture(AssetCache.getFileHandle("item_kari_24.tga"))).also { it.flip(false, false) } } addToLoadingList("itemplaceholder_32") { - TextureRegion(Texture("assets/item_kari_32.tga")).also { it.flip(false, false) } + TextureRegion(Texture(AssetCache.getFileHandle("item_kari_32.tga"))).also { it.flip(false, false) } } addToLoadingList("itemplaceholder_48") { - TextureRegion(Texture("assets/item_kari_48.tga")).also { it.flip(false, false) } + TextureRegion(Texture(AssetCache.getFileHandle("item_kari_48.tga"))).also { it.flip(false, false) } } /*addToLoadingList("test_texture") { TextureRegion(Texture("assets/test_texture.tga")).also { it.flip(false, false) } diff --git a/src/net/torvald/terrarum/GlslTilingTest.kt b/src/net/torvald/terrarum/GlslTilingTest.kt index 1c6d36ee5..5f25596da 100644 --- a/src/net/torvald/terrarum/GlslTilingTest.kt +++ b/src/net/torvald/terrarum/GlslTilingTest.kt @@ -47,10 +47,10 @@ object GlslTilingTest : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - shader = ShaderProgram(Gdx.files.internal("assets/shaders/default.vert"), Gdx.files.internal("assets/shaders/tiling.frag")) + shader = ShaderProgram(AssetCache.getFileHandle("shaders/default.vert"), AssetCache.getFileHandle("shaders/tiling.frag")) - font = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap") + font = TerrarumSansBitmap() if (!shader.isCompiled) { @@ -93,9 +93,9 @@ object GlslTilingTest : ApplicationAdapter() { batch = SpriteBatch() - fucktex = Texture(Gdx.files.internal("assets/graphics/ortho_line_tex_2px.tga")) + fucktex = Texture(AssetCache.getFileHandle("graphics/ortho_line_tex_2px.tga")) - tileAtlas = Texture(Gdx.files.internal("assets/terrain.tga"))//BlocksDrawer.tilesTerrain.texture + tileAtlas = Texture(AssetCache.getFileHandle("terrain.tga"))//BlocksDrawer.tilesTerrain.texture println(tilesBuffer.format) diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 363db83b6..d0349b9f1 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -168,7 +168,7 @@ object ModMgr { AssetCache.getFileHandle("mods/$moduleName/$metaFilename").exists() else File("$modDirInternal/$moduleName/$metaFilename").exists() - val isInternal = if (_externalFile.exists()) false else if (internalExists) true else throw FileNotFoundException() + val isInternal = if (_externalFile.exists()) false else if (internalExists) true else throw FileNotFoundException("mods/$moduleName/$metaFilename") val modDir = if (isInternal) modDirInternal else modDirExternal fun getGdxFileLocal(path: String) = if (isInternal) { diff --git a/src/net/torvald/terrarum/MusicComposerApp.java b/src/net/torvald/terrarum/MusicComposerApp.java index 4c3b8549a..8cb3b7188 100644 --- a/src/net/torvald/terrarum/MusicComposerApp.java +++ b/src/net/torvald/terrarum/MusicComposerApp.java @@ -34,7 +34,7 @@ public class MusicComposerApp extends ApplicationAdapter { @Override public void create() { - fontGame = new TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap", false, true, false); + fontGame = new TerrarumSansBitmap(false, true, false); } @Override diff --git a/src/net/torvald/terrarum/SanicLoadScreen.kt b/src/net/torvald/terrarum/SanicLoadScreen.kt index aba27c9c6..e86616c5d 100644 --- a/src/net/torvald/terrarum/SanicLoadScreen.kt +++ b/src/net/torvald/terrarum/SanicLoadScreen.kt @@ -55,10 +55,10 @@ object SanicLoadScreen : LoadScreenBase() { false ) - arrowObjTex = Texture(Gdx.files.internal("assets/graphics/test_loading_arrow_atlas.tga")) + arrowObjTex = Texture(AssetCache.getFileHandle("graphics/test_loading_arrow_atlas.tga")) arrowObjGlideOffsetX = -arrowObjTex.width.toFloat() - textOverlayTex = Texture(Gdx.files.internal("assets/graphics/test_loading_text_tint.tga")) + textOverlayTex = Texture(AssetCache.getFileHandle("graphics/test_loading_text_tint.tga")) } diff --git a/src/net/torvald/terrarum/ShitOnGlsl.kt b/src/net/torvald/terrarum/ShitOnGlsl.kt index 8ef639ee9..bac4fb332 100644 --- a/src/net/torvald/terrarum/ShitOnGlsl.kt +++ b/src/net/torvald/terrarum/ShitOnGlsl.kt @@ -39,10 +39,10 @@ object ShitOnGlsl : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - shader = ShaderProgram(Gdx.files.internal("assets/shaders/default.vert"), Gdx.files.internal("assets/shaders/crt.frag")) + shader = ShaderProgram(AssetCache.getFileHandle("shaders/default.vert"), AssetCache.getFileHandle("shaders/crt.frag")) - font = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap") + font = TerrarumSansBitmap() if (!shader.isCompiled) { @@ -75,8 +75,8 @@ object ShitOnGlsl : ApplicationAdapter() { batch = SpriteBatch() - fucktex = Texture(Gdx.files.internal("assets/graphics/ortho_line_tex_2px.tga")) - testTex = Texture(Gdx.files.internal("assets/test_texture.tga")) + fucktex = Texture(AssetCache.getFileHandle("graphics/ortho_line_tex_2px.tga")) + testTex = Texture(AssetCache.getFileHandle("test_texture.tga")) } diff --git a/src/net/torvald/terrarum/TerrarumPostProcessor.kt b/src/net/torvald/terrarum/TerrarumPostProcessor.kt index e3120a98b..7a3e6f704 100644 --- a/src/net/torvald/terrarum/TerrarumPostProcessor.kt +++ b/src/net/torvald/terrarum/TerrarumPostProcessor.kt @@ -37,7 +37,7 @@ object TerrarumPostProcessor : Disposable { private lateinit var outFBO: FrameBuffer fun reloadLUT(filename: String) { - lutTex = Texture(Gdx.files.internal("assets/clut/$filename")) + lutTex = Texture(AssetCache.getFileHandle("clut/$filename")) } private val defaultResCol = Color(0x66ffff66) @@ -48,9 +48,9 @@ object TerrarumPostProcessor : Disposable { internal val debugUI = BasicDebugInfoWindow() - private val functionRowHelper = Texture(Gdx.files.internal("assets/graphics/function_row_help.png")) + private val functionRowHelper = Texture(AssetCache.getFileHandle("graphics/function_row_help.png")) - private val batteryTex = TextureRegionPack(Gdx.files.internal("assets/graphics/gui/fullscreen_bat_ind.tga"), 23, 14) + private val batteryTex = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/fullscreen_bat_ind.tga"), 23, 14) private val shaderPostDither = ShaderMgr["postDither"] private val shaderPostNoDither = ShaderMgr["postNoDither"] diff --git a/src/net/torvald/terrarum/TestTestTest.kt b/src/net/torvald/terrarum/TestTestTest.kt index e01267d5e..4c429f613 100644 --- a/src/net/torvald/terrarum/TestTestTest.kt +++ b/src/net/torvald/terrarum/TestTestTest.kt @@ -50,7 +50,7 @@ class TestTestTest(val batch: SpriteBatch) : Screen { img = Texture("assets/test_texture.tga") - gameFont = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap") + gameFont = TerrarumSansBitmap() //gameFont = BitmapFont() @@ -196,7 +196,7 @@ object TestTestMain : ApplicationAdapter() { override fun create() { ShaderProgram.pedantic = false - blurShader = ShaderProgram(Gdx.files.internal("assets/shaders/blur.vert"), Gdx.files.internal("assets/shaders/blur.frag")) + blurShader = ShaderProgram(AssetCache.getFileHandle("shaders/blur.vert"), AssetCache.getFileHandle("shaders/blur.frag")) batch = SpriteBatch() diff --git a/src/net/torvald/terrarum/TexRegionTilingTest.kt b/src/net/torvald/terrarum/TexRegionTilingTest.kt index 9c42031d2..89ba5b504 100644 --- a/src/net/torvald/terrarum/TexRegionTilingTest.kt +++ b/src/net/torvald/terrarum/TexRegionTilingTest.kt @@ -60,7 +60,7 @@ object TexRegionTilingTest : ApplicationAdapter() { val gzTmpFName = listOf("tmp_terrain.tga", "tmp_wire.tga") // unzip GZIP temporarily gzFileList.forEachIndexed { index, filename -> - val terrainTexFile = Gdx.files.internal("assets/modules/basegame/" + filename) + val terrainTexFile = AssetCache.getFileHandle("modules/basegame/" + filename) val gzi = GZIPInputStream(terrainTexFile.read(8192)) val wholeFile = gzi.readBytes() gzi.close() diff --git a/src/net/torvald/terrarum/gamecontroller/IME.kt b/src/net/torvald/terrarum/gamecontroller/IME.kt index 1221f24f2..75399e532 100644 --- a/src/net/torvald/terrarum/gamecontroller/IME.kt +++ b/src/net/torvald/terrarum/gamecontroller/IME.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.App import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.AssetCache import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import java.io.File @@ -108,8 +109,8 @@ object IME { } - val iconSheet = TextureRegionPack("assets/graphics/gui/ime_icons_by_language.tga", 20, 20) - val iconPixmap = Pixmap(Gdx.files.internal("assets/graphics/gui/ime_icons_by_language.tga")) + val iconSheet = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/ime_icons_by_language.tga"), 20, 20) + val iconPixmap = Pixmap(AssetCache.getFileHandle("graphics/gui/ime_icons_by_language.tga")) for (k in 0 until iconPixmap.height step 20) { val langCode = StringBuilder() for (c in 0 until 20) { diff --git a/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt b/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt index 0cfb80173..cb1bac4cd 100644 --- a/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt +++ b/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt @@ -1,6 +1,7 @@ package net.torvald.terrarum.gamecontroller import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.AssetCache import net.torvald.util.SortedArrayList import org.graalvm.polyglot.HostAccess import java.io.File @@ -29,7 +30,7 @@ class IMEDictionary(private val filename: String) { private var dictLoaded = false private fun loadDict() { - val reader = FileReader(File("assets/keylayout/", filename), Charsets.UTF_8) + val reader = AssetCache.getFileHandle("keylayout/$filename").reader(Charsets.UTF_8.displayName()) reader.forEachLine { if (it.contains(',')) { val (key, value) = it.split(',') diff --git a/src/net/torvald/terrarum/imagefont/BigAlphNum.kt b/src/net/torvald/terrarum/imagefont/BigAlphNum.kt index 0c6562045..878386b20 100644 --- a/src/net/torvald/terrarum/imagefont/BigAlphNum.kt +++ b/src/net/torvald/terrarum/imagefont/BigAlphNum.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.Batch import com.badlogic.gdx.graphics.g2d.BitmapFont import com.badlogic.gdx.graphics.g2d.GlyphLayout +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.roundToFloat import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -15,7 +16,7 @@ object BigAlphNum : BitmapFont() { internal const val W = 12 internal const val H = 16 - internal val fontSheet = TextureRegionPack("./assets/graphics/fonts/code.tga", W, H) + internal val fontSheet = TextureRegionPack(AssetCache.getFileHandle("graphics/fonts/code.tga"), W, H) private const val interchar = 1 diff --git a/src/net/torvald/terrarum/imagefont/TinyAlphNum.kt b/src/net/torvald/terrarum/imagefont/TinyAlphNum.kt index 73eb86ab1..6d6ed4e75 100644 --- a/src/net/torvald/terrarum/imagefont/TinyAlphNum.kt +++ b/src/net/torvald/terrarum/imagefont/TinyAlphNum.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.g2d.Batch import com.badlogic.gdx.graphics.g2d.BitmapFont import com.badlogic.gdx.graphics.g2d.GlyphLayout +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.roundToFloat import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import kotlin.math.roundToInt @@ -18,8 +19,8 @@ object TinyAlphNum : BitmapFont() { internal const val W = 7 internal const val H = 13 - internal val fontSheet = TextureRegionPack("./assets/graphics/fonts/7x13_Tamzen7x14b.tga", W+1, H+1) - internal val fontPixmap = Pixmap(Gdx.files.internal("./assets/graphics/fonts/7x13_Tamzen7x14b.tga")) + internal val fontSheet = TextureRegionPack(AssetCache.getFileHandle("graphics/fonts/7x13_Tamzen7x14b.tga"), W+1, H+1) + internal val fontPixmap = Pixmap(AssetCache.getFileHandle("graphics/fonts/7x13_Tamzen7x14b.tga")) init { setOwnsTexture(true) diff --git a/src/net/torvald/terrarum/langpack/Lang.kt b/src/net/torvald/terrarum/langpack/Lang.kt index 1c19abe39..34db6a852 100644 --- a/src/net/torvald/terrarum/langpack/Lang.kt +++ b/src/net/torvald/terrarum/langpack/Lang.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.langpack import com.badlogic.gdx.files.FileHandle import net.torvald.terrarum.App import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.tail import net.torvald.terrarum.utils.JsonFetcher import net.torvald.unicode.getKeycapPC @@ -49,13 +50,13 @@ object Lang { init { // load base langs - load(File("./assets/locales/")) + load(AssetCache.getFileHandle("locales/")) } @JvmStatic operator fun invoke() { /* dummy method for manual initialisation */ } - fun load(localesDir: File) { + /*fun load(localesDir: File) { printdbg(this, "Loading languages from $localesDir") // get all of the languages installed @@ -81,7 +82,7 @@ object Lang { } } - } + }*/ fun load(localesHandle: FileHandle) { printdbg(this, "Loading languages from ${localesHandle.path()}") diff --git a/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt b/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt index c8bc4caeb..23929e683 100644 --- a/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt +++ b/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt @@ -149,8 +149,8 @@ class TitleScreen(batch: FlippingSpriteBatch) : IngameInstance(batch) { private lateinit var worldFBO: Float16FrameBuffer - private val warning32bitJavaIcon = TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/32_bit_warning.tga"))) - private val warningAppleRosettaIcon = TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/apple_rosetta_warning.tga"))) + private val warning32bitJavaIcon = TextureRegion(Texture(AssetCache.getFileHandle("graphics/gui/32_bit_warning.tga"))) + private val warningAppleRosettaIcon = TextureRegion(Texture(AssetCache.getFileHandle("graphics/gui/apple_rosetta_warning.tga"))) init { gameUpdateGovernor = ConsistentUpdateRate.also { it.reset() } @@ -219,7 +219,7 @@ class TitleScreen(batch: FlippingSpriteBatch) : IngameInstance(batch) { // load a half-gradient texture that would be used throughout the titlescreen and its sub UIs CommonResourcePool.addToLoadingList("title_halfgrad") { - Texture(Gdx.files.internal("./assets/graphics/halfgrad.tga")).also { + Texture(AssetCache.getFileHandle("graphics/halfgrad.tga")).also { it.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) } } diff --git a/src/net/torvald/terrarum/modulebasegame/console/MusicTest.kt b/src/net/torvald/terrarum/modulebasegame/console/MusicTest.kt index 76d13433e..b4bf7c8c5 100644 --- a/src/net/torvald/terrarum/modulebasegame/console/MusicTest.kt +++ b/src/net/torvald/terrarum/modulebasegame/console/MusicTest.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.console import com.badlogic.gdx.Gdx import com.badlogic.gdx.audio.Music +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.console.ConsoleCommand import net.torvald.terrarum.console.Echo @@ -35,7 +36,7 @@ internal object MusicTest : ConsoleCommand { File("./assets/sounds/test/${args[1]}").absoluteFile.toURI().toURL() ).playAsMusic(1f, 1f, false)*/ - music = Gdx.audio.newMusic(Gdx.files.internal("./assets/sounds/test/${args[1]}")) + music = Gdx.audio.newMusic(AssetCache.getFileHandle("sounds/test/${args[1]}")) music!!.play() } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt index fbe1dec14..2c476b0af 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemTapestry.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.modulebasegame.gameitems import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.gameitems.ItemID @@ -29,7 +30,7 @@ class ItemTapestry(originalID: ItemID) : FixtureItemBase(originalID, "net.torval @Transient override val makeFixture: (String) -> FixtureBase = { moduleName: String -> FixtureTapestry( // TODO use extra["fileRef"] (string) and extra["framingMaterial"] (string) - Gdx.files.internal("assets/monkey_island").readBytes(), + AssetCache.getFileHandle("monkey_island").readBytes(), Block.PLANK_NORMAL ) } diff --git a/src/net/torvald/terrarum/modulebasegame/imagefont/NewRunes.kt b/src/net/torvald/terrarum/modulebasegame/imagefont/NewRunes.kt index cc00a81f6..18546e732 100644 --- a/src/net/torvald/terrarum/modulebasegame/imagefont/NewRunes.kt +++ b/src/net/torvald/terrarum/modulebasegame/imagefont/NewRunes.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.modulebasegame.imagefont import com.badlogic.gdx.graphics.g2d.Batch import com.badlogic.gdx.graphics.g2d.BitmapFont import com.badlogic.gdx.graphics.g2d.GlyphLayout +import net.torvald.terrarum.AssetCache import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack /** @@ -22,7 +23,7 @@ class NewRunes : BitmapFont() { null - private val runes = TextureRegionPack("./assets/graphics/fonts/newrunes.tga", runeSize, runeSize) + private val runes = TextureRegionPack(AssetCache.getFileHandle("graphics/fonts/newrunes.tga"), runeSize, runeSize) var scale = 1 var linegap = 8 diff --git a/src/net/torvald/terrarum/modulebasegame/ui/ControlPanelCommon.kt b/src/net/torvald/terrarum/modulebasegame/ui/ControlPanelCommon.kt index e1d4ac7af..7ff8ad96b 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/ControlPanelCommon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/ControlPanelCommon.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion import net.torvald.terrarum.App +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.TerrarumScreenSize import net.torvald.terrarum.langpack.Lang @@ -22,10 +23,10 @@ object ControlPanelCommon { init { CommonResourcePool.addToLoadingList("gui_hrule") { - TextureRegionPack(Gdx.files.internal("assets/graphics/gui/hrule.tga"), 216, 20) + TextureRegionPack(AssetCache.getFileHandle("graphics/gui/hrule.tga"), 216, 20) } CommonResourcePool.addToLoadingList("gui_slider_horz_backdrop_contrast") { - TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/slider_background_contrast.tga")).also { + TextureRegion(Texture(AssetCache.getFileHandle("graphics/gui/slider_background_contrast.tga")).also { it.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) }) } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt b/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt index 979282c65..1dce69c73 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/ItemSlotImageFactory.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.toInt import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -28,7 +29,7 @@ object ItemSlotImageFactory { /** Blend mode: screen */ val CELLCOLOUR_BLACK_ACTIVE = Color(0x282828ff) - val slotImage = TextureRegionPack(Gdx.files.internal("./assets/graphics/gui/quickbar/item_slots_atlas2.tga"), TILE_WIDTH, TILE_HEIGHT) // must have same w/h as slotLarge + val slotImage = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/quickbar/item_slots_atlas2.tga"), TILE_WIDTH, TILE_HEIGHT) // must have same w/h as slotLarge fun produce(isBlack: Boolean, number: Int?, sprite: TextureRegion?): ItemSlotImage { return ItemSlotImage(slotImage.get(number ?: 10, 0 or isBlack.toInt().shl(1)), sprite) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/MessageWindow.kt b/src/net/torvald/terrarum/modulebasegame/ui/MessageWindow.kt index 8ac2988ed..8101aa7c2 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/MessageWindow.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/MessageWindow.kt @@ -67,7 +67,7 @@ package net.torvald.terrarum.modulebasegame.ui // will be disposed by Terrarum (application main instance) - val SEGMENT_BLACK = TextureRegionPack("assets/graphics/gui/message_black.tga", 8, 56) - val SEGMENT_WHITE = TextureRegionPack("assets/graphics/gui/message_white.tga", 8, 56) + val SEGMENT_BLACK = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/message_black.tga"), 8, 56) + val SEGMENT_WHITE = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/message_white.tga"), 8, 56) } }*/ diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventory.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventory.kt index 9205e2b8a..d894da363 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventory.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventory.kt @@ -76,7 +76,7 @@ package net.torvald.terrarum.modulebasegame.ui readFromLang = true, textAreaWidth = 100, defaultSelection = 0, - iconSpriteSheet = TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20), + iconSpriteSheet = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/inventory/category.tga"), 20, 20), iconSpriteSheetIndices = intArrayOf(9,6,7,1,0,2,3,4,5,8), iconCol = defaultTextColour, highlightBackCol = Color(0xb8b8b8_ff.toInt()), @@ -108,7 +108,7 @@ package net.torvald.terrarum.modulebasegame.ui private val scrollImageButtonAtlas = TextureRegionPack( - Gdx.files.internal("assets/graphics/gui/inventory/page_arrow_button.tga"), + AssetCache.getFileHandle("graphics/gui/inventory/page_arrow_button.tga"), 40, 54 ) private val scrollLeftButton = UIItemImageButton(this, diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryCellBase.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryCellBase.kt index 828860155..dc4f14511 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryCellBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryCellBase.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.GdxColorMap import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.ui.Toolkit @@ -86,7 +87,7 @@ abstract class UIItemInventoryCellBase( } object UIItemInventoryCellCommonRes { - val meterColourMap = GdxColorMap(Gdx.files.internal("./assets/clut/health_bar_colouring_4096.tga")) + val meterColourMap = GdxColorMap(AssetCache.getFileHandle("clut/health_bar_colouring_4096.tga")) val meterBackDarkening = Color(0x666666ff.toInt()) fun getHealthMeterColour(value: Float, start: Float, end: Float): Color { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt index d93aebef5..2cfcc1bb2 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt @@ -66,7 +66,7 @@ open class UIItemInventoryItemGrid( init { CommonResourcePool.addToLoadingList("inventory_walletnumberfont") { - TextureRegionPack("./assets/graphics/fonts/inventory_wallet_numbers.tga", 20, 9) + TextureRegionPack(AssetCache.getFileHandle("graphics/fonts/inventory_wallet_numbers.tga"), 20, 9) } CommonResourcePool.loadAll() } @@ -105,7 +105,7 @@ open class UIItemInventoryItemGrid( var inventorySortList = ArrayList() protected var rebuildList = true - protected val walletFont = TextureRegionPack("./assets/graphics/fonts/inventory_wallet_numbers.tga", 20, 9) + protected val walletFont = TextureRegionPack(AssetCache.getFileHandle("graphics/fonts/inventory_wallet_numbers.tga"), 20, 9) protected var walletText = "" diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt index 7bcb28279..d900261b7 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt @@ -103,10 +103,10 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : Advanceable() { init { CommonResourcePool.addToLoadingList("terrarum-defaultsavegamethumb") { - TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/savegame_thumb_placeholder.png"))) + TextureRegion(Texture(AssetCache.getFileHandle("graphics/gui/savegame_thumb_placeholder.png"))) } CommonResourcePool.addToLoadingList("savegame_status_icon") { - TextureRegionPack("assets/graphics/gui/savegame_status_icon.tga", 24, 24) + TextureRegionPack(AssetCache.getFileHandle("graphics/gui/savegame_status_icon.tga"), 24, 24) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadList.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadList.kt index 8f5bd06f1..5f4e89cd4 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadList.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadList.kt @@ -73,7 +73,7 @@ class UILoadList(val full: UILoadSavegame) : UICanvas() { init { CommonResourcePool.addToLoadingList("gradtile32") { - TextureRegionPack("assets/graphics/gui/gradtile32.tga", 1, 32) + TextureRegionPack(AssetCache.getFileHandle("graphics/gui/gradtile32.tga"), 1, 32) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt index b4d972842..d8c1c34ff 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt @@ -28,10 +28,10 @@ class UILoadSavegame(val remoCon: UIRemoCon) : Advanceable() { handler.allowESCtoClose = false CommonResourcePool.addToLoadingList("terrarum-defaultsavegamethumb") { - TextureRegion(Texture(Gdx.files.internal("assets/graphics/gui/savegame_thumb_placeholder.png"))) + TextureRegion(Texture(AssetCache.getFileHandle("graphics/gui/savegame_thumb_placeholder.png"))) } CommonResourcePool.addToLoadingList("savegame_status_icon") { - TextureRegionPack("assets/graphics/gui/savegame_status_icon.tga", 24, 24) + TextureRegionPack(AssetCache.getFileHandle("graphics/gui/savegame_status_icon.tga"), 24, 24) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIProxyNewBTeXTest.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIProxyNewBTeXTest.kt index b36169c6f..7bf30ce4a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIProxyNewBTeXTest.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIProxyNewBTeXTest.kt @@ -103,7 +103,7 @@ class BTeXTest(batch: FlippingSpriteBatch) : IngameInstance(batch) { Thread { try { measureTimeMillis { - val f = BTeXParser.invoke(Gdx.files.internal("./assets/mods/basegame/books/$filePath"), varMap, typesetProgress) + val f = BTeXParser.invoke(AssetCache.getFileHandle("mods/basegame/books/$filePath"), varMap, typesetProgress) document = f.first documentHandler = f.second }.also { @@ -130,7 +130,7 @@ class BTeXTest(batch: FlippingSpriteBatch) : IngameInstance(batch) { } else { measureTimeMillis { - document = BTeXDocument.fromFile(Gdx.files.internal("./assets/mods/basegame/books/$filePath")) + document = BTeXDocument.fromFile(AssetCache.getFileHandle("mods/basegame/books/$filePath")) }.also { println("Time spent on loading [ms]: $it") } diff --git a/src/net/torvald/terrarum/spriteassembler/AssembleSheetPixmap.kt b/src/net/torvald/terrarum/spriteassembler/AssembleSheetPixmap.kt index 6ec882a1a..be73db768 100644 --- a/src/net/torvald/terrarum/spriteassembler/AssembleSheetPixmap.kt +++ b/src/net/torvald/terrarum/spriteassembler/AssembleSheetPixmap.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.utils.GdxRuntimeException import net.torvald.terrarum.App +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.ItemCodex import net.torvald.terrarum.ReferencingRanges import net.torvald.terrarum.gameitems.GameItem @@ -34,7 +35,7 @@ object AssembleSheetPixmap { * The name of the Bodypart here may or may not be case-sensitive (depends on your actual filesystem -- NTFS, APFS, Ext4, ...) */ fun getAssetsDirFileGetter(properties: ADProperties): (String) -> InputStream? = { partName: String -> - val file = Gdx.files.internal("assets/${properties.toFilename(partName)}") + val file = AssetCache.getFileHandle("${properties.toFilename(partName)}") if (file.exists()) file.read() else null } diff --git a/src/net/torvald/terrarum/tests/BTeXTest.kt b/src/net/torvald/terrarum/tests/BTeXTest.kt index 02e5cefe9..003b991da 100644 --- a/src/net/torvald/terrarum/tests/BTeXTest.kt +++ b/src/net/torvald/terrarum/tests/BTeXTest.kt @@ -14,6 +14,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.ShaderProgram import net.torvald.btex.BTeXDocViewer import net.torvald.btex.BTeXParser +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.FlippingSpriteBatch import net.torvald.terrarum.btex.BTeXDocument import net.torvald.terrarum.gdxClearAndEnableBlend @@ -82,7 +83,7 @@ class BTeXTest : ApplicationAdapter() { Thread { try { measureTimeMillis { - val f = BTeXParser.invoke(Gdx.files.internal("./assets/mods/basegame/books/$filePath"), varMap, typesetProgress) + val f = BTeXParser.invoke(AssetCache.getFileHandle("mods/basegame/books/$filePath"), varMap, typesetProgress) document = f.first documentHandler = f.second }.also { @@ -103,7 +104,7 @@ class BTeXTest : ApplicationAdapter() { } else { measureTimeMillis { - document = BTeXDocument.fromFile(Gdx.files.internal("./assets/mods/basegame/books/$filePath")) + document = BTeXDocument.fromFile(AssetCache.getFileHandle("mods/basegame/books/$filePath")) }.also { println("Time spent on loading [ms]: $it") } diff --git a/src/net/torvald/terrarum/tests/ColorMapTest.kt b/src/net/torvald/terrarum/tests/ColorMapTest.kt index a966ca182..e01574888 100644 --- a/src/net/torvald/terrarum/tests/ColorMapTest.kt +++ b/src/net/torvald/terrarum/tests/ColorMapTest.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.Screen import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration import com.badlogic.gdx.graphics.glutils.ShaderProgram +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.GdxColorMap /** @@ -26,7 +27,7 @@ class ColorMapTest : Game() { } override fun render() { - val colormap = GdxColorMap(Gdx.files.internal("assets/testimage_resized.png")) + val colormap = GdxColorMap(AssetCache.getFileHandle("testimage_resized.png")) println(colormap) System.exit(0) diff --git a/src/net/torvald/terrarum/tests/SurroundPannerTest.kt b/src/net/torvald/terrarum/tests/SurroundPannerTest.kt index 2f35e09a8..945dadcc3 100644 --- a/src/net/torvald/terrarum/tests/SurroundPannerTest.kt +++ b/src/net/torvald/terrarum/tests/SurroundPannerTest.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.audio.Sound import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration import com.badlogic.gdx.files.FileHandle +import net.torvald.terrarum.AssetCache import java.awt.BorderLayout import javax.swing.JFrame import javax.swing.JPanel @@ -41,7 +42,7 @@ class AudioPlayerSlave : Game() { override fun create() { - audioSample = Gdx.files.internal("assets/loopey.wav") + audioSample = AssetCache.getFileHandle("loopey.wav") gdxSound = Gdx.audio.newSound(audioSample) surroundPanner = SurroundPannerTest() soundID = gdxSound.loop() @@ -137,7 +138,7 @@ class AudioPlayerSlave : Game() { override fun create() { - audioSample = Gdx.files.internal("assets/loopey.wav") + audioSample = AssetCache.getFileHandle("loopey.wav") gdxSound = Gdx.audio.newSound(audioSample) diff --git a/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt b/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt index c46891cf6..edd024f4f 100644 --- a/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt +++ b/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt @@ -73,7 +73,7 @@ class WorldgenNoiseSandbox : ApplicationAdapter() { private var genFutures: Array?> = arrayOfNulls(genSlices) override fun create() { - font = TerrarumSansBitmap("assets/graphics/fonts/terrarum-sans-bitmap") + font = TerrarumSansBitmap() batch = FlippingSpriteBatch(1000) camera = OrthographicCamera(NOISEBOX_WIDTH.toFloat(), NOISEBOX_HEIGHT.toFloat()) diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index e3eb65629..6d900a4ff 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -53,9 +53,9 @@ class BasicDebugInfoWindow : UICanvas() { private var ingame: IngameInstance? = null internal var world: GameWorld? = null // is set by IngameRenderer.setRenderedWorld(GameWorld) - private val icons = TextureRegionPack(Gdx.files.internal("assets/graphics/gui/debug_window_symbols.tga"), 21, 26) - private val back = Texture(Gdx.files.internal("assets/graphics/gui/debug_window_background.tga")) - private val back2 = Texture(Gdx.files.internal("assets/graphics/gui/debug_window_background2.tga")) + private val icons = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/debug_window_symbols.tga"), 21, 26) + private val back = Texture(AssetCache.getFileHandle("graphics/gui/debug_window_background.tga")) + private val back2 = Texture(AssetCache.getFileHandle("graphics/gui/debug_window_background2.tga")) private val ARROW_RIGHT = 0xC0.toChar() private val ARROW_LEFT = 0xC1.toChar() diff --git a/src/net/torvald/terrarum/ui/Toolkit.kt b/src/net/torvald/terrarum/ui/Toolkit.kt index 810aeb82e..7f9b36dd3 100644 --- a/src/net/torvald/terrarum/ui/Toolkit.kt +++ b/src/net/torvald/terrarum/ui/Toolkit.kt @@ -46,11 +46,11 @@ object Toolkit : Disposable { } private lateinit var fboBlur: Float16FrameBuffer -// val baloonTile = TextureRegionPack("assets/graphics/gui/message_black_tileable.tga", 36, 36) - val shadowTile = TextureRegionPack("assets/graphics/gui/blur_shadow.tga", 32, 32) +// val baloonTile = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/message_black_tileable.tga"), 36, 36) + val shadowTile = TextureRegionPack(AssetCache.getFileHandle("graphics/gui/blur_shadow.tga"), 32, 32) - val textureWhiteSquare = Texture(Gdx.files.internal("assets/graphics/ortho_line_tex_2px.tga")) - val textureWhiteCircle = Texture(Gdx.files.internal("assets/graphics/circle_512.tga")) + val textureWhiteSquare = Texture(AssetCache.getFileHandle("graphics/ortho_line_tex_2px.tga")) + val textureWhiteCircle = Texture(AssetCache.getFileHandle("graphics/circle_512.tga")) init { App.disposables.add(this) @@ -59,7 +59,7 @@ object Toolkit : Disposable { textureWhiteCircle.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) CommonResourcePool.addToLoadingList("toolkit_box_border") { - TextureRegionPack(Gdx.files.internal("./assets/graphics/gui/box_border_flat_tileable.tga"), 1, 1) + TextureRegionPack(AssetCache.getFileHandle("graphics/gui/box_border_flat_tileable.tga"), 1, 1) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/ui/UIItemConfigKeycap.kt b/src/net/torvald/terrarum/ui/UIItemConfigKeycap.kt index 3afd86090..8dc942f61 100644 --- a/src/net/torvald/terrarum/ui/UIItemConfigKeycap.kt +++ b/src/net/torvald/terrarum/ui/UIItemConfigKeycap.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.imagefont.TinyAlphNum import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -26,7 +27,7 @@ class UIItemConfigKeycap( if (keySize < 3) throw IllegalArgumentException("Key size must be greater than 2 (got $keySize)") CommonResourcePool.addToLoadingList("ui_item_keymap_keycap") { - TextureRegionPack("./assets/graphics/gui/ui_control_key_map_keycap.tga", 8, 32) + TextureRegionPack(AssetCache.getFileHandle("graphics/gui/ui_control_key_map_keycap.tga"), 8, 32) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/ui/UIItemRedeemCodeArea.kt b/src/net/torvald/terrarum/ui/UIItemRedeemCodeArea.kt index 227074e79..dd68f0f35 100644 --- a/src/net/torvald/terrarum/ui/UIItemRedeemCodeArea.kt +++ b/src/net/torvald/terrarum/ui/UIItemRedeemCodeArea.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.imagefont.BigAlphNum import net.torvald.terrarum.utils.PasswordBase32 @@ -34,7 +35,7 @@ class UIItemRedeemCodeArea( init { CommonResourcePool.addToLoadingList("spritesheet:terrarum_redeem_code_form") { - TextureRegionPack(Gdx.files.internal("assets/graphics/code_input_cells.tga"), CELL_W, CELL_H) + TextureRegionPack(AssetCache.getFileHandle("graphics/code_input_cells.tga"), CELL_W, CELL_H) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/ui/UIItemToggleButton.kt b/src/net/torvald/terrarum/ui/UIItemToggleButton.kt index 2c576a8a0..8eeedb30c 100644 --- a/src/net/torvald/terrarum/ui/UIItemToggleButton.kt +++ b/src/net/torvald/terrarum/ui/UIItemToggleButton.kt @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.App +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.blendNormalStraightAlpha import net.torvald.terrarum.toInt @@ -28,7 +29,7 @@ class UIItemToggleButton( init { CommonResourcePool.addToLoadingList("gui_toggler_icons") { - TextureRegionPack(Texture(Gdx.files.internal("assets/graphics/gui/toggler_icons.tga")), 14, 14) + TextureRegionPack(Texture(AssetCache.getFileHandle("graphics/gui/toggler_icons.tga")), 14, 14) } CommonResourcePool.loadAll() } diff --git a/src/net/torvald/terrarum/weather/SkyboxModelHosek.kt b/src/net/torvald/terrarum/weather/SkyboxModelHosek.kt index 97ca2a585..b84f727a1 100644 --- a/src/net/torvald/terrarum/weather/SkyboxModelHosek.kt +++ b/src/net/torvald/terrarum/weather/SkyboxModelHosek.kt @@ -12,6 +12,7 @@ import net.torvald.colourutil.toRGB import net.torvald.parametricsky.ArHosekSkyModel import net.torvald.terrarum.App import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.AssetCache import net.torvald.terrarum.abs import net.torvald.terrarum.floorToInt import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -36,7 +37,7 @@ object SkyboxModelHosek : SkyboxModel { private lateinit var texStripRegions: TextureRegionPack fun loadlut() { - tex = Texture(Gdx.files.internal("assets/clut/skybox.png")) + tex = Texture(AssetCache.getFileHandle("clut/skybox.png")) tex.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) tex.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat) texRegions = TextureRegionPack(tex, 2, gradSize - 2, 0, 2, 0, 1) diff --git a/src/net/torvald/terrarum/weather/WeatherMixer.kt b/src/net/torvald/terrarum/weather/WeatherMixer.kt index 46f44cb77..5aabe38c0 100644 --- a/src/net/torvald/terrarum/weather/WeatherMixer.kt +++ b/src/net/torvald/terrarum/weather/WeatherMixer.kt @@ -91,7 +91,7 @@ internal object WeatherMixer : RNGConsumer { var forceTurbidity: Double? = null // doesn't work if the png is in greyscale/indexed mode - val starmapTex: TextureRegion = TextureRegion(Texture(Gdx.files.internal("assets/graphics/astrum.png"))).also { + val starmapTex: TextureRegion = TextureRegion(Texture(AssetCache.getFileHandle("graphics/astrum.png"))).also { it.texture.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) it.texture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat) } @@ -112,7 +112,7 @@ internal object WeatherMixer : RNGConsumer { get() = 256 shl (App.getConfigInt("maxparticles") / 256) - private val skyboxavr = GdxColorMap(Gdx.files.internal("assets/clut/skyboxavr.png")) + private val skyboxavr = GdxColorMap(AssetCache.getFileHandle("clut/skyboxavr.png")) override fun loadFromSave(ingame: IngameInstance, s0: Long, s1: Long) { diff --git a/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt b/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt index bbefe9bd2..cf125e760 100644 --- a/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt +++ b/src/net/torvald/terrarum/worlddrawer/CreateTileAtlas.kt @@ -97,7 +97,7 @@ class CreateTileAtlas { // 16 tiles are reserved for internal use: solid black, solid white, breakage stages. // 0th tile is complete transparent tile and is also a BlockID of zero: air. private var atlasCursor = 66 // 66 predefined tiles. The normal blocks (e.g. Air) should start from this number - private val atlasInit = "./assets/graphics/blocks/init.tga" + private val atlasInit = "graphics/blocks/init.tga" private var itemSheetCursor = 16 internal lateinit var itemTerrainPixmap: Pixmap @@ -111,7 +111,7 @@ class CreateTileAtlas { get() = atlasVernal private fun drawInitPixmap() { - val initPixmap = Pixmap(Gdx.files.internal(atlasInit)) + val initPixmap = Pixmap(AssetCache.getFileHandle(atlasInit)) val tilesInInitPixmap = (initPixmap.width * initPixmap.height) / (TILE_SIZE * TILE_SIZE) val tilesPossibleInCurrentPixmap = (atlas.width * atlas.height) / (TILE_SIZE * TILE_SIZE) @@ -240,10 +240,10 @@ class CreateTileAtlas { printdbg(this, "processing $prefix $modname:${filehandle.name()}") try { - val glowFile = Gdx.files.internal( + val glowFile = AssetCache.getFileHandle( filehandle.path().dropLast(4) + "_glow.tga" ) // assuming strict ".tga" file for now... - val emissiveFile = Gdx.files.internal( + val emissiveFile = AssetCache.getFileHandle( filehandle.path().dropLast(4) + "_emsv.tga" ) // assuming strict ".tga" file for now... fileToAtlantes(