From bf626e35da1349aa7268f7b2db217c56c477e75a Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 26 Nov 2024 22:29:48 +0900 Subject: [PATCH] buttons for crafting/techtree transition --- .../terrarum/modulebasegame/ui/UICrafting.kt | 109 ++++++++++++++++-- .../modulebasegame/ui/UICraftingWorkbench.kt | 39 +------ .../terrarum/modulebasegame/ui/UITechView.kt | 50 +------- src/net/torvald/terrarum/ui/UIHandler.kt | 4 +- 4 files changed, 106 insertions(+), 96 deletions(-) diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UICrafting.kt b/src/net/torvald/terrarum/modulebasegame/ui/UICrafting.kt index 39fee04a2..c3b165ecf 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UICrafting.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UICrafting.kt @@ -3,11 +3,12 @@ package net.torvald.terrarum.modulebasegame.ui import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.App +import net.torvald.terrarum.CommonResourcePool import net.torvald.terrarum.INGAME -import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent -import net.torvald.terrarum.ui.Toolkit -import net.torvald.terrarum.ui.UICanvas -import net.torvald.terrarum.ui.UIItemHorizontalFadeSlide +import net.torvald.terrarum.Second +import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryItemGrid.Companion.listGap +import net.torvald.terrarum.ui.* +import kotlin.math.roundToInt /** * Created by minjaesong on 2024-03-02. @@ -17,6 +18,15 @@ class UICrafting(val full: UIInventoryFull?) : UICanvas( toggleButtonLiteral = if (full == null) "control_gamepad_start" else null ) { + companion object { + internal val LAST_LINE_IN_GRID = ((UIItemInventoryElemWide.height + listGap) * (UIInventoryFull.CELLS_VRT - 2)) + 22//359 // TEMPORARY VALUE! + + val panelToggleBarY = UIInventoryFull.INVENTORY_CELLS_OFFSET_Y() + LAST_LINE_IN_GRID + val panelToggleBarWidth = UIItemListNavBarVertical.WIDTH + val panelToggleBarHeight = 82 // a magic number + val catIconHeight = CommonResourcePool.getAsTextureRegionPack("inventory_category").tileH + } + override var width = Toolkit.drawWidth override var height = App.scr.height @@ -35,21 +45,65 @@ class UICrafting(val full: UIInventoryFull?) : UICanvas( private val uis = listOf(transitionalCraftingUI, transitionalTechtreePanel) + val panelToggleBarX = transitionalCraftingUI.itemListCraftable.navRemoCon.posX + 12 + + fun getIconPosY(index: Int) = (panelToggleBarY + ((index*2+1)/4f) * panelToggleBarHeight).roundToInt() - catIconHeight/2 + + private val catIcons = CommonResourcePool.getAsTextureRegionPack("inventory_category") + + val menuButtonTechView = UIItemImageButton( + this, catIcons.get(20, 1), + initialX = panelToggleBarX, + initialY = getIconPosY(0), + highlightable = true + ).also { + it.clickOnceListener = { _, _ -> + showTechViewUI() + } + } + + val menuButtonCraft = UIItemImageButton( + this, catIcons.get(19, 1), + initialX = panelToggleBarX, + initialY = getIconPosY(1), + highlightable = true + ).also { + it.clickOnceListener = { _, _ -> + showCraftingUI() + } + } + fun resetUI() { transitionalCraftingUI.resetUI() transitionalTechtreePanel.resetUI() } - fun showCraftingUI() { - transitionPanel.setLeftUIto(0) - transitionalCraftingUI.show() - } fun showTechViewUI() { transitionPanel.setLeftUIto(1) transitionalTechtreePanel.show() + menuButtonTechView.highlighted = true + menuButtonCraft.highlighted = false } + fun showCraftingUI() { + transitionPanel.setLeftUIto(0) + transitionalCraftingUI.show() + menuButtonTechView.highlighted = false + menuButtonCraft.highlighted = true + } + + fun showCraftingUIwithoutAnim() { + transitionPanel.setLeftUIto(0) + transitionalCraftingUI.show() + menuButtonTechView.highlighted = false + menuButtonCraft.highlighted = true + } + + private val specialUIitems = listOf( + menuButtonCraft, menuButtonTechView + ) + override fun updateImpl(delta: Float) { uiItems.forEach { it.update(delta) } @@ -59,15 +113,43 @@ class UICrafting(val full: UIInventoryFull?) : UICanvas( it.posX = full.transitionPanel.getOffX(0) it.opacity = full.transitionPanel.getOpacity(0) } + specialUIitems.forEach { + it.posX = it.initialX + full.transitionPanel.getOffX(0) + } } } + private val cellHighlightNormalCol2 = UIItemInventoryCellCommonRes.defaultInventoryCellTheme.cellHighlightNormalCol.cpy().also { it.a /= 2f } + + private val shader = App.loadShaderInline(UIHandler.SHADER_PROG_VERT, UIHandler.SHADER_PROG_FRAG) + override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) { + batch.shader = null + if (full == null) { UIInventoryFull.drawBackground(batch, opacity) } - uiItems.forEach { it.render(frameDelta, batch, camera) } + // draw fake navbar // + // draw the tray + batch.color = Toolkit.Theme.COL_CELL_FILL + Toolkit.fillArea(batch, panelToggleBarX - 4, panelToggleBarY, panelToggleBarWidth, panelToggleBarHeight) + // cell border + batch.color = UIItemInventoryCellCommonRes.defaultInventoryCellTheme.cellHighlightNormalCol + Toolkit.drawBoxBorder(batch, panelToggleBarX - 4, panelToggleBarY, panelToggleBarWidth, panelToggleBarHeight) + // cell divider + batch.color = cellHighlightNormalCol2 + Toolkit.drawStraightLine(batch, panelToggleBarX - 2, panelToggleBarY + panelToggleBarHeight/2, panelToggleBarX-2 + panelToggleBarWidth-4, 1, false) + + + transitionPanel.render(frameDelta, batch, camera) + + // make transparency work for button + batch.shader = shader + shader.setUniformf("opacity", opacity) + specialUIitems.forEach { + it.render(frameDelta, batch, camera) + } } override fun dispose() { @@ -76,11 +158,18 @@ class UICrafting(val full: UIInventoryFull?) : UICanvas( init { addUIitem(transitionPanel) + addUIitem(menuButtonTechView) + addUIitem(menuButtonCraft) } - override fun setPosition(x: Int, y: Int) { + /*override fun setPosition(x: Int, y: Int) { transitionalCraftingUI.setPosition(x, y) transitionalTechtreePanel.setPosition(x, y) + }*/ + + override fun show() { + super.show() + showCraftingUIwithoutAnim() // default to the crafting UI. ALso highlights the right button initially } override fun doOpening(delta: Float) { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UICraftingWorkbench.kt b/src/net/torvald/terrarum/modulebasegame/ui/UICraftingWorkbench.kt index b292d1545..412cccc7a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UICraftingWorkbench.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UICraftingWorkbench.kt @@ -123,8 +123,6 @@ class UICraftingWorkbench(val inventoryUI: UIInventoryFull?, val parentContainer private val thisOffsetY = UIInventoryFull.INVENTORY_CELLS_OFFSET_Y() private val cellsWidth = (listGap + UIItemInventoryElemWide.height) * 6 - listGap - internal val LAST_LINE_IN_GRID = ((UIItemInventoryElemWide.height + listGap) * (UIInventoryFull.CELLS_VRT - 2)) + 22//359 // TEMPORARY VALUE! - private var recipeClicked: CraftingCodex.CraftingRecipe? = null private val controlHelp: String @@ -153,7 +151,7 @@ class UICraftingWorkbench(val inventoryUI: UIInventoryFull?, val parentContainer this, { ingredients }, thisOffsetX, - thisOffsetY + LAST_LINE_IN_GRID, + UICrafting.panelToggleBarY, 6, 1, drawScrollOnRightside = false, drawWallet = false, @@ -321,43 +319,11 @@ class UICraftingWorkbench(val inventoryUI: UIInventoryFull?, val parentContainer handler.allowESCtoClose = true - - val navbarHeight = 82 // a magic number - val fakeNavbarY = itemListIngredients.posY - fun getIconPosY2(index: Int) = (fakeNavbarY + ((index*2+1)/4f) * navbarHeight).roundToInt() - catIcons.tileH/2 - - val menuButtonTechView = UIItemImageButton( - this, catIcons.get(20, 1), - initialX = itemListCraftable.navRemoCon.posX + 12, - initialY = getIconPosY2(0), - highlightable = true - ).also { - it.clickOnceListener = { _, _ -> - parentContainer.showTechViewUI() - it.highlighted = false - } - } - - val menuButtonCraft = UIItemImageButton( - this, catIcons.get(19, 1), - initialX = itemListCraftable.navRemoCon.posX + 12, - initialY = getIconPosY2(1), - activeCol = Toolkit.Theme.COL_SELECTED, - inactiveCol = Toolkit.Theme.COL_SELECTED, - highlightable = true - ) - - addUIitem(itemListCraftable) addUIitem(itemListIngredients) addUIitem(playerThings) addUIitem(spinnerCraftCount) addUIitem(buttonCraft) - // temporarily disabled for 0.4 release - if (TerrarumAppConfiguration.VERSION_RAW >= 0x0000_000005_000000) { - addUIitem(menuButtonCraft) - addUIitem(menuButtonTechView) - } } private fun filterPlayerListUsing(recipe: CraftingCodex.CraftingRecipe?) { @@ -487,7 +453,7 @@ class UICraftingWorkbench(val inventoryUI: UIInventoryFull?, val parentContainer val ingredientsLabel = Lang["GAME_INVENTORY_INGREDIENTS"] App.fontGame.draw(batch, craftingLabel, thisOffsetX + (cellsWidth - App.fontGame.getWidth(craftingLabel)) / 2, thisOffsetY - INVENTORY_NAME_TEXT_GAP) - App.fontGame.draw(batch, ingredientsLabel, thisOffsetX + (cellsWidth - App.fontGame.getWidth(ingredientsLabel)) / 2, thisOffsetY + LAST_LINE_IN_GRID - INVENTORY_NAME_TEXT_GAP) + App.fontGame.draw(batch, ingredientsLabel, thisOffsetX + (cellsWidth - App.fontGame.getWidth(ingredientsLabel)) / 2, thisOffsetY + UICrafting.LAST_LINE_IN_GRID - INVENTORY_NAME_TEXT_GAP) // control hints @@ -527,6 +493,7 @@ class UICraftingWorkbench(val inventoryUI: UIInventoryFull?, val parentContainer } companion object { + data class RecipeIngredientRecord( val selectedItem: ItemID, val howManyPlayerHas: Long, diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITechView.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITechView.kt index d086eb4f3..1ebc8295a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITechView.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITechView.kt @@ -39,59 +39,13 @@ class UITechView(val inventoryUI: UIInventoryFull?, val parentContainer: UICraft private val panelHeight = parentContainer.transitionalCraftingUI.itemListCraftable.height + parentContainer.transitionalCraftingUI.itemListIngredients.height + 64 // 64 is a magic number - private val navbarWidth = UIItemListNavBarVertical.WIDTH - private val navbarHeight = 82 // a magic number - private val navbarX = panelX - 32 // also a magic number - private val navbarY = panelY + panelHeight - navbarHeight - - private val fakeNavbarY = parentContainer.transitionalCraftingUI.itemListIngredients.posY - - private val catIcons = CommonResourcePool.getAsTextureRegionPack("inventory_category") - - private val menuButtonTechView = UIItemImageButton( - this, catIcons.get(20, 1), - initialX = navbarX, - initialY = getIconPosY(0), - activeCol = Toolkit.Theme.COL_SELECTED, - inactiveCol = Toolkit.Theme.COL_SELECTED, - highlightable = false - ) - private val menuButtonCraft = UIItemImageButton( - this, catIcons.get(19, 1), - initialX = navbarX, - initialY = getIconPosY(1), - highlightable = true - ).also { - it.clickOnceListener = { _, _ -> - parentContainer.showCraftingUI() - it.highlighted = false - } - } - - fun getIconPosY(index: Int) = (fakeNavbarY + ((index*2+1)/4f) * navbarHeight).roundToInt() - catIcons.tileH/2 - init { - addUIitem(menuButtonCraft) - addUIitem(menuButtonTechView) + } + private val thisOffsetX = UIInventoryFull.INVENTORY_CELLS_OFFSET_X() + UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap - halfSlotOffset - private val cellHighlightNormalCol2 = colourTheme.cellHighlightNormalCol.cpy().also { it.a /= 2f } - override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) { - // draw fake navbar // - // draw the tray - batch.color = Toolkit.Theme.COL_CELL_FILL - Toolkit.fillArea(batch, navbarX - 4, navbarY, navbarWidth, navbarHeight) - // cell border - batch.color = colourTheme.cellHighlightNormalCol - Toolkit.drawBoxBorder(batch, navbarX - 4, navbarY, navbarWidth, navbarHeight) - // cell divider - batch.color = cellHighlightNormalCol2 - Toolkit.drawStraightLine(batch, navbarX - 2, navbarY + navbarHeight/2, navbarX-2 + navbarWidth-4, 1, false) - - - // draw window // batch.color = Toolkit.Theme.COL_CELL_FILL Toolkit.fillArea(batch, panelX, panelY, panelWidth, panelHeight) diff --git a/src/net/torvald/terrarum/ui/UIHandler.kt b/src/net/torvald/terrarum/ui/UIHandler.kt index 431494c58..d7bce0a6d 100644 --- a/src/net/torvald/terrarum/ui/UIHandler.kt +++ b/src/net/torvald/terrarum/ui/UIHandler.kt @@ -36,7 +36,7 @@ class UIHandler(//var UI: UICanvas, var alwaysUpdate = false companion object { - private val SHADER_PROG_FRAG = """ + val SHADER_PROG_FRAG = """ #ifdef GL_ES precision mediump float; #endif @@ -55,7 +55,7 @@ void main() { } """.trimIndent() - private val SHADER_PROG_VERT = """ + val SHADER_PROG_VERT = """ in vec4 a_position; in vec4 a_color; in vec4 a_generic;