diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt index 1db431ceb..b857b9c0a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt @@ -214,13 +214,15 @@ class UIInventoryFull( private val transitionalItemCells = UIInventoryCells(this) private val transitionalEscMenu = UIInventoryEscMenu(this) private val transitionPanel = UIItemHorizontalFadeSlide( - this, - (width - internalWidth) / 2, - INVENTORY_CELLS_OFFSET_Y(), - width, - App.scr.height, - 1f, - transitionalCraftingUI, transitionalItemCells, transitionalEscMenu + this, + (width - internalWidth) / 2, + INVENTORY_CELLS_OFFSET_Y(), + width, + App.scr.height, + 1f, + listOf(transitionalCraftingUI), + listOf(transitionalItemCells), + listOf(transitionalEscMenu) ) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt index 37bd15ea7..2a8a4cb47 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadSavegame.kt @@ -176,17 +176,12 @@ class UILoadSavegame(val remoCon: UIRemoCon) : Advanceable() { width, App.scr.height, 0f, - transitionalListing, transitionalManage + listOf(transitionalListing), + listOf(transitionalManage, transitionalAutosave, transitionalNewCharacter) ) init { - listOf(transitionalAutosave, transitionalManage, transitionalNewCharacter).forEach { - it.posX = (-width / 2f).roundToInt() - it.initialX = (-width / 2f).roundToInt() - it.posY = 0 - it.initialY = 0 - it.opacity = 0f - } + } private fun getDrawTextualInfoFun(disks: DiskPair): (UIItem, SpriteBatch) -> Unit { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt index fab159f34..b3a1e3770 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt @@ -64,7 +64,9 @@ class UIWorldPortal : UICanvas( width, App.scr.height, 0f, - transitionalListing, transitionalSearch + listOf(transitionalListing), + listOf(), + listOf() ) /** diff --git a/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt b/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt index edce57042..88fdb9ff8 100644 --- a/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt +++ b/src/net/torvald/terrarum/ui/UIItemHorizontalFadeSlide.kt @@ -2,42 +2,78 @@ package net.torvald.terrarum.ui import com.jme3.math.FastMath import net.torvald.terrarum.INGAME +import net.torvald.terrarum.modulebasegame.ui.NullUI import kotlin.math.absoluteValue import kotlin.math.roundToInt /** + * Three virtual slide panels for horizontal sliding transition. + * + * The left/centre/right designation is arbitrary: you can have "left" as a centre (main) and the "centre" as a right (aux) + * * @param width size of the canvas where transition occurs * @param height size of the canvas where transition occurs */ class UIItemHorizontalFadeSlide( - parent: UICanvas, - initialX: Int, - initialY: Int, - width: Int, - height: Int, + parent: UICanvas, + initialX: Int, + initialY: Int, + width: Int, + height: Int, //transitionLength: Float, - currentPosition: Float, - vararg uis: UICanvas -) : UIItemTransitionContainer(parent, initialX, initialY, width, height, 0.12f, currentPosition, uis) { + currentPosition: Float, + private val uisOnLeft: List, + private val uisOnCentre: List, + private val uisOnRight: List = emptyList(), +) : UIItemTransitionContainer(parent, initialX, initialY, width, height, 0.12f, currentPosition, emptyList()) { - fun getOffX(index: Int) = ((currentPosition - index) * width / 2f).roundToInt() + fun getOffX(index: Int) = -((currentPosition - index) * width / 2f).roundToInt() fun getOpacity(index: Int) = 1f - (currentPosition - index).absoluteValue.coerceIn(0f, 1f) + private var leftUI: UICanvas = uisOnLeft.firstOrNull() ?: NullUI + private var centreUI: UICanvas = uisOnCentre.firstOrNull() ?: NullUI + private var rightUI: UICanvas = uisOnRight.firstOrNull() ?: NullUI + + override val uis: List; get() = listOf(leftUI, centreUI, rightUI) + + fun setLeftUI(index: Int) { + leftUI = uisOnLeft[index] + } + fun setCentreUI(index: Int) { + centreUI = uisOnCentre[index] + } + fun setRightUI(index: Int) { + rightUI = uisOnRight[index] + } init { // re-position the uis according to the initial choice of currentPosition - uis.forEachIndexed { index, it -> - it.posX = 0 + getOffX(index) - it.initialX = 0 + getOffX(index) + uisOnLeft.forEachIndexed { index, it -> + it.posX = getOffX(0) + it.initialX = getOffX(0) it.posY = 0 it.initialY = 0 - it.opacity = getOpacity(index) + it.opacity = getOpacity(0) + } + uisOnCentre.forEachIndexed { index, it -> + it.posX = getOffX(1) + it.initialX = getOffX(1) + it.posY = 0 + it.initialY = 0 + it.opacity = getOpacity(1) + } + uisOnRight.forEachIndexed { index, it -> + it.posX = getOffX(2) + it.initialX = getOffX(2) + it.posY = 0 + it.initialY = 0 + it.opacity = getOpacity(2) } } - override fun onTransition(currentPosition: Float, uis: Array) { + override fun onTransition(currentPosition: Float, uis: List) { uis.forEachIndexed { index, it -> - it.posX = -getOffX(index) + it.posX = getOffX(index) it.posY = it.initialY it.opacity = getOpacity(index) } diff --git a/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt b/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt index ee9d0934c..dce855574 100644 --- a/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt +++ b/src/net/torvald/terrarum/ui/UIItemTransitionContainer.kt @@ -8,14 +8,14 @@ import net.torvald.terrarum.App import net.torvald.terrarum.App.printdbg open class UIItemTransitionContainer( - private val parent: UICanvas, - initialX: Int, - initialY: Int, - override val width: Int, - override val height: Int, - val transitionLength: Float = 0.15f, - var currentPosition: Float = 0f, - val uis: Array + private val parent: UICanvas, + initialX: Int, + initialY: Int, + override val width: Int, + override val height: Int, + val transitionLength: Float = 0.15f, + var currentPosition: Float = 0f, + open val uis: List ) : UIItem(parent, initialX, initialY) { val debugvals = false @@ -51,7 +51,7 @@ open class UIItemTransitionContainer( uis.forEachIndexed { index, ui -> if (timeToUpdate(index)) ui.update(delta) } } - open fun onTransition(currentPosition: Float, uis: Array) {} + open fun onTransition(currentPosition: Float, uis: List) {} override fun render(batch: SpriteBatch, camera: Camera) { super.render(batch, camera)