From 68f45ea6abed3ec15221dc814a2bf7f17674e601 Mon Sep 17 00:00:00 2001 From: Song Minjae Date: Mon, 10 Apr 2017 01:35:28 +0900 Subject: [PATCH] working inventory clicking ingame --- .../terrarum/gameactors/ActorInventory.kt | 1 + .../terrarum/gamecontroller/GameController.kt | 4 ++++ src/net/torvald/terrarum/ui/UIHandler.kt | 22 +++++++++++++++---- src/net/torvald/terrarum/ui/UIInventory.kt | 5 +++-- src/net/torvald/terrarum/ui/UIItem.kt | 8 +++---- src/net/torvald/terrarum/ui/UIVitalMetre.kt | 2 -- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/net/torvald/terrarum/gameactors/ActorInventory.kt b/src/net/torvald/terrarum/gameactors/ActorInventory.kt index dc60a424d..1b036fb22 100644 --- a/src/net/torvald/terrarum/gameactors/ActorInventory.kt +++ b/src/net/torvald/terrarum/gameactors/ActorInventory.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.gameactors import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameitem.InventoryItem import net.torvald.terrarum.itemproperties.ItemCodex +import net.torvald.terrarum.ui.UIInventory import java.util.* import java.util.concurrent.locks.Lock import java.util.concurrent.locks.ReentrantLock diff --git a/src/net/torvald/terrarum/gamecontroller/GameController.kt b/src/net/torvald/terrarum/gamecontroller/GameController.kt index 4028112e5..5b67ef36f 100644 --- a/src/net/torvald/terrarum/gamecontroller/GameController.kt +++ b/src/net/torvald/terrarum/gamecontroller/GameController.kt @@ -125,3 +125,7 @@ val GameContainer.mouseTileX: Int /** currently pointing tile coordinate */ val GameContainer.mouseTileY: Int get() = GameController.mouseTileY +val GameContainer.mouseScreenX: Int + get() = Terrarum.appgc.input.mouseX +val GameContainer.mouseScreenY: Int + get() = Terrarum.appgc.input.mouseY diff --git a/src/net/torvald/terrarum/ui/UIHandler.kt b/src/net/torvald/terrarum/ui/UIHandler.kt index 61aa1b7ef..b636b7436 100644 --- a/src/net/torvald/terrarum/ui/UIHandler.kt +++ b/src/net/torvald/terrarum/ui/UIHandler.kt @@ -20,7 +20,8 @@ import org.newdawn.slick.state.StateBasedGame class UIHandler(val UI: UICanvas, val toggleKey: Int? = null, val toggleButton: Int? = null, // UI positions itself? (you must g.flush() yourself after the g.translate(Int, Int)) - var customPositioning: Boolean = false + var customPositioning: Boolean = false, + val doNotWarnConstant: Boolean = false ) { // X/Y Position relative to the game window. @@ -48,6 +49,12 @@ class UIHandler(val UI: UICanvas, } } + /** + * being TRUE for only one frame when the UI is told to open + */ + var openFired = false + var closeFired = false + var opacity = 1f var scale = 1f @@ -70,6 +77,9 @@ class UIHandler(val UI: UICanvas, } + if (openFired && openCloseCounter > 9) openFired = false + if (closeFired && openCloseCounter > 9) closeFired = false + if (isVisible || alwaysVisible) { UI.update(gc, delta) @@ -142,7 +152,7 @@ class UIHandler(val UI: UICanvas, * Send OPEN signal to the attached UI. */ fun setAsOpen() { - if (alwaysVisible) { + if (alwaysVisible && !doNotWarnConstant) { throw RuntimeException("[UIHandler] Tried to 'open' constant UI") } if (!isOpened && !isOpening) { @@ -150,6 +160,8 @@ class UIHandler(val UI: UICanvas, isOpening = true isClosing = false isVisible = true + + openFired = true } } @@ -157,13 +169,15 @@ class UIHandler(val UI: UICanvas, * Send CLOSE signal to the attached UI. */ fun setAsClose() { - if (alwaysVisible) { + if (alwaysVisible && !doNotWarnConstant) { throw RuntimeException("[UIHandler] Tried to 'close' constant UI") } if ((isOpening || isOpened) && !isClosing && isVisible) { isOpened = false isClosing = true isOpening = false + + closeFired = true } } @@ -171,7 +185,7 @@ class UIHandler(val UI: UICanvas, get() = !isOpened && !isClosing && !isOpening fun toggleOpening() { - if (alwaysVisible) { + if (alwaysVisible && !doNotWarnConstant) { throw RuntimeException("[UIHandler] Tried to 'toggle opening of' constant UI") } if (isVisible) { diff --git a/src/net/torvald/terrarum/ui/UIInventory.kt b/src/net/torvald/terrarum/ui/UIInventory.kt index 9da1ecfc7..3032f2801 100644 --- a/src/net/torvald/terrarum/ui/UIInventory.kt +++ b/src/net/torvald/terrarum/ui/UIInventory.kt @@ -105,10 +105,11 @@ class UIInventory( override fun update(gc: GameContainer, delta: Int) { catButtons.update(gc, delta) - if (actor != null && inventory != null) { // monitor and check if category selection has been changed - if (oldCatSelect != catButtons.selectedIndex) { + // OR UI is being opened from closed state + if (oldCatSelect != catButtons.selectedIndex || + !rebuildList && handler!!.openFired) { rebuildList = true } diff --git a/src/net/torvald/terrarum/ui/UIItem.kt b/src/net/torvald/terrarum/ui/UIItem.kt index a20a8fd24..dd94d95c7 100644 --- a/src/net/torvald/terrarum/ui/UIItem.kt +++ b/src/net/torvald/terrarum/ui/UIItem.kt @@ -2,8 +2,8 @@ package net.torvald.terrarum.ui import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gameactors.roundInt -import net.torvald.terrarum.gamecontroller.mouseX -import net.torvald.terrarum.gamecontroller.mouseY +import net.torvald.terrarum.gamecontroller.mouseScreenX +import net.torvald.terrarum.gamecontroller.mouseScreenY import org.newdawn.slick.GameContainer import org.newdawn.slick.Graphics @@ -19,9 +19,9 @@ abstract class UIItem(var parentUI: UICanvas) { // do not replace parentUI to UI abstract val height: Int protected val relativeMouseX: Int - get() = (Terrarum.appgc.mouseX - (parentUI.handler?.posX ?: 0) - this.posX).roundInt() + get() = (Terrarum.appgc.mouseScreenX - (parentUI.handler?.posX ?: 0) - this.posX) protected val relativeMouseY: Int - get() = (Terrarum.appgc.mouseY - (parentUI.handler?.posY ?: 0) - this.posY).roundInt() + get() = (Terrarum.appgc.mouseScreenY - (parentUI.handler?.posY ?: 0) - this.posY) open val mouseUp: Boolean get() = relativeMouseX in 0..width - 1 && relativeMouseY in 0..height - 1 diff --git a/src/net/torvald/terrarum/ui/UIVitalMetre.kt b/src/net/torvald/terrarum/ui/UIVitalMetre.kt index e4a6034ba..5b123f76a 100644 --- a/src/net/torvald/terrarum/ui/UIVitalMetre.kt +++ b/src/net/torvald/terrarum/ui/UIVitalMetre.kt @@ -52,8 +52,6 @@ class UIVitalMetre( Terrarum.HALFW, Terrarum.HALFH ) - - handler!!.customPositioning = true } /**