Updated transition system
This commit is contained in:
@@ -41,7 +41,9 @@ class InventoryGUIHolder(kSpigot: KSpigot) : AutoCloseable {
|
||||
|
||||
kSpigot.listen<InventoryClickEvent> {
|
||||
|
||||
val inv = registered.find { search -> search.isThisInv(it.inventory) } ?: return@listen
|
||||
val clickedInv = it.clickedInventory ?: return@listen
|
||||
|
||||
val inv = registered.find { search -> search.isThisInv(clickedInv) } ?: return@listen
|
||||
val invPage = inv.currentPageInt
|
||||
|
||||
val slot = inv.data.pages[invPage]?.slots?.get(it.slot)
|
||||
@@ -78,8 +80,8 @@ class InventoryGUIData<T : ForInventory>(
|
||||
val inventoryType: InventoryType<T>,
|
||||
val title: String?,
|
||||
internal val pages: Map<Int, InventoryGUIPage<T>>,
|
||||
val transitionTo: InventoryGUIPageChangeEffect?,
|
||||
val transitionFrom: InventoryGUIPageChangeEffect?,
|
||||
val transitionTo: InventoryChangeEffect?,
|
||||
val transitionFrom: InventoryChangeEffect?,
|
||||
internal val generalOnClick: ((InventoryGUIClickEvent<T>) -> Unit)?
|
||||
)
|
||||
|
||||
@@ -93,7 +95,7 @@ abstract class InventoryGUI<T : ForInventory>(
|
||||
|
||||
internal abstract val bukkitInventory: Inventory
|
||||
|
||||
internal abstract fun loadPageUnsafe(page: InventoryGUIPage<*>?, offsetHorizontally: Int = 0, offsetVertically: Int = 0)
|
||||
internal abstract fun loadPageUnsafe(page: InventoryGUIPage<*>, offsetHorizontally: Int = 0, offsetVertically: Int = 0)
|
||||
internal abstract fun loadPageUnsafe(page: Int, offsetHorizontally: Int = 0, offsetVertically: Int = 0)
|
||||
|
||||
/**
|
||||
@@ -144,9 +146,7 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
|
||||
override fun isThisInv(inventory: Inventory) = inventory == bukkitInventory
|
||||
|
||||
override fun loadPageUnsafe(page: InventoryGUIPage<*>?, offsetHorizontally: Int, offsetVertically: Int) {
|
||||
|
||||
if (page == null) return
|
||||
override fun loadPageUnsafe(page: InventoryGUIPage<*>, offsetHorizontally: Int, offsetVertically: Int) {
|
||||
|
||||
val ifOffset = offsetHorizontally != 0 || offsetVertically != 0
|
||||
|
||||
@@ -206,6 +206,6 @@ class InventoryGUIShared<T : ForInventory>(
|
||||
class InventoryGUIPage<T : ForInventory>(
|
||||
val number: Int,
|
||||
internal val slots: Map<Int, InventoryGUISlot<T>>,
|
||||
val transitionTo: InventoryGUIPageChangeEffect?,
|
||||
val transitionFrom: InventoryGUIPageChangeEffect?
|
||||
val transitionTo: PageChangeEffect?,
|
||||
val transitionFrom: PageChangeEffect?
|
||||
)
|
@@ -17,8 +17,8 @@ class InventoryGUIBuilder<T : ForInventory>(
|
||||
|
||||
var title: String = ""
|
||||
|
||||
var transitionTo: InventoryGUIPageChangeEffect? = null
|
||||
var transitionFrom: InventoryGUIPageChangeEffect? = null
|
||||
var transitionTo: InventoryChangeEffect? = null
|
||||
var transitionFrom: InventoryChangeEffect? = null
|
||||
|
||||
private val guiSlots = HashMap<Int, InventoryGUIPage<T>>()
|
||||
|
||||
@@ -50,8 +50,8 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
|
||||
private val guiSlots = HashMap<Int, InventoryGUISlot<T>>()
|
||||
|
||||
var transitionTo: InventoryGUIPageChangeEffect? = null
|
||||
var transitionFrom: InventoryGUIPageChangeEffect? = null
|
||||
var transitionTo: PageChangeEffect? = null
|
||||
var transitionFrom: PageChangeEffect? = null
|
||||
|
||||
internal fun build() = InventoryGUIPage(page, guiSlots, transitionTo, transitionFrom)
|
||||
|
||||
@@ -117,7 +117,7 @@ class InventoryGUIPageBuilder<T : ForInventory>(
|
||||
* By pressing this button, the player switches to another
|
||||
* InventoryGUI. The transition effect is applied.
|
||||
*/
|
||||
fun changeGUI(slots: InventorySlotCompound<T>, itemStack: ItemStack, newGUI: InventoryGUI<*>, newPage: Int? = null, onChange: ((InventoryGUIClickEvent<T>) -> Unit)? = null)
|
||||
fun changeGUI(slots: InventorySlotCompound<T>, itemStack: ItemStack, newGUI: () -> InventoryGUI<*>, newPage: Int? = null, onChange: ((InventoryGUIClickEvent<T>) -> Unit)? = null)
|
||||
= defineSlots(slots, InventoryGUIButtonInventoryChange(
|
||||
InventoryGUIElementData(itemStack),
|
||||
newGUI,
|
||||
|
@@ -61,7 +61,7 @@ class InventoryGUIButtonPageChange<T : ForInventory>(
|
||||
if (newPage != null) {
|
||||
|
||||
val effect = (newPage.transitionTo ?: currentPage.transitionFrom)
|
||||
?: InventoryGUIPageChangeEffect.INSTANT
|
||||
?: PageChangeEffect.INSTANT
|
||||
|
||||
it.gui.changePage(effect, currentPage, newPage)
|
||||
|
||||
@@ -73,18 +73,20 @@ class InventoryGUIButtonPageChange<T : ForInventory>(
|
||||
|
||||
class InventoryGUIButtonInventoryChange<T : ForInventory>(
|
||||
inventoryGUIElementData: InventoryGUIElementData,
|
||||
changeToGUI: InventoryGUI<*>,
|
||||
changeToGUICallback: () -> InventoryGUI<*>,
|
||||
changeToPageInt: Int?,
|
||||
onChange: ((InventoryGUIClickEvent<T>) -> Unit)?
|
||||
)
|
||||
: InventoryGUIButton<T>(inventoryGUIElementData, {
|
||||
|
||||
val changeToGUI = changeToGUICallback.invoke()
|
||||
|
||||
val effect = (changeToGUI.data.transitionTo ?: it.gui.data.transitionFrom)
|
||||
?: InventoryGUIPageChangeEffect.INSTANT
|
||||
?: InventoryChangeEffect.INSTANT
|
||||
|
||||
val changeToPage = changeToGUI.getPage(changeToPageInt) ?: changeToGUI.currentPage
|
||||
|
||||
changeToGUI.changePage(effect, it.gui.currentPage, changeToPage)
|
||||
changeToGUI.changeGUI(effect, it.gui.currentPage, changeToPage)
|
||||
|
||||
it.bukkitEvent.whoClicked.openGUI(changeToGUI)
|
||||
|
||||
|
@@ -23,7 +23,7 @@ abstract class InventoryGUIPageChangeCalculator {
|
||||
|
||||
}
|
||||
|
||||
enum class InventoryGUIPageChangeEffect {
|
||||
enum class PageChangeEffect {
|
||||
INSTANT,
|
||||
SLIDE_HORIZONTALLY,
|
||||
SLIDE_VERTICALLY,
|
||||
@@ -31,16 +31,26 @@ enum class InventoryGUIPageChangeEffect {
|
||||
SWIPE_VERTICALLY,
|
||||
}
|
||||
|
||||
internal fun InventoryGUI<*>.changePage(effect: InventoryGUIPageChangeEffect, fromPage: InventoryGUIPage<*>?, toPage: InventoryGUIPage<*>?) {
|
||||
enum class InventoryChangeEffect(
|
||||
val effect: PageChangeEffect
|
||||
) {
|
||||
INSTANT(PageChangeEffect.INSTANT)
|
||||
}
|
||||
|
||||
val fromPageInt = fromPage?.number ?: 0
|
||||
val toPageInt = toPage?.number ?: 0
|
||||
internal fun InventoryGUI<*>.changePage(
|
||||
effect: PageChangeEffect,
|
||||
fromPage: InventoryGUIPage<*>,
|
||||
toPage: InventoryGUIPage<*>
|
||||
) {
|
||||
|
||||
val fromPageInt = fromPage.number
|
||||
val toPageInt = toPage.number
|
||||
|
||||
when (effect) {
|
||||
|
||||
InventoryGUIPageChangeEffect.INSTANT -> loadPageUnsafe(toPage)
|
||||
PageChangeEffect.INSTANT -> loadPageUnsafe(toPage)
|
||||
|
||||
InventoryGUIPageChangeEffect.SLIDE_HORIZONTALLY -> {
|
||||
PageChangeEffect.SLIDE_HORIZONTALLY -> {
|
||||
|
||||
val width = data.inventoryType.dimensions.width
|
||||
|
||||
@@ -56,7 +66,7 @@ internal fun InventoryGUI<*>.changePage(effect: InventoryGUIPageChangeEffect, fr
|
||||
|
||||
}
|
||||
|
||||
InventoryGUIPageChangeEffect.SLIDE_VERTICALLY -> {
|
||||
PageChangeEffect.SLIDE_VERTICALLY -> {
|
||||
|
||||
val height = data.inventoryType.dimensions.heigth
|
||||
|
||||
@@ -72,7 +82,7 @@ internal fun InventoryGUI<*>.changePage(effect: InventoryGUIPageChangeEffect, fr
|
||||
|
||||
}
|
||||
|
||||
InventoryGUIPageChangeEffect.SWIPE_HORIZONTALLY -> {
|
||||
PageChangeEffect.SWIPE_HORIZONTALLY -> {
|
||||
|
||||
val width = data.inventoryType.dimensions.width
|
||||
|
||||
@@ -86,7 +96,7 @@ internal fun InventoryGUI<*>.changePage(effect: InventoryGUIPageChangeEffect, fr
|
||||
|
||||
}
|
||||
|
||||
InventoryGUIPageChangeEffect.SWIPE_VERTICALLY -> {
|
||||
PageChangeEffect.SWIPE_VERTICALLY -> {
|
||||
|
||||
val height = data.inventoryType.dimensions.heigth
|
||||
|
||||
@@ -103,6 +113,12 @@ internal fun InventoryGUI<*>.changePage(effect: InventoryGUIPageChangeEffect, fr
|
||||
}
|
||||
}
|
||||
|
||||
internal fun InventoryGUI<*>.changeGUI(
|
||||
effect: InventoryChangeEffect,
|
||||
fromPage: InventoryGUIPage<*>,
|
||||
toPage: InventoryGUIPage<*>
|
||||
) = changePage(effect.effect, fromPage, toPage)
|
||||
|
||||
private inline fun changePageEffect(
|
||||
kSpigot: KSpigot,
|
||||
fromPage: Int,
|
||||
|
Reference in New Issue
Block a user