UINSMenu is working again

This commit is contained in:
minjaesong
2023-10-14 20:56:03 +09:00
parent 228c9b8127
commit d5074e30eb
8 changed files with 107 additions and 72 deletions

View File

@@ -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"))
/**

View File

@@ -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()
)
}
}

View File

@@ -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()
)
}
}

View File

@@ -91,71 +91,74 @@ open class UIRemoCon(val parent: TitleScreen, val treeRoot: QNDTreeNode<String>)
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)

View File

@@ -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

View File

@@ -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<Item: UIItem>(
/** (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: UIItem>(
item.update(delta)
if (item.mousePushed && index != selectedIndex) {
if (!clickLatched && item.mousePushed) {
val oldIndex = selectedIndex
if (kinematic) {
@@ -102,6 +113,12 @@ class UIItemList<Item: UIItem>(
//item.highlighted = (index == selectedIndex) // forcibly highlight if this.highlighted != null
}
if (!Terrarum.mouseDown) {
clickLatched = false
}
oldPosX = posX
}
override fun render(batch: SpriteBatch, camera: OrthographicCamera) {

View File

@@ -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
}

View File

@@ -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()
)
}
}