inventory ui transition wip

This commit is contained in:
minjaesong
2020-08-30 16:09:42 +09:00
parent dd1989320d
commit 7a58cf9edb
30 changed files with 415 additions and 217 deletions

View File

@@ -0,0 +1,95 @@
package net.torvald.terrarum.ui
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.AppLoader
open class UIItemTransitionContainer(
parent: UICanvas,
initialX: Int,
initialY: Int,
override val width: Int,
override val height: Int,
val transitionLength: Float = 0.212f,
var currentPosition: Float = 0f,
val uis: Array<out UICanvas>
) : UIItem(parent, initialX, initialY) {
val debugvals = true
private var transitionRequested = false
private var transitionOngoing = false
private var transitionReqSource = currentPosition
private var transitionReqTarget = currentPosition
private var transitionTimer = 0f
private val epsilon = 0.001f
fun requestTransition(target: Int) {
if (!transitionOngoing) {
transitionRequested = true
transitionReqSource = Math.round(currentPosition).toFloat()
transitionReqTarget = target.toFloat()
}
}
override fun update(delta: Float) {
super.update(delta)
uis.forEachIndexed { index, ui ->
if (currentPosition > index - 1 + epsilon && currentPosition < index + 1 - epsilon) {
ui.update(delta)
}
}
}
open fun onTransition(currentPosition: Float, uis: Array<out UICanvas>) {}
override fun render(batch: SpriteBatch, camera: Camera) {
super.render(batch, camera)
if (transitionRequested && !transitionOngoing) {
transitionRequested = false
transitionOngoing = true
transitionTimer = 0f
}
if (transitionOngoing) {
transitionTimer += Gdx.graphics.rawDeltaTime
currentPosition = UIUtils.moveLinear(transitionReqSource, transitionReqTarget, transitionTimer, transitionLength)
if (transitionTimer > transitionLength) {
transitionOngoing = false
currentPosition = transitionReqTarget
}
onTransition(currentPosition, uis)
}
uis.forEachIndexed { index, ui ->
if (currentPosition > index - 1 + epsilon && currentPosition < index + 1 - epsilon) {
ui.setAsOpen()
ui.render(batch, camera)
if (debugvals) {
AppLoader.fontSmallNumbers.draw(batch, "$index", 300f + (20 * index), 10f)
}
}
else {
ui.setAsClose()
}
}
if (debugvals) {
batch.color = Color.WHITE
AppLoader.fontSmallNumbers.draw(batch, "position:$currentPosition", 500f, 10f)
}
}
override fun dispose() {
uis.forEach { it.dispose() }
}
}