From 87f28435ee361e92feba4706a876399044c2f312 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 6 Aug 2019 02:28:07 +0900 Subject: [PATCH] inventory lister's category setting must be held by its parent --- .../torvald/terrarum/UIItemInventoryCatBar.kt | 7 +++- .../gameactors/ActorHumanoid.kt | 8 ++-- .../modulebasegame/ui/UIInventoryFull.kt | 23 ++++++++--- .../ui/UIItemInventoryDynamicList.kt | 41 +++++++++---------- 4 files changed, 45 insertions(+), 34 deletions(-) diff --git a/src/net/torvald/terrarum/UIItemInventoryCatBar.kt b/src/net/torvald/terrarum/UIItemInventoryCatBar.kt index 7e64c9a94..46410cc0a 100644 --- a/src/net/torvald/terrarum/UIItemInventoryCatBar.kt +++ b/src/net/torvald/terrarum/UIItemInventoryCatBar.kt @@ -36,8 +36,10 @@ class UIItemInventoryCatBar( private val mainButtons: Array private val buttonGapSize = (width.toFloat() - (catArrangement.size * catIcons.tileW)) / (catArrangement.size) - var selectedIndex = 0 // default to ALL + /** raw order */ + private var selectedIndex = 0 // default to ALL private set + /** re-arranged order */ val selectedIcon: Int get() = catArrangement[selectedIndex] @@ -141,7 +143,8 @@ class UIItemInventoryCatBar( } - /** (oldIndex: Int?, newIndex: Int) -> Unit */ + /** (oldIndex: Int?, newIndex: Int) -> Unit + * Indices are raw index. That is, not re-arranged. */ var selectionChangeListener: ((Int?, Int) -> Unit)? = null override fun update(delta: Float) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt index 20424a4d0..f8f4ab714 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/ActorHumanoid.kt @@ -11,8 +11,6 @@ import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.Material -import net.torvald.terrarum.modulebasegame.TerrarumIngame -import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull import net.torvald.terrarum.realestate.LandUtil import net.torvald.terrarum.worlddrawer.LightmapRenderer import org.dyn4j.geometry.Vector2 @@ -590,14 +588,14 @@ open class ActorHumanoid( } // force update inventory UI, but when the pie menu is not open (pie menu constantly writes to the actorvalue, which will rebuildList() - try { + /*try { if (!(Terrarum.ingame!! as TerrarumIngame).uiPieMenu.isVisible) { ((Terrarum.ingame!! as TerrarumIngame).uiInventoryPlayer as UIInventoryFull).rebuildList() } } catch (LateInitMyArse: kotlin.UninitializedPropertyAccessException) { - } - + }*/ + // commented; works without it } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt index 0ab47f8b4..72986ce61 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryFull.kt @@ -11,10 +11,12 @@ import net.torvald.terrarum.* import net.torvald.terrarum.AppLoader.* import net.torvald.terrarum.blockstats.MinimapComposer import net.torvald.terrarum.gameactors.ActorWBMovable +import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory.Companion.CAPACITY_MODE_NO_ENCUMBER import net.torvald.terrarum.modulebasegame.gameactors.Pocketed +import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryDynamicList.Companion.CAT_ALL import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UIItem import net.torvald.terrarum.ui.UIItemTextButtonList @@ -57,6 +59,18 @@ class UIInventoryFull( internal val catIcons: TextureRegionPack = CommonResourcePool.getAsTextureRegionPack("inventory_caticons") internal val catArrangement: IntArray = intArrayOf(9,6,7,1,0,2,3,4,5,8) + internal val catIconsMeaning = listOf( // sortedBy: catArrangement + arrayOf(GameItem.Category.WEAPON), + arrayOf(GameItem.Category.TOOL, GameItem.Category.WIRE), + arrayOf(GameItem.Category.ARMOUR), + arrayOf(GameItem.Category.GENERIC), + arrayOf(GameItem.Category.POTION), + arrayOf(GameItem.Category.MAGIC), + arrayOf(GameItem.Category.BLOCK), + arrayOf(GameItem.Category.WALL), + arrayOf(GameItem.Category.MISC), + arrayOf(CAT_ALL) + ) private val SP = "${0x3000.toChar()} " @@ -100,10 +114,7 @@ class UIInventoryFull( 42 + (AppLoader.screenH - internalHeight) / 2, catBarWidth ) - val catSelection: Int - get() = categoryBar.selectedIndex - val catSelectedIcon: Int - get() = categoryBar.selectedIcon + override var openCloseTime: Second = 0.0f @@ -181,7 +192,7 @@ class UIInventoryFull( categoryBar.selectionChangeListener = { old, new -> rebuildList() itemList.itemPage = 0 // set scroll to zero - itemList.rebuild() // have to manually rebuild, too! + itemList.rebuild(catIconsMeaning[catArrangement[new]]) // have to manually rebuild, too! } @@ -525,7 +536,7 @@ class UIInventoryFull( fun rebuildList() { printdbg(this, "rebuilding list") - itemList.rebuild() + itemList.rebuild(catIconsMeaning[categoryBar.selectedIcon]) equipped.rebuild() encumbrancePerc = actor.inventory.capacity.toFloat() / actor.inventory.maxCapacity diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryDynamicList.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryDynamicList.kt index 8dde826a8..84756e3e8 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryDynamicList.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryDynamicList.kt @@ -4,7 +4,6 @@ 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.gameitem.GameItem import net.torvald.terrarum.gameworld.fmod import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.modulebasegame.TerrarumIngame @@ -59,7 +58,8 @@ class UIItemInventoryDynamicList( CommonResourcePool.loadAll() } - val catIconsMeaning = listOf( // sortedBy: catArrangement + // info regarding cat icon should not be here, move it to the parent call (e.g. UIInventoryFull, CraftingUI) + /*val catIconsMeaning = listOf( // sortedBy: catArrangement arrayOf(GameItem.Category.WEAPON), arrayOf(GameItem.Category.TOOL, GameItem.Category.WIRE), arrayOf(GameItem.Category.ARMOUR), @@ -69,22 +69,19 @@ class UIItemInventoryDynamicList( arrayOf(GameItem.Category.BLOCK), arrayOf(GameItem.Category.WALL), arrayOf(GameItem.Category.MISC), - arrayOf("__all__") - ) + arrayOf(CAT_ALL) + )*/ + private var currentFilter = arrayOf(CAT_ALL) private val inventoryUI = parentUI - private val selection: Int - get() = inventoryUI.catSelection - private val selectedIcon: Int - get() = inventoryUI.catSelectedIcon - - private val compactViewCat = setOf(3, 4, 6, 7, 9) // ingredients, potions, blocks, walls, all (spritesheet order) + //private val selectedIcon: Int + // get() = inventoryUI.catSelectedIcon var itemPage = 0 set(value) { field = if (itemPageCount == 0) 0 else (value).fmod(itemPageCount) - rebuild() + rebuild(currentFilter) } var itemPageCount = 1 // TODO total size of current category / items.size private set @@ -111,6 +108,8 @@ class UIItemInventoryDynamicList( fun getEstimatedW(horizontalCells: Int) = horizontalCells * UIItemInventoryElemSimple.height + (horizontalCells - 1) * listGap fun getEstimatedH(verticalCells: Int) = verticalCells * UIItemInventoryElemSimple.height + (verticalCells - 1) * listGap + + const val CAT_ALL = "__all__" } private val itemGrid = Array(horizontalCells * verticalCells) { @@ -129,7 +128,7 @@ class UIItemInventoryDynamicList( inactiveTextCol = defaultTextColour ) } - // TODO automatically determine how much columns are needed. Minimum width = 5 grids + // TODO automatically determine how much columns are needed. Minimum Width = 5 grids private val itemList = Array(verticalCells * 2) { UIItemInventoryElem( parentUI = inventoryUI, @@ -153,7 +152,7 @@ class UIItemInventoryDynamicList( var isCompactMode = false // this is INIT code set(value) { items = if (value) itemGrid else itemList - rebuild() + rebuild(currentFilter) field = value } @@ -219,14 +218,14 @@ class UIItemInventoryDynamicList( gridModeButtons[0].highlighted = true gridModeButtons[1].highlighted = false itemPage = 0 - rebuild() + rebuild(currentFilter) } gridModeButtons[1].touchDownListener = { _, _, _, _ -> isCompactMode = true gridModeButtons[0].highlighted = false gridModeButtons[1].highlighted = true itemPage = 0 - rebuild() + rebuild(currentFilter) } scrollUpButton.clickOnceListener = { _, _, _ -> @@ -333,19 +332,19 @@ class UIItemInventoryDynamicList( } - - internal fun rebuild() { + internal fun rebuild(filter: Array) { //println("Rebuilt inventory") //println("rebuild: actual itempage: $itemPage") - val filter = catIconsMeaning[selectedIcon] + //val filter = catIconsMeaning[selectedIcon] + currentFilter = filter inventorySortList = ArrayList() // filter items inventory.forEach { - if ((filter.contains(ItemCodex[it.item]!!.inventoryCategory) || filter[0] == "__all__")) + if ((filter.contains(ItemCodex[it.item]!!.inventoryCategory) || filter[0] == CAT_ALL)) inventorySortList.add(it) } @@ -440,7 +439,7 @@ class UIItemInventoryDynamicList( super.keyDown(keycode) items.forEach { if (it.mouseUp) it.keyDown(keycode) } - rebuild() + rebuild(currentFilter) return true } @@ -449,7 +448,7 @@ class UIItemInventoryDynamicList( super.keyUp(keycode) items.forEach { if (it.mouseUp) it.keyUp(keycode) } - rebuild() + rebuild(currentFilter) return true }