diff --git a/src/net/torvald/terrarum/ModOptionsHost.kt b/src/net/torvald/terrarum/ModOptionsHost.kt index e0ffb6a89..72a6aec9b 100644 --- a/src/net/torvald/terrarum/ModOptionsHost.kt +++ b/src/net/torvald/terrarum/ModOptionsHost.kt @@ -7,7 +7,6 @@ import net.torvald.terrarum.ui.UICanvas class ModOptionsHost(val remoCon: UIRemoCon) : UICanvas() { - override var openCloseTime: Second = 0f private val moduleAreaHMargin = 48 private val moduleAreaBorder = 8 @@ -21,18 +20,6 @@ class ModOptionsHost(val remoCon: UIRemoCon) : UICanvas() { override fun renderUI(batch: SpriteBatch, camera: Camera) { } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/UIFakeGradOverlay.kt b/src/net/torvald/terrarum/UIFakeGradOverlay.kt index 88b8193aa..02b273c97 100644 --- a/src/net/torvald/terrarum/UIFakeGradOverlay.kt +++ b/src/net/torvald/terrarum/UIFakeGradOverlay.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.GL20 import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.jme3.math.FastMath import net.torvald.random.HQRNG import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas @@ -75,29 +76,51 @@ class UIFakeBlurOverlay(val blurRadius: Float, val nodarken: Boolean) : UICanvas get() = App.scr.height set(value) {} - override var openCloseTime: Second = 0f + override var openCloseTime: Second = OPENCLOSE_GENERIC private val darken = Color(0.5f, 0.5f, 0.5f, 1f) + private val darkeningVarCol = Color(255) + private val batchDrawCol = Color(-1) + override fun updateUI(delta: Float) {} override fun renderUI(batch: SpriteBatch, camera: Camera) { + batchDrawCol.a = openness + batch.color = batchDrawCol if (App.getConfigBoolean("fx_backgroundblur")) { - Toolkit.blurEntireScreen(batch, camera as OrthographicCamera, blurRadius, 0, 0, width, height) + Toolkit.blurEntireScreen(batch, camera as OrthographicCamera, blurRadius * openness, 0, 0, width, height) } if (!nodarken) { blendMul(batch) - batch.color = darken + darkeningVarCol.r = FastMath.interpolateLinear(openness, 1f, 0.5f) + darkeningVarCol.g = FastMath.interpolateLinear(openness, 1f, 0.5f) + darkeningVarCol.b = FastMath.interpolateLinear(openness, 1f, 0.5f) + batch.color = darkeningVarCol Toolkit.fillArea(batch, 0, 0, width, height) blendNormalStraightAlpha(batch) } } - override fun doOpening(delta: Float) {} - override fun doClosing(delta: Float) {} - override fun endOpening(delta: Float) {} - override fun endClosing(delta: Float) {} + private var openness = 0f // 0-closed, 1-opened + + override fun doOpening(delta: Float) { + openness = handler.openCloseCounter / openCloseTime + } + + override fun doClosing(delta: Float) { + openness = (openCloseTime - handler.openCloseCounter) / openCloseTime + } + + override fun endOpening(delta: Float) { + openness = 1f + } + + override fun endClosing(delta: Float) { + openness = 0f + } + override fun dispose() { } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt index cc1a26234..7ab0f07c0 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt @@ -77,7 +77,6 @@ internal class UIStorageChest : UICanvas( override var width = App.scr.width override var height = App.scr.height - override var openCloseTime: Second = 0.0f private val negotiator = object : InventoryTransactionNegotiator() { override fun accept(player: FixtureInventory, fixture: FixtureInventory, item: GameItem, amount: Long) { @@ -227,7 +226,7 @@ internal class UIStorageChest : UICanvas( override fun renderUI(batch: SpriteBatch, camera: Camera) { // background fill - UIInventoryFull.drawBackground(batch) + UIInventoryFull.drawBackground(batch, handler.opacity) // UI items batch.color = Color.WHITE diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/UICrafting.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/UICrafting.kt index 0d0de1c12..20e8c7040 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/UICrafting.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/UICrafting.kt @@ -33,7 +33,6 @@ class UICrafting(val full: UIInventoryFull) : UICanvas(), HasInventory { override var width = App.scr.width override var height = App.scr.height - override var openCloseTime: Second = 0.0f private val itemListPlayer: UIItemInventoryItemGrid private val itemListCraftable: UIItemCraftingCandidateGrid // might be changed to something else @@ -515,21 +514,24 @@ class UICrafting(val full: UIInventoryFull) : UICanvas(), HasInventory { } override fun doOpening(delta: Float) { + super.doOpening(delta) resetUI() - INGAME.setTooltipMessage(null) } override fun doClosing(delta: Float) { + super.doClosing(delta) INGAME.setTooltipMessage(null) } override fun endOpening(delta: Float) { + super.endOpening(delta) UIItemInventoryItemGrid.tooltipShowing.clear() INGAME.setTooltipMessage(null) // required! } override fun endClosing(delta: Float) { + super.endClosing(delta) resetUI() UIItemInventoryItemGrid.tooltipShowing.clear() INGAME.setTooltipMessage(null) // required! diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt index c9fe0a526..6eb962676 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt @@ -18,7 +18,6 @@ class UIGraphicsControlPanel(remoCon: UIRemoCon?) : UICanvas() { override var width = 400 override var height = 400 - override var openCloseTime = 0f private val spinnerWidth = 140 private val drawX = (Toolkit.drawWidth - width) / 2 @@ -141,26 +140,6 @@ class UIGraphicsControlPanel(remoCon: UIRemoCon?) : UICanvas() { } } - override fun show() { - super.show() - } - - override fun hide() { - super.hide() - } - - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIIMEConfig.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIIMEConfig.kt index f9dfd259d..ea32fe7c9 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIIMEConfig.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIIMEConfig.kt @@ -20,7 +20,6 @@ class UIIMEConfig(remoCon: UIRemoCon?) : UICanvas() { override var width = 480 override var height = 600 - override var openCloseTime = 0f private val drawX = (Toolkit.drawWidth - width) / 2 @@ -208,18 +207,6 @@ class UIIMEConfig(remoCon: UIRemoCon?) : UICanvas() { } } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryCells.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryCells.kt index 764b7db88..d03cfe843 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryCells.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryCells.kt @@ -4,6 +4,7 @@ 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.printdbg import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.CELLS_HOR @@ -23,7 +24,6 @@ internal class UIInventoryCells( override var width: Int = Toolkit.drawWidth override var height: Int = App.scr.height - override var openCloseTime: Second = 0.0f companion object { val weightBarWidth = UIItemInventoryElemSimple.height * 2f + UIItemInventoryItemGrid.listGap @@ -144,16 +144,9 @@ internal class UIInventoryCells( INGAME.setTooltipMessage(null) } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } override fun endClosing(delta: Float) { + super.endClosing(delta) UIItemInventoryItemGrid.tooltipShowing.clear() INGAME.setTooltipMessage(null) } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt index b79f08809..af3626f68 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryEscMenu.kt @@ -27,7 +27,6 @@ class UIInventoryEscMenu(val full: UIInventoryFull) : UICanvas() { override var width: Int = Toolkit.drawWidth override var height: Int = App.scr.height - override var openCloseTime = 0.0f private val gameMenu = arrayOf( "MENU_IO_SAVE_GAME", @@ -300,18 +299,18 @@ class UIInventoryEscMenu(val full: UIInventoryFull) : UICanvas() { } } - override fun doOpening(delta: Float) { - } - override fun doClosing(delta: Float) { + super.doClosing(delta) screen = 0 } override fun endOpening(delta: Float) { + super.endOpening(delta) INGAME.setTooltipMessage(null) } override fun endClosing(delta: Float) { + super.endClosing(delta) screen = 0 UIItemInventoryItemGrid.tooltipShowing.clear() INGAME.setTooltipMessage(null) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt index bb0dbe7c6..076a824ba 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.ShapeRenderer +import com.jme3.math.FastMath import net.torvald.terrarum.* import net.torvald.terrarum.App.* import net.torvald.terrarum.langpack.Lang @@ -29,7 +30,6 @@ class UIInventoryFull( override var width: Int = Toolkit.drawWidth override var height: Int = App.scr.height - override var openCloseTime: Second = 0.0f companion object { private var shapeRenderer: ShapeRenderer? = null @@ -63,7 +63,10 @@ class UIInventoryFull( val controlHelpHeight = App.fontGame.lineHeight - fun drawBackground(batch: SpriteBatch) { + private val gsta = Color(gradStartCol) + private val gend = Color(gradEndCol) + + fun drawBackground(batch: SpriteBatch, opacity: Float) { batch.end() gdxBlendNormalStraightAlpha() @@ -82,15 +85,17 @@ class UIInventoryFull( val w = App.scr.wf * magn val h = App.scr.hf * magn + gsta.a = 0.375f * opacity + gend.a = 0.4375f * opacity shapeRenderer!!.inUse { // shaperender starts at bottom-left! - it.rect(0f, gradTopStart, w, gradHeight, gradStartCol, gradStartCol, gradEndCol, gradEndCol) - it.rect(0f, gradBottomEnd, w, -gradHeight, gradStartCol, gradStartCol, gradEndCol, gradEndCol) + it.rect(0f, gradTopStart, w, gradHeight, gsta, gsta, gend, gend) + it.rect(0f, gradBottomEnd, w, -gradHeight, gsta, gsta, gend, gend) - it.rect(0f, gradTopStart + gradHeight, w, gradHeightFlat, gradEndCol, gradEndCol, gradEndCol, gradEndCol) + it.rect(0f, gradTopStart + gradHeight, w, gradHeightFlat, gend, gend, gend, gend) - it.rect(0f, 0f, w, gradTopStart, gradStartCol, gradStartCol, gradStartCol, gradStartCol) - it.rect(0f, h, w, -(h - gradBottomEnd), gradStartCol, gradStartCol, gradStartCol, gradStartCol) + it.rect(0f, 0f, w, gradTopStart, gsta, gsta, gsta, gsta) + it.rect(0f, h, w, -(h - gradBottomEnd), gsta, gsta, gsta, gsta) } batch.begin() @@ -275,7 +280,7 @@ class UIInventoryFull( override fun renderUI(batch: SpriteBatch, camera: Camera) { - drawBackground(batch) + drawBackground(batch, handler.opacity) // UI items catBar.render(batch, camera) @@ -308,19 +313,28 @@ class UIInventoryFull( } override fun doOpening(delta: Float) { + super.doOpening(delta) + transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) } INGAME.pause() INGAME.setTooltipMessage(null) } override fun doClosing(delta: Float) { + super.doClosing(delta) + transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) } INGAME.resume() INGAME.setTooltipMessage(null) + } override fun endOpening(delta: Float) { + super.endOpening(delta) + transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) } } override fun endClosing(delta: Float) { + super.endClosing(delta) + transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) } INGAME.setTooltipMessage(null) // required! // MinimapComposer.revalidateAll() diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt index d4cc865fb..e1e9a2b99 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt @@ -20,7 +20,6 @@ class UIKeyboardControlPanel(remoCon: UIRemoCon?) : UICanvas() { override var width = 480 override var height = 600 - override var openCloseTime = 0f private val drawX = (Toolkit.drawWidth - width) / 2 @@ -231,18 +230,6 @@ class UIKeyboardControlPanel(remoCon: UIRemoCon?) : UICanvas() { return true } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt index 366e4b9c5..136544b59 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt @@ -100,7 +100,7 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() { override var height: Int get() = App.scr.height set(value) {} - override var openCloseTime: Second = 0f + override var openCloseTime: Second = OPENCLOSE_GENERIC private val shapeRenderer = ShapeRenderer() @@ -434,16 +434,8 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() { return true } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - override fun endClosing(delta: Float) { + super.endClosing(delta) listScroll = 0 scrollTarget = 0 uiScroll = 0f diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt index b43ecc0ad..353d2952e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewCharacter.kt @@ -25,7 +25,6 @@ class UINewCharacter(val remoCon: UIRemoCon) : UICanvas() { override var width = 480 override var height = 480 - override var openCloseTime: Second = 0f private val drawX = (Toolkit.drawWidth - width) / 2 private val drawY = (App.scr.height - height) / 2 @@ -117,18 +116,6 @@ class UINewCharacter(val remoCon: UIRemoCon) : UICanvas() { uiItems.forEach { it.render(batch, camera) } } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt index fa7be87c5..8d32479fd 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UINewWorld.kt @@ -38,7 +38,6 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() { override var width = 480 override var height = 480 - override var openCloseTime: Second = 0f private val drawX = (Toolkit.drawWidth - width) / 2 private val drawY = (App.scr.height - height) / 2 @@ -156,18 +155,6 @@ class UINewWorld(val remoCon: UIRemoCon) : UICanvas() { uiItems.forEach { it.render(batch, camera) } } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { hugeTex.texture.dispose() largeTex.texture.dispose() diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt index 2a59c7df8..1968ca3b2 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIQuickslotBar.kt @@ -144,23 +144,6 @@ class UIQuickslotBar : UICanvas() { } - - override fun doOpening(delta: Float) { - handler.opacity = handler.openCloseCounter / openCloseTime - } - - override fun doClosing(delta: Float) { - handler.opacity = (openCloseTime - handler.openCloseCounter) / openCloseTime - } - - override fun endOpening(delta: Float) { - handler.opacity = 1f - } - - override fun endClosing(delta: Float) { - handler.opacity = 0f - } - override fun dispose() { } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt index 1c2cbd86a..999bb7c31 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt @@ -18,8 +18,6 @@ class UITitleLanguage(remoCon: UIRemoCon?) : UICanvas() { ) - override var openCloseTime: Second = 0f - private val textButtonLineHeight = 32 @@ -120,17 +118,6 @@ class UITitleLanguage(remoCon: UIRemoCon?) : UICanvas() { initialMouseBlock = true } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } override fun dispose() { } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt index beb2ba99d..fde9edd4a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleModules.kt @@ -29,7 +29,6 @@ class UITitleModules(val remoCon: UIRemoCon) : UICanvas() { override var height: Int get() = App.scr.height set(value) {} - override var openCloseTime: Second = 0f @@ -236,16 +235,9 @@ class UITitleModules(val remoCon: UIRemoCon) : UICanvas() { } return true } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } override fun endClosing(delta: Float) { + super.endClosing(delta) listScroll = 0 scrollTarget = 0 uiScroll = 0f diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleWallOfText.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleWallOfText.kt index 328069d92..6e1afb379 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleWallOfText.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleWallOfText.kt @@ -11,8 +11,6 @@ import net.torvald.terrarum.ui.UIItemTextArea open class UITitleWallOfText(private val text: List) : UICanvas() { - override var openCloseTime: Second = 0f - private val textAreaHMargin = 48 override var width = 600 @@ -40,18 +38,6 @@ open class UITitleWallOfText(private val text: List) : UICanvas() { //AppLoader.printdbg(this, "Rendering texts of length ${text.size}") } - override fun doOpening(delta: Float) { - } - - override fun doClosing(delta: Float) { - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - override fun dispose() { } } diff --git a/src/net/torvald/terrarum/ui/Toolkit.kt b/src/net/torvald/terrarum/ui/Toolkit.kt index 21e0d6e40..6f80e9d58 100644 --- a/src/net/torvald/terrarum/ui/Toolkit.kt +++ b/src/net/torvald/terrarum/ui/Toolkit.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.FloatFrameBuffer import com.badlogic.gdx.utils.Disposable +import com.jme3.math.FastMath import net.torvald.random.HQRNG import net.torvald.terrarum.* import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -167,13 +168,60 @@ object Toolkit : Disposable { fun blurEntireScreen(batch: SpriteBatch, camera: OrthographicCamera, blurRadius0: Float, x: Int, y: Int, w: Int, h: Int) { batch.end() - val blurRadius = blurRadius0 + val blurRadius = FastMath.pow(blurRadius0, 0.5f) val renderTarget = FrameBufferManager.peek() - /*fboBlurHalf.inAction(camera, batch) { - blurtex0 = renderTarget.colorBufferTexture - blurtex0.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) - blurtex0.bind(0) + /*if (blurRadius > 3f) { + val radius3 = (blurRadius - 3f) / 8f + fboBlurHalf.inAction(camera, batch) { + blurtex0 = renderTarget.colorBufferTexture + blurtex0.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) + blurtex0.bind(0) + shaderKawaseDown.bind() + shaderKawaseDown.setUniformMatrix("u_projTrans", camera.combined) + shaderKawaseDown.setUniformi("u_texture", 0) + shaderKawaseDown.setUniformf("halfpixel", radius3 / fboBlurHalf.width, radius3 / fboBlurHalf.height) + blurWriteQuad2.render(shaderKawaseDown, GL20.GL_TRIANGLES) + } + + fboBlurQuarter.inAction(camera, batch) { + blurtex1 = fboBlurHalf.colorBufferTexture + blurtex1.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) + blurtex1.bind(0) + shaderKawaseDown.bind() + shaderKawaseDown.setUniformMatrix("u_projTrans", camera.combined) + shaderKawaseDown.setUniformi("u_texture", 0) + shaderKawaseDown.setUniformf("halfpixel", radius3 / fboBlurQuarter.width, radius3 / fboBlurQuarter.height) + blurWriteQuad4.render(shaderKawaseDown, GL20.GL_TRIANGLES) + } + + fboBlurHalf.inAction(camera, batch) { + blurtex2 = fboBlurQuarter.colorBufferTexture + blurtex2.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) + blurtex2.bind(0) + shaderKawaseUp.bind() + shaderKawaseUp.setUniformMatrix("u_projTrans", camera.combined) + shaderKawaseUp.setUniformi("u_texture", 0) + shaderKawaseUp.setUniformf("halfpixel", radius3 / fboBlurQuarter.width, radius3 / fboBlurQuarter.height) + blurWriteQuad2.render(shaderKawaseUp, GL20.GL_TRIANGLES) + } + + fboBlur.inAction(camera, batch) { + blurtex3 = fboBlurHalf.colorBufferTexture + blurtex3.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) + blurtex3.bind(0) + shaderKawaseUp.bind() + shaderKawaseUp.setUniformMatrix("u_projTrans", camera.combined) + shaderKawaseUp.setUniformi("u_texture", 0) + shaderKawaseUp.setUniformf("halfpixel", radius3 / fboBlurHalf.width, radius3 / fboBlurHalf.height) + blurWriteQuad.render(shaderKawaseUp, GL20.GL_TRIANGLES) + } + }*/ + + fboBlurHalf.inAction(camera, batch) { + blurtex2 = renderTarget.colorBufferTexture + blurtex2.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) + blurtex2.bind(0) shaderKawaseDown.bind() shaderKawaseDown.setUniformMatrix("u_projTrans", camera.combined) shaderKawaseDown.setUniformi("u_texture", 0) @@ -181,29 +229,7 @@ object Toolkit : Disposable { blurWriteQuad2.render(shaderKawaseDown, GL20.GL_TRIANGLES) } - fboBlurQuarter.inAction(camera, batch) { - blurtex1 = fboBlurHalf.colorBufferTexture - blurtex1.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) - blurtex1.bind(0) - shaderKawaseDown.bind() - shaderKawaseDown.setUniformMatrix("u_projTrans", camera.combined) - shaderKawaseDown.setUniformi("u_texture", 0) - shaderKawaseDown.setUniformf("halfpixel", blurRadius / fboBlurQuarter.width, blurRadius / fboBlurQuarter.height) - blurWriteQuad4.render(shaderKawaseDown, GL20.GL_TRIANGLES) - } - - fboBlurHalf.inAction(camera, batch) { - blurtex2 = fboBlurQuarter.colorBufferTexture - blurtex2.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) - blurtex2.bind(0) - shaderKawaseUp.bind() - shaderKawaseUp.setUniformMatrix("u_projTrans", camera.combined) - shaderKawaseUp.setUniformi("u_texture", 0) - shaderKawaseUp.setUniformf("halfpixel", blurRadius / fboBlurQuarter.width, blurRadius / fboBlurQuarter.height) - blurWriteQuad2.render(shaderKawaseUp, GL20.GL_TRIANGLES) - } - - fboBlur.inAction(camera, batch) { + fboBlur.inAction(camera, batch) { blurtex3 = fboBlurHalf.colorBufferTexture blurtex3.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) blurtex3.bind(0) @@ -212,30 +238,6 @@ object Toolkit : Disposable { shaderKawaseUp.setUniformi("u_texture", 0) shaderKawaseUp.setUniformf("halfpixel", blurRadius / fboBlurHalf.width, blurRadius / fboBlurHalf.height) blurWriteQuad.render(shaderKawaseUp, GL20.GL_TRIANGLES) - }*/ - - //////////////////////////////////////////////////////////////////////// - - fboBlurHalf.inAction(camera, batch) { - blurtex2 = renderTarget.colorBufferTexture - blurtex2.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) - blurtex2.bind(0) - shaderBoxDown.bind() - shaderBoxDown.setUniformMatrix("u_projTrans", camera.combined) - shaderBoxDown.setUniformi("u_texture", 0) - shaderBoxDown.setUniformf("halfpixel", blurRadius / fboBlurHalf.width, blurRadius / fboBlurHalf.height) - blurWriteQuad2.render(shaderBoxDown, GL20.GL_TRIANGLES) - } - - fboBlur.inAction(camera, batch) { - blurtex3 = fboBlurHalf.colorBufferTexture - blurtex3.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear) - blurtex3.bind(0) - shaderBoxUp.bind() - shaderBoxUp.setUniformMatrix("u_projTrans", camera.combined) - shaderBoxUp.setUniformi("u_texture", 0) - shaderBoxUp.setUniformf("halfpixel", blurRadius / fboBlurHalf.width, blurRadius / fboBlurHalf.height) - blurWriteQuad.render(shaderBoxUp, GL20.GL_TRIANGLES) } diff --git a/src/net/torvald/terrarum/ui/UICanvas.kt b/src/net/torvald/terrarum/ui/UICanvas.kt index 94bc017af..7594b3556 100644 --- a/src/net/torvald/terrarum/ui/UICanvas.kt +++ b/src/net/torvald/terrarum/ui/UICanvas.kt @@ -91,7 +91,7 @@ abstract class UICanvas( * * Timer itself is implemented in the ui.handler. */ - abstract var openCloseTime: Second + open var openCloseTime: Second = OPENCLOSE_GENERIC protected val uiItems = ArrayList() @@ -117,8 +117,8 @@ abstract class UICanvas( handler.update(this, delta) } /** Called by the screen */ - fun render(batch: SpriteBatch, camera: Camera) { - handler.render(this, batch, camera) + fun render(batch: SpriteBatch, camera: Camera, parentOpacity: Float = 1f) { + handler.render(this, batch, camera, parentOpacity) } @@ -152,22 +152,30 @@ abstract class UICanvas( /** * Do not modify ui.handler.openCloseCounter here. */ - abstract fun doOpening(delta: Float) + open fun doOpening(delta: Float) { + handler.opacity = handler.openCloseCounter / openCloseTime + } /** * Do not modify ui.handler.openCloseCounter here. */ - abstract fun doClosing(delta: Float) + open fun doClosing(delta: Float) { + handler.opacity = (openCloseTime - handler.openCloseCounter) / openCloseTime + } /** * Do not modify ui.handler.openCloseCounter here. */ - abstract fun endOpening(delta: Float) + open fun endOpening(delta: Float) { + handler.opacity = 1f + } /** * Do not modify ui.handler.openCloseCounter here. */ - abstract fun endClosing(delta: Float) + open fun endClosing(delta: Float) { + handler.opacity = 0f + } abstract override fun dispose() @@ -328,7 +336,7 @@ abstract class UICanvas( } companion object { - const val OPENCLOSE_GENERIC = 0.2f + const val OPENCLOSE_GENERIC = 0.0666f fun doOpeningFade(ui: UICanvas, openCloseTime: Second) { ui.handler.opacity = maxOf(0f, ui.handler.openCloseCounter - 0.02f) / openCloseTime // fade start 1/50 sec late, it's intended diff --git a/src/net/torvald/terrarum/ui/UIHandler.kt b/src/net/torvald/terrarum/ui/UIHandler.kt index 9287d6018..32da5cd54 100644 --- a/src/net/torvald/terrarum/ui/UIHandler.kt +++ b/src/net/torvald/terrarum/ui/UIHandler.kt @@ -271,7 +271,7 @@ void main() { subUIs.forEach { it.update(delta) } } - fun render(ui: UICanvas, batch: SpriteBatch, camera: Camera) { + fun render(ui: UICanvas, batch: SpriteBatch, camera: Camera, parentOpacity: Float) { if (isVisible) { // camera SHOULD BE CENTERED to HALFX and HALFY (see StateInGame) // @@ -290,7 +290,7 @@ void main() { batch.color = Color.WHITE batch.shader = shader - shader.setUniformf("opacity", opacity) + shader.setUniformf("opacity", opacity * parentOpacity) ui.renderUI(batch, camera) //ingameGraphics.flush() diff --git a/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt b/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt index a304ab8bb..461012c26 100644 --- a/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt +++ b/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt @@ -18,7 +18,7 @@ class UIItemHorizontalFadeSlide( //transitionLength: Float, currentPosition: Float, vararg uis: UICanvas -) : UIItemTransitionContainer(parent, initialX, initialY, width, height, 0.15f, currentPosition, uis) { +) : UIItemTransitionContainer(parent, initialX, initialY, width, height, 0.10f, currentPosition, uis) { fun getOffX(index: Int) = ((currentPosition - index) * width / 2f).roundToInt() fun getOpacity(index: Int) = 1f - (currentPosition - index).absoluteValue.coerceIn(0f, 1f) diff --git a/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt b/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt index c9ef9fe47..ee9d0934c 100644 --- a/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt +++ b/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt @@ -5,9 +5,10 @@ import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.App +import net.torvald.terrarum.App.printdbg open class UIItemTransitionContainer( - parent: UICanvas, + private val parent: UICanvas, initialX: Int, initialY: Int, override val width: Int, @@ -77,7 +78,7 @@ open class UIItemTransitionContainer( uis.forEachIndexed { index, ui -> if (currentPosition > index - 1 + epsilon && currentPosition < index + 1 - epsilon) { if (!ui.isOpened && !ui.isOpening) ui.setAsOpen() - ui.render(batch, camera) + ui.render(batch, camera, parent.opacity) if (debugvals) { App.fontSmallNumbers.draw(batch, "$index", 300f + (20 * index), 10f)