mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-11 14:21:52 +09:00
258 lines
11 KiB
Kotlin
258 lines
11 KiB
Kotlin
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 com.badlogic.gdx.graphics.g2d.TextureRegion
|
|
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
|
|
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
|
|
|
/**
|
|
* Created by minjaesong on 2021-09-15.
|
|
*/
|
|
class UIKeyboardControlPanel : UICanvas() {
|
|
|
|
init {
|
|
CommonResourcePool.addToLoadingList("inventory_category") {
|
|
TextureRegionPack("./assets/graphics/gui/inventory/category.tga", 20, 20)
|
|
}
|
|
CommonResourcePool.loadAll()
|
|
}
|
|
|
|
private val labels = CommonResourcePool.getAsTextureRegionPack("inventory_category")
|
|
|
|
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.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"),
|
|
|
|
// ...
|
|
)
|
|
|
|
private val symbolLeft = labels.get(0,2)
|
|
private val symbolUp = labels.get(1,2)
|
|
private val symbolRight = labels.get(2,2)
|
|
private val symbolDown = labels.get(3,2)
|
|
private val symbolJump = labels.get(4,2)
|
|
private val symbolZoom = labels.get(5,2)
|
|
private val symbolInventory = labels.get(9,0)
|
|
private val symbolGrapplingHook = labels.get(5,1)
|
|
private val symbolGamemenu = labels.get(6,2)
|
|
|
|
|
|
init {
|
|
keycaps.values.forEach { addUIitem(it) }
|
|
|
|
// read config and put icons
|
|
keycaps[App.getConfigInt("config_keyup")]?.symbolControl = symbolUp
|
|
keycaps[App.getConfigInt("config_keyleft")]?.symbolControl = symbolLeft
|
|
keycaps[App.getConfigInt("config_keydown")]?.symbolControl = symbolDown
|
|
keycaps[App.getConfigInt("config_keyright")]?.symbolControl = symbolRight
|
|
|
|
keycaps[App.getConfigInt("config_keyjump")]?.symbolControl = symbolJump
|
|
keycaps[App.getConfigInt("config_keyzoom")]?.symbolControl = symbolZoom
|
|
keycaps[App.getConfigInt("config_keyinventory")]?.symbolControl = symbolInventory
|
|
keycaps[App.getConfigInt("config_keymovementaux")]?.symbolControl = symbolGrapplingHook
|
|
|
|
keycaps[App.getConfigInt("config_keygamemenu")]?.symbolControl = symbolGamemenu
|
|
}
|
|
|
|
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) {
|
|
}
|
|
|
|
override fun doClosing(delta: Float) {
|
|
}
|
|
|
|
override fun endOpening(delta: Float) {
|
|
}
|
|
|
|
override fun endClosing(delta: Float) {
|
|
}
|
|
|
|
override fun dispose() {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @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?,
|
|
override val width: Int,
|
|
symbolDefault: String,
|
|
val homerow: Boolean = false
|
|
) : UIItem(parent, initialX, initialY) {
|
|
|
|
init {
|
|
this.posX = initialX + parent.kbx
|
|
this.posY = initialY + parent.kby
|
|
}
|
|
|
|
override val height = 28
|
|
|
|
private val labels = CommonResourcePool.getAsTextureRegionPack("inventory_category")
|
|
|
|
private val s1 = if (symbolDefault.isNotBlank()) symbolDefault.split(',').map { it.toInt() } else null
|
|
|
|
var symbolControl: TextureRegion? = null
|
|
|
|
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())
|
|
private val configuredKeyCol = Color.WHITE
|
|
|
|
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
|
|
if (symbolControl != null) {
|
|
batch.color = configuredKeyCol
|
|
batch.draw(symbolControl, (posX + (width - 20) / 2).toFloat(), posY + 4f)
|
|
}
|
|
else if (s1 != null) {
|
|
batch.color = keylabelCol
|
|
batch.draw(labels.get(s1[0], s1[1]), (posX + (width - 20) / 2).toFloat(), posY + 4f)
|
|
}
|
|
}
|
|
|
|
override fun dispose() {
|
|
}
|
|
}
|
|
|