From b57486e9d7a0e3ed141fa859cef4f893a323aaf2 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 12 Mar 2021 12:44:27 +0900 Subject: [PATCH] storage chest wip --- .../torvald/terrarum/UIItemInventoryCatBar.kt | 5 +- .../gameactors/FixtureCraftingTable.kt | 83 ------------ .../gameactors/FixtureStorageChest.kt | 128 ++++++++++++++++++ .../gameitems/ItemCraftingTable.kt | 8 +- .../modulebasegame/ui/HasInventory.kt | 9 ++ .../modulebasegame/ui/InventoryNegotiator.kt | 15 ++ .../ui/UIItemInventoryItemGrid.kt | 10 +- 7 files changed, 163 insertions(+), 95 deletions(-) delete mode 100644 src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt create mode 100644 src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt create mode 100644 src/net/torvald/terrarum/modulebasegame/ui/HasInventory.kt create mode 100644 src/net/torvald/terrarum/modulebasegame/ui/InventoryNegotiator.kt diff --git a/src/net/torvald/terrarum/UIItemInventoryCatBar.kt b/src/net/torvald/terrarum/UIItemInventoryCatBar.kt index 495706efa..ff89cebee 100644 --- a/src/net/torvald/terrarum/UIItemInventoryCatBar.kt +++ b/src/net/torvald/terrarum/UIItemInventoryCatBar.kt @@ -31,8 +31,6 @@ class UIItemInventoryCatBar( const val CAT_ALL = "__all__" } - //private val parentInventory = parentUI - 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 @@ -244,7 +242,6 @@ class UIItemInventoryCatBar( if (transitionFired) { transitionFired = false - //parentInventory.requestTransition(selectedPanel) transitionReqFun(selectedPanel) } } @@ -280,7 +277,7 @@ class UIItemInventoryCatBar( override fun dispose() { underlineIndTex.dispose() - catIcons.dispose() + //catIcons.dispose() // disposed of by the AppLoader mainButtons.forEach { it.dispose() } sideButtons.forEach { it.dispose() } } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt deleted file mode 100644 index 68a0d145f..000000000 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureCraftingTable.kt +++ /dev/null @@ -1,83 +0,0 @@ -package net.torvald.terrarum.modulebasegame.gameactors - -import com.badlogic.gdx.graphics.Camera -import com.badlogic.gdx.graphics.Color -import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.CommonResourcePool -import net.torvald.terrarum.Second -import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.gameactors.AVKey -import net.torvald.terrarum.ui.UICanvas -import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack - -/** - * Created by minjaesong on 2019-07-08. - */ -internal class FixtureCraftingTable : FixtureBase( - BlockBox(BlockBox.ALLOW_MOVE_DOWN, 1, 1), - mainUI = UICraftingTable -) { - - init { - setHitboxDimension(16, 16, 0, 0) - - makeNewSprite(TextureRegionPack(CommonResourcePool.getAsTextureRegion("itemplaceholder_16").texture, 16, 16)) - sprite!!.setRowsAndFrames(1, 1) - - actorValue[AVKey.BASEMASS] = MASS - } - - companion object { - const val MASS = 2.0 - } -} - - -internal object UICraftingTable : UICanvas() { - override var width = 512 - override var height = 512 - override var openCloseTime: Second = 0.0f - - init { - handler.allowESCtoClose = true - } - - /*private val itemList = UIItemInventoryDynamicList = - UIItemInventoryDynamicList( - full, - full.actor.inventory, - full.INVENTORY_CELLS_OFFSET_X, - full.INVENTORY_CELLS_OFFSET_Y, - full.CELLS_HOR, full.CELLS_VRT - )*/ - - override fun updateUI(delta: Float) { - - } - - override fun renderUI(batch: SpriteBatch, camera: Camera) { - - batch.color = Color.WHITE - batch.draw(CommonResourcePool.getAsTextureRegion("test_texture"), 0f, 0f) - - } - - override fun doOpening(delta: Float) { - Terrarum.ingame?.paused = true - } - - override fun doClosing(delta: Float) { - Terrarum.ingame?.paused = false - } - - override fun endOpening(delta: Float) { - } - - override fun endClosing(delta: Float) { - } - - - - override fun dispose() { - } -} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt new file mode 100644 index 000000000..742902215 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt @@ -0,0 +1,128 @@ +package net.torvald.terrarum.modulebasegame.gameactors + +import com.badlogic.gdx.graphics.Camera +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.terrarum.CommonResourcePool +import net.torvald.terrarum.Second +import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.UIItemInventoryCatBar +import net.torvald.terrarum.UIItemInventoryCatBar.Companion.CAT_ALL +import net.torvald.terrarum.gameactors.AVKey +import net.torvald.terrarum.gameitem.GameItem +import net.torvald.terrarum.modulebasegame.ui.HasInventory +import net.torvald.terrarum.modulebasegame.ui.InventoryNegotiator +import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryItemGrid +import net.torvald.terrarum.ui.UICanvas +import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack + +/** + * Created by minjaesong on 2019-07-08. + */ +internal class FixtureStorageChest : FixtureBase( + BlockBox(BlockBox.ALLOW_MOVE_DOWN, 1, 1), + mainUI = UIStorageChest +) { + + init { + setHitboxDimension(16, 16, 0, 0) + + makeNewSprite(TextureRegionPack(CommonResourcePool.getAsTextureRegion("itemplaceholder_16").texture, 16, 16)) + sprite!!.setRowsAndFrames(1, 1) + + actorValue[AVKey.BASEMASS] = MASS + } + + companion object { + const val MASS = 2.0 + } +} + + +internal object UIStorageChest : UICanvas(), HasInventory { + override var width = 512 + override var height = 512 + override var openCloseTime: Second = 0.0f + + private val negotiator = object : InventoryNegotiator { + override fun getItemFilter(): List = listOf(CAT_ALL) + + override fun accept(item: GameItem, amount: Int) { + TODO("Not yet implemented") + } + + override fun reject(item: GameItem, amount: Int) { + TODO("Not yet implemented") + } + } + + override fun getNegotiator() = negotiator + + override fun getFixtureInventory() { + TODO("Not yet implemented") + } + + override fun getPlayerInventory() { + TODO("Not yet implemented") + } + + init { + handler.allowESCtoClose = true + } + + private val catBar = UIItemInventoryCatBar( + this, + 100, + 50, + 500, + 500, + {}, + false + ) + + private val itemList = UIItemInventoryItemGrid( + this, + catBar, + Terrarum.ingame!!.actorNowPlaying!!.inventory, // just for a placeholder... + 100, + 100, + 4, 5, + drawScrollOnRightside = true, + drawWallet = true, + listRebuildFun = { itemListUpdate() } + ) + + private fun itemListUpdate() { + itemList.rebuild(catBar.catIconsMeaning[catBar.selectedIcon]) + } + + override fun updateUI(delta: Float) { + catBar.update(delta) + itemList.update(delta) + } + + override fun renderUI(batch: SpriteBatch, camera: Camera) { + batch.color = Color.WHITE + + itemList.render(batch, camera) + } + + override fun doOpening(delta: Float) { + Terrarum.ingame?.paused = true + } + + override fun doClosing(delta: Float) { + Terrarum.ingame?.paused = false + } + + override fun endOpening(delta: Float) { + } + + override fun endClosing(delta: Float) { + } + + + + override fun dispose() { + } +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt index 6216c4614..cfb098a22 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/ItemCraftingTable.kt @@ -6,13 +6,13 @@ import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.GameItem import net.torvald.terrarum.gameitem.ItemID import net.torvald.terrarum.itemproperties.Material -import net.torvald.terrarum.modulebasegame.gameactors.FixtureCraftingTable +import net.torvald.terrarum.modulebasegame.gameactors.FixtureStorageChest import net.torvald.terrarum.modulebasegame.gameactors.FixtureTikiTorch /** * Created by minjaesong on 2019-07-08. */ -class ItemCraftingTable(originalID: ItemID) : GameItem(originalID) { +class ItemStorageChest(originalID: ItemID) : GameItem(originalID) { override var dynamicID: ItemID = originalID override val originalName = "ITEM_CRAFTING_TABLE" @@ -22,7 +22,7 @@ class ItemCraftingTable(originalID: ItemID) : GameItem(originalID) { override val isUnique = false override val isDynamic = false override val material = Material() - override val itemImage: TextureRegion? + override val itemImage: TextureRegion get() = CommonResourcePool.getAsTextureRegion("itemplaceholder_16") override var baseToolSize: Double? = baseMass @@ -31,7 +31,7 @@ class ItemCraftingTable(originalID: ItemID) : GameItem(originalID) { } override fun startPrimaryUse(delta: Float): Boolean { - val item = FixtureCraftingTable() + val item = FixtureStorageChest() return item.spawn(Terrarum.mouseTileX, Terrarum.mouseTileY - item.blockBox.height + 1) // return true when placed, false when cannot be placed diff --git a/src/net/torvald/terrarum/modulebasegame/ui/HasInventory.kt b/src/net/torvald/terrarum/modulebasegame/ui/HasInventory.kt new file mode 100644 index 000000000..f6b39b9db --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/ui/HasInventory.kt @@ -0,0 +1,9 @@ +package net.torvald.terrarum.modulebasegame.ui + +interface HasInventory { + + fun getNegotiator(): InventoryNegotiator + fun getFixtureInventory() + fun getPlayerInventory() + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/InventoryNegotiator.kt b/src/net/torvald/terrarum/modulebasegame/ui/InventoryNegotiator.kt new file mode 100644 index 000000000..718e3893e --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/ui/InventoryNegotiator.kt @@ -0,0 +1,15 @@ +package net.torvald.terrarum.modulebasegame.ui + +import net.torvald.terrarum.gameitem.GameItem + +/** + * Created by minjaesong on 2021-03-12. + */ +interface InventoryNegotiator { + /** Retrieve item filter to be used to show only the acceptable items when player's own inventory is being displayed */ + fun getItemFilter(): List // GameItem.Category + /** Accepts item from the player and pass it to right inventory (object), slot (UI), etc... */ + fun accept(item: GameItem, amount: Int = 1) + /** Rejects item and perhaps returns it back to the player, or make explosion, etc... */ + fun reject(item: GameItem, amount: Int = 1) +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt index d8dd1aa35..635314b4e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIItemInventoryItemGrid.kt @@ -19,6 +19,7 @@ import net.torvald.terrarum.ui.UIItemImageButton import net.torvald.terrarum.ui.UIItemTextButton.Companion.defaultActiveCol import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import java.util.* +import kotlin.math.floor /** * Display either extended or compact list @@ -51,7 +52,6 @@ class UIItemInventoryItemGrid( override val width = horizontalCells * UIItemInventoryElemSimple.height + (horizontalCells - 1) * listGap override val height = verticalCells * UIItemInventoryElemSimple.height + (verticalCells - 1) * listGap - val largeListWidth = (horizontalCells * UIItemInventoryElemSimple.height + (horizontalCells - 2) * listGap) / 2 val backColour = CELLCOLOUR_BLACK init { @@ -128,11 +128,13 @@ class UIItemInventoryItemGrid( ) } // TODO automatically determine how much columns are needed. Minimum Width = 5 grids - private val itemList = Array(verticalCells * 2) { + private val itemListColumnCount = floor(horizontalCells / 4f).toInt().coerceAtLeast(1) + private val largeListWidth = (horizontalCells * UIItemInventoryElemSimple.height + (horizontalCells - 2) * listGap) / itemListColumnCount + private val itemList = Array(verticalCells * itemListColumnCount) { UIItemInventoryElem( parentUI = inventoryUI, - initialX = this.posX + (largeListWidth + listGap) * (it % 2), - initialY = this.posY + (UIItemInventoryElem.height + listGap) * (it / 2), + initialX = this.posX + (largeListWidth + listGap) * (it % itemListColumnCount), + initialY = this.posY + (UIItemInventoryElem.height + listGap) * (it / itemListColumnCount), width = largeListWidth, item = null, amount = UIItemInventoryElem.UNIQUE_ITEM_HAS_NO_AMOUNT,