From f391d16a374314582412d09f84570cb50f472570 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 15 Sep 2021 22:09:18 +0900 Subject: [PATCH] keyboards for control setup ui --- assets/graphics/gui/inventory/category.tga | 2 +- .../ui/UIKeyboardControlPanel.kt | 172 ++++++++++++++++-- .../modulebasegame/ui/UITitleRemoConYaml.kt | 5 +- 3 files changed, 159 insertions(+), 20 deletions(-) diff --git a/assets/graphics/gui/inventory/category.tga b/assets/graphics/gui/inventory/category.tga index 718d5add7..ea30181aa 100755 --- a/assets/graphics/gui/inventory/category.tga +++ b/assets/graphics/gui/inventory/category.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e487e48c2391680824d84bf6a1885bc4f2531c08a0456613b12be24ab2ed93f3 +oid sha256:75f31922d0f353fea78d7fd69958bcc2e576cae548dcedcbe63527914dc19a76 size 240018 diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt index 5427e029f..12bd0ba18 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt @@ -1,9 +1,13 @@ package net.torvald.terrarum.modulebasegame.ui +import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.graphics.Camera +import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.terrarum.App import net.torvald.terrarum.CommonResourcePool +import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UIItem import net.torvald.terrarum.ui.UIItemTextButton @@ -14,13 +18,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ class UIKeyboardControlPanel : UICanvas() { - override var width = 600 - override var height = 600 - override var openCloseTime = 0f - - private val kbx = 61 - private val kby = 95 - init { CommonResourcePool.addToLoadingList("inventory_category") { TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20) @@ -28,15 +25,111 @@ class UIKeyboardControlPanel : UICanvas() { CommonResourcePool.loadAll() } + override var width = 600 + override var height = 600 + override var openCloseTime = 0f + + private val drawX = (App.scr.width - width) / 2 + private val drawY = (App.scr.height - height) / 2 + + internal val kbx = (App.scr.width - width) / 2 + 61 + internal val kby = (App.scr.height - height) / 2 + 95 + + private val oneu = 28 + private val onehalfu = 44 + private val twou = 52 + private val twohalfu = 68 + private val threeu = 84 + private val spaceu = 188 + + private val borderNormal = Color(0xFFFFFF80.toInt()) + private val fillCol = Color(0x80) + private val keycaps = hashMapOf( - Input.Keys.APOSTROPHE to UIItemKeycap(this, kbx, kby, null), + Input.Keys.GRAVE to UIItemKeycap(this, 1, 1, null, oneu, ""), + Input.Keys.NUM_1 to UIItemKeycap(this, 33,1, Input.Keys.NUM_1, oneu, "1,3"), + Input.Keys.NUM_2 to UIItemKeycap(this, 65,1, Input.Keys.NUM_2, oneu, "2,3"), + Input.Keys.NUM_3 to UIItemKeycap(this, 97,1, Input.Keys.NUM_3, oneu, "3,3"), + Input.Keys.NUM_4 to UIItemKeycap(this, 129,1, Input.Keys.NUM_4, oneu, "4,3"), + Input.Keys.NUM_5 to UIItemKeycap(this, 161,1, Input.Keys.NUM_5, oneu, "5,3"), + Input.Keys.NUM_6 to UIItemKeycap(this, 193,1, Input.Keys.NUM_6, oneu, "6,3"), + Input.Keys.NUM_7 to UIItemKeycap(this, 225,1, Input.Keys.NUM_7, oneu, "7,3"), + Input.Keys.NUM_8 to UIItemKeycap(this, 257,1, Input.Keys.NUM_8, oneu, "8,3"), + Input.Keys.NUM_9 to UIItemKeycap(this, 289,1, Input.Keys.NUM_9, oneu, "9,3"), + Input.Keys.NUM_0 to UIItemKeycap(this, 321,1, Input.Keys.NUM_0, oneu, "0,3"), + Input.Keys.MINUS to UIItemKeycap(this, 353,1, Input.Keys.MINUS, oneu, "10,3"), + Input.Keys.EQUALS to UIItemKeycap(this, 385,1, Input.Keys.EQUALS, oneu, "11,3"), + Input.Keys.BACKSPACE to UIItemKeycap(this, 417,1, Input.Keys.BACKSPACE, 60, "24,5"), + + Input.Keys.TAB to UIItemKeycap(this, 1,33, Input.Keys.TAB, onehalfu, "23,5"), + Input.Keys.Q to UIItemKeycap(this, 49,33, Input.Keys.Q, oneu, "16,4"), + Input.Keys.W to UIItemKeycap(this, 81,33, Input.Keys.W, oneu, "22,4"), + Input.Keys.E to UIItemKeycap(this, 113,33, Input.Keys.E, oneu, "4,4"), + Input.Keys.R to UIItemKeycap(this, 145,33, Input.Keys.R, oneu, "17,4"), + Input.Keys.T to UIItemKeycap(this, 177,33, Input.Keys.T, oneu, "19,4"), + Input.Keys.Y to UIItemKeycap(this, 209,33, Input.Keys.Y, oneu, "24,4"), + Input.Keys.U to UIItemKeycap(this, 241,33, Input.Keys.U, oneu, "20,4"), + Input.Keys.I to UIItemKeycap(this, 273,33, Input.Keys.I, oneu, "8,4"), + Input.Keys.O to UIItemKeycap(this, 305,33, Input.Keys.O, oneu, "14,4"), + Input.Keys.P to UIItemKeycap(this, 337,33, Input.Keys.P, oneu, "15,4"), + Input.Keys.LEFT_BRACKET to UIItemKeycap(this, 369,33, Input.Keys.LEFT_BRACKET, oneu, "12,3"), + Input.Keys.RIGHT_BRACKET to UIItemKeycap(this, 401,33, Input.Keys.RIGHT_BRACKET, oneu, "13,3"), + Input.Keys.BACKSLASH to UIItemKeycap(this, 433,33, Input.Keys.BACKSLASH, onehalfu, "20,3"), + + Input.Keys.CAPS_LOCK to UIItemKeycap(this, 1,65, Input.Keys.CAPS_LOCK, twou, "24,3"), + Input.Keys.A to UIItemKeycap(this, 57,65, Input.Keys.A, oneu, "0,4"), + Input.Keys.S to UIItemKeycap(this, 89,65, Input.Keys.S, oneu, "18,4"), + Input.Keys.D to UIItemKeycap(this, 121,65, Input.Keys.D, oneu, "3,4"), + Input.Keys.F to UIItemKeycap(this, 153,65, Input.Keys.F, oneu, "5,4", true), + Input.Keys.G to UIItemKeycap(this, 185,65, Input.Keys.G, oneu, "6,4"), + Input.Keys.H to UIItemKeycap(this, 217,65, Input.Keys.H, oneu, "7,4"), + Input.Keys.J to UIItemKeycap(this, 249,65, Input.Keys.J, oneu, "9,4", true), + Input.Keys.K to UIItemKeycap(this, 281,65, Input.Keys.K, oneu, "10,4"), + Input.Keys.L to UIItemKeycap(this, 313,65, Input.Keys.L, oneu, "11,4"), + Input.Keys.SEMICOLON to UIItemKeycap(this, 345,65, Input.Keys.SEMICOLON, oneu, "15,3"), + Input.Keys.APOSTROPHE to UIItemKeycap(this, 377,65, Input.Keys.APOSTROPHE, oneu, "16,3"), + Input.Keys.ENTER to UIItemKeycap(this, 409,65, Input.Keys.ENTER, twohalfu, "17,3"), + + Input.Keys.SHIFT_LEFT to UIItemKeycap(this, 1,97, Input.Keys.SHIFT_LEFT, twohalfu, "23,3"), + Input.Keys.Z to UIItemKeycap(this, 73,97, Input.Keys.Z, oneu, "0,5"), + Input.Keys.X to UIItemKeycap(this, 105,97, Input.Keys.X, oneu, "23,4"), + Input.Keys.C to UIItemKeycap(this, 137,97, Input.Keys.C, oneu, "2,4"), + Input.Keys.V to UIItemKeycap(this, 169,97, Input.Keys.V, oneu, "21,4"), + Input.Keys.B to UIItemKeycap(this, 201,97, Input.Keys.B, oneu, "1,4"), + Input.Keys.N to UIItemKeycap(this, 233,97, Input.Keys.N, oneu, "13,4"), + Input.Keys.M to UIItemKeycap(this, 265,97, Input.Keys.M, oneu, "12,4"), + Input.Keys.COMMA to UIItemKeycap(this, 297,97, Input.Keys.COMMA, oneu, "18,3"), + Input.Keys.PERIOD to UIItemKeycap(this, 329,97, Input.Keys.PERIOD, oneu, "19,3"), + Input.Keys.SLASH to UIItemKeycap(this, 361,97, Input.Keys.SLASH, oneu, "20,3"), + Input.Keys.SHIFT_RIGHT to UIItemKeycap(this, 393,97, Input.Keys.SHIFT_RIGHT, threeu, "23,3"), + + Input.Keys.CONTROL_LEFT to UIItemKeycap(this, 1,129, Input.Keys.CONTROL_LEFT, onehalfu, "21,3"), + -2 to UIItemKeycap(this, 49,129, null, oneu, ""), + Input.Keys.ALT_LEFT to UIItemKeycap(this, 81,129, Input.Keys.ALT_LEFT, onehalfu, "22,3"), + Input.Keys.SPACE to UIItemKeycap(this, 129,129, Input.Keys.SPACE, spaceu, ""), + Input.Keys.ALT_RIGHT to UIItemKeycap(this, 321,129, Input.Keys.ALT_RIGHT, onehalfu, "22,3"), + -3 to UIItemKeycap(this, 369,129, null, oneu, ""), + -4 to UIItemKeycap(this, 401,129, null, oneu, ""), + Input.Keys.CONTROL_RIGHT to UIItemKeycap(this, 433,129, Input.Keys.CONTROL_RIGHT, onehalfu, "21,3"), + // ... ) + init { + keycaps.values.forEach { addUIitem(it) } + } + override fun updateUI(delta: Float) { + uiItems.forEach { it.update(delta) } } override fun renderUI(batch: SpriteBatch, camera: Camera) { +// batch.color = borderNormal +// Toolkit.drawBoxBorder(batch, drawX, drawY, width, height) +// batch.color = fillCol +// Toolkit.fillArea(batch, drawX, drawY, width, height) + + uiItems.forEach { it.render(batch, camera) } } override fun doOpening(delta: Float) { @@ -60,21 +153,70 @@ class UIKeyboardControlPanel : UICanvas() { /** * @param key LibGDX keycode. Set it to `null` to "disable" the key. Also see [com.badlogic.gdx.Input.Keys] */ -class UIItemKeycap(parent: UIKeyboardControlPanel, initialX: Int, initialY: Int, val key: Int?) : UIItem(parent, initialX, initialY) { +class UIItemKeycap( + parent: UIKeyboardControlPanel, + initialX: Int, + initialY: Int, + val key: Int?, + override val width: Int, + symbolDefault: String, + val homerow: Boolean = false +) : UIItem(parent, initialX, initialY) { - override val width = 600 - override val height = 600 + init { + this.posX = initialX + parent.kbx + this.posY = initialY + parent.kby + } + + override val height = 28 private val labels = CommonResourcePool.getAsTextureRegionPack("inventory_category") - private val borderKeyForbidden = 0x000000C0 - private val borderKeyNormal = 0xFFFFFFC0.toInt() - private val borderKeyPressed = UIItemTextButton.defaultActiveCol + private val s1 = if (symbolDefault.isNotBlank()) symbolDefault.split(',').map { it.toInt() } else null - private val keycapFill = ItemSlotImageFactory.CELLCOLOUR_BLACK + val symbolControl = "" + + private val borderKeyForbidden = Color(0x000000C0) + private val borderKeyNormal = Color(0xFFFFFFAA.toInt()) + private val borderMouseUp = UIItemTextButton.defaultActiveCol + private val borderKeyPressed = UIItemTextButton.defaultHighlightCol + + private val keycapFill = Color(0x404040_C0) + + private val keylabelCol = Color(0xFFFFFF40.toInt()) + + override fun update(delta: Float) { + super.update(delta) + } override fun render(batch: SpriteBatch, camera: Camera) { super.render(batch, camera) + + batch.color = if (key == null) + borderKeyForbidden + else if (Gdx.input.isKeyPressed(key)) + borderKeyPressed + else if (mouseUp) + borderMouseUp + else + borderKeyNormal + + // key border + Toolkit.drawBoxBorder(batch, posX, posY, width, height) + + if (homerow) { + Toolkit.drawBoxBorder(batch, posX + 9, posY + 26, 10, 1) + } + + // key background + batch.color = keycapFill + Toolkit.fillArea(batch, posX, posY, width, height) + + // default keycap + batch.color = keylabelCol + if (s1 != null) { + batch.draw(labels.get(s1[0], s1[1]), (posX + (width - 20) / 2).toFloat(), posY + 4f) + } } override fun dispose() { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt index 5a6c7e6a5..6141eca0f 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt @@ -14,10 +14,7 @@ object UITitleRemoConYaml { private val menuBase = """ - MENU_OPTIONS - MENU_OPTIONS_GRAPHICS - - MENU_OPTIONS_CONTROLS - - MENU_CONTROLS_KEYBOARD : net.torvald.terrarum.modulebasegame.ui.UIKeyboardControlPanel - - MENU_CONTROLS_GAMEPAD - - MENU_LABEL_RETURN + - MENU_OPTIONS_CONTROLS : net.torvald.terrarum.modulebasegame.ui.UIKeyboardControlPanel - MENU_LABEL_LANGUAGE : net.torvald.terrarum.modulebasegame.ui.UITitleLanguage - MENU_MODULES : net.torvald.terrarum.ModOptionsHost - MENU_LABEL_RETURN