From 10819e2607671031ccec42a24f22e0070e6d4c2e Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 11 Dec 2021 21:08:56 +0900 Subject: [PATCH] titlescreen moved to modules; using GLES 3.0 as default --- assets/mods/LoadOrder.csv | 2 +- src/net/torvald/terrarum/App.java | 58 +++++++++++++------ src/net/torvald/terrarum/ModMgr.kt | 7 +++ src/net/torvald/terrarum/ModuleEntryPoint.kt | 3 + .../terrarum/NoModuleDefaultTitlescreen.kt | 54 +++++++++++++++++ src/net/torvald/terrarum/Terrarum.kt | 36 ------------ .../torvald/terrarum/gameworld/GameWorld.kt | 16 ++--- .../terrarum/modulebasegame/EntryPoint.kt | 5 ++ .../{ => modulebasegame}/TitleScreen.kt | 5 +- .../modulebasegame/ui/UIInventoryEscMenu.kt | 2 +- .../terrarum/modulebasegame/ui/UIRemoCon.kt | 6 +- src/net/torvald/terrarum/ui/Toolkit.kt | 17 +++--- work_files/UI/modlist.kra | 4 +- 13 files changed, 135 insertions(+), 80 deletions(-) create mode 100644 src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt rename src/net/torvald/terrarum/{ => modulebasegame}/TitleScreen.kt (99%) diff --git a/assets/mods/LoadOrder.csv b/assets/mods/LoadOrder.csv index 2fd792740..1d47f6ac0 100644 --- a/assets/mods/LoadOrder.csv +++ b/assets/mods/LoadOrder.csv @@ -3,4 +3,4 @@ # You can disable basegame, but we don't recommend. basegame -dwarventech +#dwarventech diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index a8b1f3ab9..1b62df149 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -342,6 +342,7 @@ public class App implements ApplicationListener { Lwjgl3ApplicationConfiguration appConfig = new Lwjgl3ApplicationConfiguration(); //appConfig.useGL30 = false; // https://stackoverflow.com/questions/46753218/libgdx-should-i-use-gl30 + appConfig.useOpenGL3(true, 3, 0); appConfig.useVsync(getConfigBoolean("usevsync")); appConfig.setResizable(false); appConfig.setWindowedMode(width, height); @@ -555,11 +556,16 @@ public class App implements ApplicationListener { // hand over the scene control to this single class; Terrarum must call // 'AppLoader.getINSTANCE().screen.render(delta)', this is not redundant at all! - printdbg(this, "!! Force set current screen and ingame instance to TitleScreen !!"); + IngameInstance title = ModMgr.INSTANCE.getTitleScreen(batch); - IngameInstance title = new TitleScreen(batch); - Terrarum.INSTANCE.setCurrentIngameInstance(title); - setScreen(title); + if (title != null) { + Terrarum.INSTANCE.setCurrentIngameInstance(title); + setScreen(title); + } + else { + IngameInstance notitle = new NoModuleDefaultTitlescreen(batch); + setScreen(notitle); + } } } // draw the screen @@ -570,7 +576,7 @@ public class App implements ApplicationListener { KeyToggler.INSTANCE.update(currentScreen instanceof TerrarumIngame); // nested FBOs are just not a thing in GL! - net.torvald.terrarum.FrameBufferManager.end(); + FrameBufferManager.end(); PostProcessor.INSTANCE.draw(camera.combined, renderFBO); @@ -855,6 +861,34 @@ public class App implements ApplicationListener { */ private void postInit() { ModMgr.INSTANCE.invoke(); // invoke Module Manager + + + TextureRegionPack.Companion.setGlobalFlipY(true); + fontSmallNumbers = TinyAlphNum.INSTANCE; + + IME.invoke(); + inputStrober = InputStrober.INSTANCE; + + try { + audioDevice = Gdx.audio.newAudioDevice(48000, false); + } + catch (NullPointerException deviceInUse) { + deviceInUse.printStackTrace(); + System.err.println("[AppLoader] failed to create audio device: Audio device occupied by Exclusive Mode Device? (e.g. ASIO4all)"); + } + + CommonResourcePool.INSTANCE.loadAll(); + + + if (ModMgr.INSTANCE.getModuleInfo().isEmpty()) { + + + + return; + } + + + printdbg(this, "all modules loaded successfully"); @@ -869,8 +903,6 @@ public class App implements ApplicationListener { tileMaker = new CreateTileAtlas(); tileMaker.invoke(false); - IME.invoke(); - inputStrober = InputStrober.INSTANCE; // check if selected IME is accessible; if not, set selected IME to none String selectedIME = getConfigString("inputmethod"); @@ -880,18 +912,6 @@ public class App implements ApplicationListener { Terrarum.initialise(); - TextureRegionPack.Companion.setGlobalFlipY(true); - fontSmallNumbers = TinyAlphNum.INSTANCE; - - try { - audioDevice = Gdx.audio.newAudioDevice(48000, false); - } - catch (NullPointerException deviceInUse) { - deviceInUse.printStackTrace(); - System.err.println("[AppLoader] failed to create audio device: Audio device occupied by Exclusive Mode Device? (e.g. ASIO4all)"); - } - - CommonResourcePool.INSTANCE.loadAll(); // if there is a predefined screen, open that screen after my init process if (injectScreen != null) { diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 24627fec2..ee89e0ce4 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum import com.badlogic.gdx.Gdx import com.badlogic.gdx.files.FileHandle +import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.App.* import net.torvald.terrarum.blockproperties.BlockCodex import net.torvald.terrarum.blockproperties.WireCodex @@ -31,6 +32,7 @@ import java.util.* /** * Modules (or Mods) Resource Manager * + * The very first mod on the load set must have a title screen * * NOTE!!: Usage of Groovy is only temporary; if Kotlin's "JSR 223" is no longer experimental and * is readily available, ditch that Groovy. @@ -93,6 +95,11 @@ object ModMgr { errorLogs.add(ModuleErrorInfo(type, moduleName, cause)) } + /** + * Try to create an instance of a "titlescreen" from the current load order set. + */ + fun getTitleScreen(batch: SpriteBatch): IngameInstance? = entryPointClasses.getOrNull(0)?.getTitleScreen(batch) + init { // load modules val loadOrderCSVparser = CSVParser.parse( diff --git a/src/net/torvald/terrarum/ModuleEntryPoint.kt b/src/net/torvald/terrarum/ModuleEntryPoint.kt index 9bdbf7a7c..38837ba16 100644 --- a/src/net/torvald/terrarum/ModuleEntryPoint.kt +++ b/src/net/torvald/terrarum/ModuleEntryPoint.kt @@ -1,9 +1,12 @@ package net.torvald.terrarum +import com.badlogic.gdx.graphics.g2d.SpriteBatch + /** * Created by minjaesong on 2018-06-21. */ abstract class ModuleEntryPoint { abstract fun invoke() abstract fun dispose() + open fun getTitleScreen(batch: SpriteBatch): IngameInstance? = null } \ No newline at end of file diff --git a/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt b/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt new file mode 100644 index 000000000..424c7adfc --- /dev/null +++ b/src/net/torvald/terrarum/NoModuleDefaultTitlescreen.kt @@ -0,0 +1,54 @@ +package net.torvald.terrarum + +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.graphics.Pixmap +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.glutils.FrameBuffer +import net.torvald.terrarum.ui.Toolkit + +/** + * Created by minjaesong on 2021-12-11. + */ +class NoModuleDefaultTitlescreen(batch: SpriteBatch) : IngameInstance(batch) { + + private val wot = listOf( + "No Module is currently loaded.", + "Please review your Load Order on", + "assets/mods/LoadOrder.csv" + ) + + private val maxtw = wot.maxOf { App.fontGame.getWidth(it) } + + private val fbo = FrameBuffer(Pixmap.Format.RGBA8888, App.scr.width, App.scr.height, true) + + private var init = false + + override fun render(updateRate: Float) { + gdxClearAndSetBlend(0f, 0f, 0f, 0f) + + if (!init) { + val lh = 36f + val th = lh * wot.size + + fbo.inAction(null, null) { + gdxClearAndSetBlend(.094f, .094f, .094f, 1f) + batch.inUse { + batch.color = Color.WHITE + wot.forEachIndexed { index, s -> + App.fontGame.draw(batch, s, (Toolkit.drawWidth - maxtw) / 2f, (App.scr.height - th) / 2f + lh * index) + } + } + } + } + + batch.inUse { + batch.draw(fbo.colorBufferTexture, 0f, 0f) + } + } + + override fun dispose() { + super.dispose() + + fbo.dispose() + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 52c77476c..57eebfbda 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -31,7 +31,6 @@ import net.torvald.terrarum.serialise.Common import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.worlddrawer.WorldCamera import net.torvald.terrarumsansbitmap.gdx.TerrarumSansBitmap -import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.util.CircularArray import java.io.File import java.io.PrintStream @@ -193,41 +192,6 @@ object Terrarum : Disposable { printStackTrace(this) } - private fun showxxx() { - - testTexture = Texture(Gdx.files.internal("./assets/test_texture.tga")) - - - // resize fullscreen quad? - - - TextureRegionPack.globalFlipY = true // !! TO MAKE LEGACY CODE RENDER ON ITS POSITION !! - Gdx.graphics.isContinuousRendering = true - - //batch = SpriteBatch() - //shapeRender = ShapeRenderer() - - - App.GAME_LOCALE = getConfigString("language") - printdbg(this, "locale = ${App.GAME_LOCALE}") - - - - - // jump straight into the ingame - /*val ingame = Ingame(batch) - ingame.gameLoadInfoPayload = Ingame.NewWorldParameters(2400, 800, HQRNG().nextLong()) - ingame.gameLoadMode = Ingame.GameLoadMode.CREATE_NEW - LoadScreen.screenToLoad = ingame - this.ingame = ingame - setScreen(LoadScreen)*/ - - - - // title screen - App.setScreen(TitleScreen(batch)) - } - /** Don't call this! Call AppLoader.dispose() */ override fun dispose() { //dispose any other resources used in this level diff --git a/src/net/torvald/terrarum/gameworld/GameWorld.kt b/src/net/torvald/terrarum/gameworld/GameWorld.kt index d5955eb83..4db5f23d6 100644 --- a/src/net/torvald/terrarum/gameworld/GameWorld.kt +++ b/src/net/torvald/terrarum/gameworld/GameWorld.kt @@ -158,15 +158,17 @@ open class GameWorld() : Disposable { lastPlayTime = lastPlayTIME_T - App.tileMaker.tags.forEach { - printdbg(this, "tileNumber ${it.value.tileNumber} <-> tileName ${it.key}") + if (App.tileMaker != null) { + App.tileMaker.tags.forEach { + printdbg(this, "tileNumber ${it.value.tileNumber} <-> tileName ${it.key}") - tileNumberToNameMap[it.value.tileNumber.toLong()] = it.key - tileNameToNumberMap[it.key] = it.value.tileNumber + tileNumberToNameMap[it.value.tileNumber.toLong()] = it.key + tileNameToNumberMap[it.key] = it.value.tileNumber + } + + // AN EXCEPTIONAL TERM: tilenum 0 is always redirected to Air tile, even if the tilenum for actual Air tile is not zero + tileNumberToNameMap[0] = Block.AIR } - - // AN EXCEPTIONAL TERM: tilenum 0 is always redirected to Air tile, even if the tilenum for actual Air tile is not zero - tileNumberToNameMap[0] = Block.AIR } diff --git a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt index 44e06fd6e..7908f3844 100644 --- a/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt +++ b/src/net/torvald/terrarum/modulebasegame/EntryPoint.kt @@ -1,5 +1,6 @@ package net.torvald.terrarum.modulebasegame +import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.* import net.torvald.terrarum.App.IS_DEVELOPMENT_BUILD import net.torvald.terrarum.App.printdbg @@ -19,6 +20,10 @@ class EntryPoint : ModuleEntryPoint() { private val moduleName = "basegame" + override fun getTitleScreen(batch: SpriteBatch): IngameInstance? { + return TitleScreen(batch) + } + override fun invoke() { printdbg(this, "Hello, world!") diff --git a/src/net/torvald/terrarum/TitleScreen.kt b/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt similarity index 99% rename from src/net/torvald/terrarum/TitleScreen.kt rename to src/net/torvald/terrarum/modulebasegame/TitleScreen.kt index 50842cd27..ae295eb7f 100644 --- a/src/net/torvald/terrarum/TitleScreen.kt +++ b/src/net/torvald/terrarum/modulebasegame/TitleScreen.kt @@ -1,4 +1,4 @@ -package net.torvald.terrarum +package net.torvald.terrarum.modulebasegame import com.badlogic.gdx.Gdx import com.badlogic.gdx.InputAdapter @@ -11,6 +11,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.FrameBuffer import com.jme3.math.FastMath import net.torvald.random.HQRNG +import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.App.printdbgerr import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED @@ -23,8 +24,6 @@ import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.WorldTime import net.torvald.terrarum.gameworld.fmod import net.torvald.terrarum.langpack.Lang -import net.torvald.terrarum.modulebasegame.IngameRenderer -import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.ui.UIRemoCon import net.torvald.terrarum.modulebasegame.ui.UITitleRemoConYaml import net.torvald.terrarum.realestate.LandUtil diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt index 5b88df58e..d1b7621f6 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt @@ -8,9 +8,9 @@ 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 +import net.torvald.terrarum.modulebasegame.TitleScreen import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_UI_HEIGHT import net.torvald.terrarum.serialise.WriteSavegame diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt index 62443b875..e4470d0f3 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt @@ -4,10 +4,14 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.* +import net.torvald.terrarum.App import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.App.printdbgerr +import net.torvald.terrarum.QNDTreeNode +import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.Yaml import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent +import net.torvald.terrarum.modulebasegame.TitleScreen import net.torvald.terrarum.serialise.WriteConfig import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas diff --git a/src/net/torvald/terrarum/ui/Toolkit.kt b/src/net/torvald/terrarum/ui/Toolkit.kt index 4752893c5..9543478c4 100644 --- a/src/net/torvald/terrarum/ui/Toolkit.kt +++ b/src/net/torvald/terrarum/ui/Toolkit.kt @@ -4,7 +4,7 @@ import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.* import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion -import com.badlogic.gdx.graphics.glutils.FrameBuffer +import com.badlogic.gdx.graphics.glutils.FloatFrameBuffer import com.badlogic.gdx.utils.Disposable import net.torvald.random.HQRNG import net.torvald.terrarum.App @@ -34,9 +34,9 @@ object Toolkit : Disposable { private val shaderKawaseDown = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/boxdown.frag") private val shaderKawaseUp = App.loadShaderFromFile("assets/shaders/4096.vert", "assets/shaders/boxup.frag") - private lateinit var fboBlur: FrameBuffer - private lateinit var fboBlurHalf: FrameBuffer - private lateinit var fboBlurQuarter: FrameBuffer + private lateinit var fboBlur: FloatFrameBuffer + private lateinit var fboBlurHalf: FloatFrameBuffer + private lateinit var fboBlurQuarter: FloatFrameBuffer private lateinit var blurWriteQuad: Mesh private lateinit var blurWriteQuad2: Mesh private lateinit var blurWriteQuad4: Mesh @@ -302,20 +302,17 @@ object Toolkit : Disposable { val fw = App.scr.width//MathUtils.nextPowerOfTwo(App.scr.width) val fh = App.scr.height//MathUtils.nextPowerOfTwo(App.scr.height) - fboBlur = FrameBuffer( - Pixmap.Format.RGBA8888, + fboBlur = FloatFrameBuffer( fw, fh, true ) - fboBlurHalf = FrameBuffer( - Pixmap.Format.RGBA8888, + fboBlurHalf = FloatFrameBuffer( fw / 2, fh / 2, true ) - fboBlurQuarter = FrameBuffer( - Pixmap.Format.RGBA8888, + fboBlurQuarter = FloatFrameBuffer( fw / 4, fh / 4, true diff --git a/work_files/UI/modlist.kra b/work_files/UI/modlist.kra index 1ba879f4a..8c8981298 100644 --- a/work_files/UI/modlist.kra +++ b/work_files/UI/modlist.kra @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1eb7a3f91b33fa082965657a7b073d5fd35f4f8ded6b9456872524d61f682a35 -size 71502 +oid sha256:574c146da4c5e9e9abef0bc6eab5e374c465d4256b5a1534c9de00c4d577d499 +size 83512