diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index b0f7f623d..d96ed6cec 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -262,6 +262,8 @@ object Terrarum : Disposable { get() = 1.0 / Gdx.graphics.deltaTime val mouseDown: Boolean get() = Gdx.input.isButtonPressed(App.getConfigInt("config_mouseprimary")) + val mouseJustDown: Boolean + get() = Gdx.input.isButtonJustPressed(App.getConfigInt("config_mouseprimary")) /** diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt index 770480e2e..df93d328a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt @@ -4,10 +4,7 @@ import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.BlockCodex -import net.torvald.terrarum.ItemCodex -import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.blendNormalStraightAlpha +import net.torvald.terrarum.* import net.torvald.terrarum.modulebasegame.BuildingMaker import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory.CELLCOLOUR_WHITE import net.torvald.terrarum.ui.Toolkit @@ -23,7 +20,7 @@ import kotlin.math.roundToInt class UIBuildingMakerBlockChooser(val parent: BuildingMaker): UICanvas() { companion object { - const val TILES_X = 16 + const val TILES_X = 8 const val TILES_Y = 14 const val TILESREGION_SIZE = 24 @@ -64,11 +61,11 @@ class UIBuildingMakerBlockChooser(val parent: BuildingMaker): UICanvas() { catch (e: NullPointerException) { null }) != null - }.forEachIndexed { index, prop -> + }.filter { !it.hasTag("INTERNAL") }.forEachIndexed { index, prop -> val paletteItem = UIItemImageButton( this, ItemCodex.getItemImage(prop.id)!!, - initialX = MENUBAR_SIZE + (index % 16) * TILESREGION_SIZE, - initialY = (index / 16) * TILESREGION_SIZE, + initialX = MENUBAR_SIZE + (index % TILES_X) * TILESREGION_SIZE, + initialY = (index / TILES_X) * TILESREGION_SIZE, highlightable = false, width = TILESREGION_SIZE, height = TILESREGION_SIZE, @@ -172,7 +169,10 @@ class UIBuildingMakerBlockChooser(val parent: BuildingMaker): UICanvas() { override fun touchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean { if (mouseOnDragHandle()) { if (dragForReal) { - handler.setPosition(screenX - dragOriginX, screenY - dragOriginY) + handler.setPosition( + (screenX / App.scr.magn - dragOriginX).roundToInt(), + (screenY / App.scr.magn - dragOriginY).roundToInt() + ) } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt index 8ca1a12f1..c17c2426e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIPaletteSelector.kt @@ -12,6 +12,7 @@ import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory.CELLCOLOUR_BL import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UINSMenu +import kotlin.math.roundToInt /** * Created by minjaesong on 2019-02-03. @@ -128,8 +129,10 @@ class UIPaletteSelector(val parent: BuildingMaker) : UICanvas() { override fun touchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean { if (mouseInScreen(screenX, screenY)) { if (dragForReal) { - handler.setPosition(screenX - dragOriginX, screenY - dragOriginY) - //println("drag $screenX, $screenY") + handler.setPosition( + (screenX / App.scr.magn - dragOriginX).roundToInt(), + (screenY / App.scr.magn - dragOriginY).roundToInt() + ) } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt index 82bc0c9ae..e7a666294 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt @@ -91,71 +91,74 @@ open class UIRemoCon(val parent: TitleScreen, val treeRoot: QNDTreeNode) private var openUI: UICanvas? = null override fun updateUI(delta: Float) { - if (mouseActionAvailable && Terrarum.mouseDown) { + if (mouseActionAvailable) { mouseActionAvailable = false remoConTray.update(delta) - val selectedItem = remoConTray.selectedItem - val selectedIndex = remoConTray.selectedIndex + if (Terrarum.mouseDown) { + val selectedItem = remoConTray.selectedItem + val selectedIndex = remoConTray.selectedIndex - if (!handler.uiToggleLocked) { - selectedItem?.let { if (selectedItem != oldSelectedItem) { - oldSelectedItem?.highlighted = false + if (!handler.uiToggleLocked) { + selectedItem?.let { + if (selectedItem != oldSelectedItem) { + oldSelectedItem?.highlighted = false - // selection change - if (it.textfun() == Lang["MENU_LABEL_QUIT"]) { - //System.exit(0) - Gdx.app.exit() - } - else if (it.textfun() == Lang["MENU_LABEL_RETURN"]) { - val tag = it.tags - if (tag.contains("WRITETOCONFIG")) WriteConfig() + // selection change + if (it.textfun() == Lang["MENU_LABEL_QUIT"]) { + //System.exit(0) + Gdx.app.exit() + } + else if (it.textfun() == Lang["MENU_LABEL_RETURN"]) { + val tag = it.tags + if (tag.contains("WRITETOCONFIG")) WriteConfig() - if (IS_DEVELOPMENT_BUILD) print("[UIRemoCon] Returning from ${currentRemoConContents.data}") + if (IS_DEVELOPMENT_BUILD) print("[UIRemoCon] Returning from ${currentRemoConContents.data}") - if (currentRemoConContents.parent != null) { - remoConTray.consume() + if (currentRemoConContents.parent != null) { + remoConTray.consume() - currentRemoConContents = currentRemoConContents.parent!! - currentlySelectedRemoConItem = currentRemoConContents.data - remoConTray = generateNewRemoCon(currentRemoConContents) + currentRemoConContents = currentRemoConContents.parent!! + currentlySelectedRemoConItem = currentRemoConContents.data + remoConTray = generateNewRemoCon(currentRemoConContents) - parent.uiFakeBlurOverlay.setAsClose() + parent.uiFakeBlurOverlay.setAsClose() - if (IS_DEVELOPMENT_BUILD) println(" to ${currentlySelectedRemoConItem}") - } - else { - throw NullPointerException("No parent node to return") - } - } - else { - // check if target exists - if (IS_DEVELOPMENT_BUILD) { - //println("current node: ${currentRemoConContents.data}") - //currentRemoConContents.children.forEach { println("- ${it.data}") } - } - - if (currentRemoConContents.children.size > selectedIndex ?: 0x7FFFFFFF) { - setNewRemoConContents(currentRemoConContents.children[selectedIndex!!]) - } - else { - throw RuntimeException("Index: $selectedIndex, Size: ${currentRemoConContents.children.size}") + if (IS_DEVELOPMENT_BUILD) println(" to ${currentlySelectedRemoConItem}") + } + else { + throw NullPointerException("No parent node to return") + } + } + else { + // check if target exists + if (IS_DEVELOPMENT_BUILD) { + //println("current node: ${currentRemoConContents.data}") + //currentRemoConContents.children.forEach { println("- ${it.data}") } + } + + if (currentRemoConContents.children.size > selectedIndex ?: 0x7FFFFFFF) { + setNewRemoConContents(currentRemoConContents.children[selectedIndex!!]) + } + else { + throw RuntimeException("Index: $selectedIndex, Size: ${currentRemoConContents.children.size}") + } + } + + + // do something with the actual selection + //printdbg(this, "$currentlySelectedRemoConItem") + openUI(currentlySelectedRemoConItem) } } + } - // do something with the actual selection - //printdbg(this, "$currentlySelectedRemoConItem") - openUI(currentlySelectedRemoConItem) - } } + oldSelectedItem = remoConTray.selectedItem } - - - oldSelectedItem = remoConTray.selectedItem } - openUI?.update(delta) diff --git a/src/net/torvald/terrarum/ui/UIItem.kt b/src/net/torvald/terrarum/ui/UIItem.kt index 405d68d72..8bd8e48b5 100644 --- a/src/net/torvald/terrarum/ui/UIItem.kt +++ b/src/net/torvald/terrarum/ui/UIItem.kt @@ -92,6 +92,8 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I /** If mouse is hovering over it and mouse is down */ val mousePushed: Boolean get() = mouseUp && Terrarum.mouseDown + val mouseJustPushed: Boolean + get() = mouseUp && Terrarum.mouseJustDown val mouseDown: Boolean get() = Terrarum.mouseDown diff --git a/src/net/torvald/terrarum/ui/UIItemList.kt b/src/net/torvald/terrarum/ui/UIItemList.kt index f66438e00..eeb2dff65 100644 --- a/src/net/torvald/terrarum/ui/UIItemList.kt +++ b/src/net/torvald/terrarum/ui/UIItemList.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.BlendMode import net.torvald.terrarum.Second +import net.torvald.terrarum.Terrarum /** @@ -57,8 +58,18 @@ class UIItemList( /** (oldIndex: Int?, newIndex: Int) -> Unit */ var selectionChangeListener: ((Int?, Int) -> Unit)? = null + private var clickLatched = false + + override fun show() { + clickLatched = true + } + override fun update(delta: Float) { + val posXDelta = posX - oldPosX + itemList.forEach { it.posX += posXDelta } + + if (highlighterMoving) { highlighterMoveTimer += delta @@ -83,7 +94,7 @@ class UIItemList( item.update(delta) - if (item.mousePushed && index != selectedIndex) { + if (!clickLatched && item.mousePushed) { val oldIndex = selectedIndex if (kinematic) { @@ -102,6 +113,12 @@ class UIItemList( //item.highlighted = (index == selectedIndex) // forcibly highlight if this.highlighted != null } + + if (!Terrarum.mouseDown) { + clickLatched = false + } + + oldPosX = posX } override fun render(batch: SpriteBatch, camera: OrthographicCamera) { diff --git a/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt b/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt index a544ba893..4fe7c3d70 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt @@ -197,7 +197,8 @@ class UIItemTextButtonList( btn.update(delta) - if (!clickLatched && btn.mousePushed && index != selectedIndex) { + if (!clickLatched && btn.mousePushed) { + clickLatched = true val oldIndex = selectedIndex // if (kinematic) { @@ -214,10 +215,9 @@ class UIItemTextButtonList( selectionChangeListener?.invoke(oldIndex, index) } btn.highlighted = (index == selectedIndex) // forcibly highlight if this.highlighted != null - } - if (!Terrarum.mouseDown) { + if (clickLatched && !Terrarum.mouseDown) { clickLatched = false } diff --git a/src/net/torvald/terrarum/ui/UINSMenu.kt b/src/net/torvald/terrarum/ui/UINSMenu.kt index fcf61060c..c1fb185cb 100644 --- a/src/net/torvald/terrarum/ui/UINSMenu.kt +++ b/src/net/torvald/terrarum/ui/UINSMenu.kt @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import net.torvald.terrarum.* import kotlin.math.max +import kotlin.math.roundToInt /** * Nextstep-themed menu bar with mandatory title line @@ -102,14 +103,14 @@ class UINSMenu( val list = UIItemTextButtonList( this, - UIItemTextButtonList.DEFAULT_LINE_HEIGHT, + LINE_HEIGHT, stringsFromTree, width, LINE_HEIGHT, uiWidth, listHeight, textAreaWidth = listWidth, alignment = UIItemTextButton.Companion.Alignment.LEFT, inactiveCol = Color(.94f, .94f, .94f, 1f), - itemHitboxSize = LINE_HEIGHT, + itemHitboxSize = LINE_HEIGHT - 2, backgroundCol = UIItemTextButtonList.DEFAULT_BACKGROUNDCOL ) @@ -129,13 +130,18 @@ class UINSMenu( } // 2. push the new menu - if (tree.children[new].children.isNotEmpty()) { - addSubMenu(tree.children[new]) - } + if (old != new) { + if (tree.children[new].children.isNotEmpty()) { + addSubMenu(tree.children[new]) + } - // invoke whatever command there is - //printdbg(this, "Selected: ${tree.children[new].data?.second}") - tree.children[new].data?.second?.invoke(invocationArgument) + // invoke whatever command there is + //printdbg(this, "Selected: ${tree.children[new].data?.second}") + tree.children[new].data?.second?.invoke(invocationArgument) + } + else { + list.selectedIndex = null // deselect if old == new + } } // END List selection change listener @@ -216,8 +222,10 @@ class UINSMenu( if (mouseInScreen(screenX, screenY)) { if (dragForReal) { - handler.setPosition(screenX - dragOriginX, screenY - dragOriginY) - //println("drag $screenX, $screenY") + handler.setPosition( + (screenX / App.scr.magn - dragOriginX).roundToInt(), + (screenY / App.scr.magn - dragOriginY).roundToInt() + ) } }