From 75cd080023d054dd484ff26c6be9a17bee2d9762 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 14 Jul 2017 18:48:48 +0900 Subject: [PATCH] load screen adj, faster gravity response for standard --- assets/locales/koKR/Polyglot-100_koKR.json | 2 +- lib/TerrarumSansBitmap.jar | Bin 55407 -> 55485 bytes src/net/torvald/terrarum/ColorLimiterTest.kt | 2 +- src/net/torvald/terrarum/Ingame.kt | 26 +++--- src/net/torvald/terrarum/LoadScreen.kt | 83 ++++++++++++++---- src/net/torvald/terrarum/Terrarum.kt | 4 +- src/net/torvald/terrarum/TestTestTest.kt | 2 +- .../gameactors/PlayerBuilderSigrid.kt | 4 +- .../terrarum/gamecontroller/GameController.kt | 4 +- 9 files changed, 88 insertions(+), 39 deletions(-) diff --git a/assets/locales/koKR/Polyglot-100_koKR.json b/assets/locales/koKR/Polyglot-100_koKR.json index e3a753637..e6c36d158 100644 --- a/assets/locales/koKR/Polyglot-100_koKR.json +++ b/assets/locales/koKR/Polyglot-100_koKR.json @@ -1913,7 +1913,7 @@ }, { "n": "MENU_IO_LOADING", - "s": "불러오는 중" + "s": "불러오는 중..." }, { "n": "MENU_IO_PLEASE_WAIT", diff --git a/lib/TerrarumSansBitmap.jar b/lib/TerrarumSansBitmap.jar index 2fc6dadc811ebd2f9829df9470dc85bf9808af74..16b369283e0ac083a2dedbf6da2e1ac714dad36c 100644 GIT binary patch delta 14392 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 diff --git a/src/net/torvald/terrarum/ColorLimiterTest.kt b/src/net/torvald/terrarum/ColorLimiterTest.kt index cc248b8fb..43ce686e6 100644 --- a/src/net/torvald/terrarum/ColorLimiterTest.kt +++ b/src/net/torvald/terrarum/ColorLimiterTest.kt @@ -51,7 +51,7 @@ object ColorLimiterTest : ApplicationAdapter() { override fun render() { Gdx.graphics.setTitle("TestTestTest — F: ${Gdx.graphics.framesPerSecond}") - Gdx.gl.glClearColor(.157f, .157f, .157f, 0f) + Gdx.gl.glClearColor(.094f, .094f, .094f, 0f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) diff --git a/src/net/torvald/terrarum/Ingame.kt b/src/net/torvald/terrarum/Ingame.kt index 69994b1bc..cb1af9faa 100644 --- a/src/net/torvald/terrarum/Ingame.kt +++ b/src/net/torvald/terrarum/Ingame.kt @@ -82,12 +82,12 @@ class Ingame(val batch: SpriteBatch) : Screen { private val worldFBOformat = if (Terrarum.environment == RunningEnvironment.MOBILE) Pixmap.Format.RGBA4444 else Pixmap.Format.RGBA8888 private val lightFBOformat = Pixmap.Format.RGB888 - var worldDrawFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, true) - var worldGlowFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, true) - var worldBlendFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, true) + var worldDrawFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, false) + var worldGlowFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, false) + var worldBlendFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, false) // RGB elements of Lightmap for Color Vec4(R, G, B, 1.0) 24-bit - var lightmapFboA = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), true) - var lightmapFboB = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), true) + var lightmapFboA = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), false) + var lightmapFboB = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), false) init { @@ -406,7 +406,9 @@ class Ingame(val batch: SpriteBatch) : Screen { } override fun render(delta: Float) { - if (!postInitDone) { // Q&D solution for LoadScreen and Ingame, where while LoadScreen is working, Ingame now no longer has GL Context + // Q&D solution for LoadScreen and Ingame, where while LoadScreen is working, Ingame now no longer has GL Context + // there's still things to load which needs GL context to be present + if (!postInitDone) { if (gameLoadMode == GameLoadMode.CREATE_NEW) { playableActorDelegate = PlayableActorDelegate(PlayerBuilderSigrid()) @@ -529,7 +531,7 @@ class Ingame(val batch: SpriteBatch) : Screen { private var blurReadBuffer = lightmapFboB private fun renderGame(batch: SpriteBatch) { - Gdx.gl.glClearColor(.157f, .157f, .157f, 0f) + Gdx.gl.glClearColor(.094f, .094f, .094f, 0f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) //camera.position.set(-WorldCamera.x.toFloat(), -WorldCamera.y.toFloat(), 0f) // make camara work @@ -1515,15 +1517,15 @@ class Ingame(val batch: SpriteBatch) : Screen { */ override fun resize(width: Int, height: Int) { worldDrawFrameBuffer.dispose() - worldDrawFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, true) + worldDrawFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, false) worldGlowFrameBuffer.dispose() - worldGlowFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, true) + worldGlowFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, false) worldBlendFrameBuffer.dispose() - worldBlendFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, true) + worldBlendFrameBuffer = FrameBuffer(worldFBOformat, Terrarum.WIDTH, Terrarum.HEIGHT, false) lightmapFboA.dispose() - lightmapFboA = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), true) + lightmapFboA = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), false) lightmapFboB.dispose() - lightmapFboB = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), true) + lightmapFboB = FrameBuffer(lightFBOformat, Terrarum.WIDTH.div(lightmapDownsample.toInt()), Terrarum.HEIGHT.div(lightmapDownsample.toInt()), false) // Set up viewport when window is resized diff --git a/src/net/torvald/terrarum/LoadScreen.kt b/src/net/torvald/terrarum/LoadScreen.kt index ee7083982..013ccb788 100644 --- a/src/net/torvald/terrarum/LoadScreen.kt +++ b/src/net/torvald/terrarum/LoadScreen.kt @@ -43,7 +43,7 @@ object LoadScreen : ScreenAdapter() { private lateinit var textOverlayTex: Texture private lateinit var textFbo: FrameBuffer - private val ghostMaxZoomX = 1.3f + private val ghostMaxZoomX = 1.25f private val ghostAlphaMax = 1f var camera = OrthographicCamera(Terrarum.WIDTH.toFloat(), Terrarum.HEIGHT.toFloat()) @@ -63,6 +63,8 @@ object LoadScreen : ScreenAdapter() { override fun show() { messages.clear() + doContextChange = false + glideTimer = 0f if (screenToLoad == null) { @@ -99,33 +101,40 @@ object LoadScreen : ScreenAdapter() { val textX: Float; get() = (Terrarum.WIDTH * 0.75f).floor() private var genuineSonic = false // the "NOW LOADING..." won't appear unless the arrow first run passes it (it's totally not a GenuineIntel tho) + private var doContextChange = false + + private var messageBackgroundColour = Color(0x404040ff) + private var messageForegroundColour = Color.WHITE override fun render(delta: Float) { - // if loading is done, escape and set screen of the Game to the target - if (screenToLoad?.gameFullyLoaded ?: false) { - Terrarum.changeScreen(screenToLoad!!) - } - else { - glideDispY = Terrarum.HEIGHT - 100f - Terrarum.fontGame.lineHeight - arrowObjGlideSize = arrowObjTex.width + 2f * Terrarum.WIDTH + glideDispY = Terrarum.HEIGHT - 100f - Terrarum.fontGame.lineHeight + arrowObjGlideSize = arrowObjTex.width + 2f * Terrarum.WIDTH - Gdx.gl.glClearColor(.157f, .157f, .157f, 0f) + Gdx.gl.glClearColor(.094f, .094f, .094f, 0f) + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) + + textFbo.inAction(null, null) { + Gdx.gl.glClearColor(0f, 0f, 0f, 0f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) + } - textFbo.inAction(null, null) { - Gdx.gl.glClearColor(0f, 0f, 0f, 0f) - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) + glideTimer += delta + // reset timer + if (glideTimer >= arrowObjGlideSize / arrowGlideSpeed) { + glideTimer -= arrowObjGlideSize / arrowGlideSpeed + + // change screen WHEN the timer is reset. + // In other words, the arrow must hit the goal BEFORE context change take place + if (screenToLoad?.gameFullyLoaded ?: false) { + doContextChange = true } - - glideTimer += delta - if (glideTimer >= arrowObjGlideSize / arrowGlideSpeed) { - glideTimer -= arrowObjGlideSize / arrowGlideSpeed - } - arrowObjPos = glideTimer * arrowGlideSpeed + } + arrowObjPos = glideTimer * arrowGlideSpeed + if (!doContextChange) { // draw text to FBO textFbo.inAction(camera, Terrarum.batch) { Terrarum.batch.inUse { @@ -184,8 +193,39 @@ object LoadScreen : ScreenAdapter() { } + + + // message backgrounds + it.color = messageBackgroundColour + it.fillRect(0f, 60f, Terrarum.WIDTH.toFloat(), 40f + (messages.size) * Terrarum.fontGame.lineHeight) + // log messages - it.color = Color.LIGHT_GRAY + it.color = messageForegroundColour + for (i in 0 until messages.elemCount) { + Terrarum.fontGame.draw(it, + messages[i] ?: "", + 40f, + 80f + (messages.size - i - 1) * Terrarum.fontGame.lineHeight + ) + } + } + } + else { + Terrarum.batch.inUse { + // recycling part of the draw code // + + initViewPort(Terrarum.WIDTH, Terrarum.HEIGHT) // dunno, no render without this + it.projectionMatrix = camera.combined + blendNormal() + + + + // message backgrounds + it.color = messageBackgroundColour + it.fillRect(0f, 60f, Terrarum.WIDTH.toFloat(), 40f + (messages.size) * Terrarum.fontGame.lineHeight) + + // log messages + it.color = messageForegroundColour for (i in 0 until messages.elemCount) { Terrarum.fontGame.draw(it, messages[i] ?: "", @@ -195,6 +235,11 @@ object LoadScreen : ScreenAdapter() { } } + Terrarum.batch.flush() + + Thread.sleep(80) + + Terrarum.changeScreen(screenToLoad!!) } } diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index cdc0c7db9..5b71fce4e 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -99,7 +99,7 @@ object Terrarum : Game() { /** * To be used with physics simulator */ - val TARGET_FPS: Double = 33.33333333333333333333333 // higher value == faster gravity responce + val TARGET_FPS: Double = 26.6666666666666666666666666 // lower value == faster gravity responce (IT WON'T HOTSWAP!!) /** * To be used with render, to achieve smooth frame drawing @@ -536,6 +536,8 @@ object Terrarum : Game() { private val defaultConfig = DefaultConfig.fetch() private fun getConfigMaster(key: String): Any { + val key = key.toLowerCase() + val config = try { gameConfig[key] } diff --git a/src/net/torvald/terrarum/TestTestTest.kt b/src/net/torvald/terrarum/TestTestTest.kt index 87dd7ec77..46ed50e31 100644 --- a/src/net/torvald/terrarum/TestTestTest.kt +++ b/src/net/torvald/terrarum/TestTestTest.kt @@ -73,7 +73,7 @@ class TestTestTest(val batch: SpriteBatch) : Screen { val radius = 4f - Gdx.gl.glClearColor(.157f, .157f, .157f, 0f) + Gdx.gl.glClearColor(.094f, .094f, .094f, 0f) Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) diff --git a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt index 4fcf28e36..5df033de1 100644 --- a/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt +++ b/src/net/torvald/terrarum/gameactors/PlayerBuilderSigrid.kt @@ -33,7 +33,7 @@ object PlayerBuilderSigrid { p.actorValue[AVKey.SPEEDBUFF] = 1.0 p.actorValue[AVKey.ACCEL] = ActorHumanoid.WALK_ACCEL_BASE p.actorValue[AVKey.ACCELBUFF] = 1.0 - p.actorValue[AVKey.JUMPPOWER] = 8.0 + p.actorValue[AVKey.JUMPPOWER] = 10.0 p.actorValue[AVKey.BASEMASS] = 80.0 p.actorValue[AVKey.SCALEBUFF] = 1.0 // Constant 1.0 for player, meant to be used by random mobs @@ -52,7 +52,7 @@ object PlayerBuilderSigrid { //p.actorValue[AVKey.LUMR] = 0.84 //p.actorValue[AVKey.LUMG] = 0.93 //p.actorValue[AVKey.LUMB] = 1.37 - //p.actorValue[AVKey.LUMA] = 1.93 + p.actorValue[AVKey.LUMA] = 1.93 p.actorValue[AVKey.BASEDEFENCE] = 141 diff --git a/src/net/torvald/terrarum/gamecontroller/GameController.kt b/src/net/torvald/terrarum/gamecontroller/GameController.kt index 84b088fc9..0e238a63e 100644 --- a/src/net/torvald/terrarum/gamecontroller/GameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/GameController.kt @@ -144,10 +144,10 @@ object GameController : InputAdapter() { val itemOnGrip = ingame.player!!.inventory.itemEquipped[GameItem.EquipPosition.HAND_GRIP] if (itemOnGrip != null) { - if (button == Terrarum.getConfigInt("mousePrimary")) { + if (button == Terrarum.getConfigInt("mouseprimary")) { itemOnGrip.endPrimaryUse(Gdx.graphics.deltaTime) } - if (button == Terrarum.getConfigInt("mouseSecondary")) { + if (button == Terrarum.getConfigInt("mousesecondary")) { itemOnGrip.endSecondaryUse(Gdx.graphics.deltaTime) } }