default ui open/close transition is now quick-fade

This commit is contained in:
minjaesong
2023-01-06 18:57:18 +09:00
parent 53dee515fe
commit 02bdb2a4fc
22 changed files with 141 additions and 246 deletions

View File

@@ -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)
}

View File

@@ -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<UIItem>()
@@ -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

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)