mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-09 18:14:06 +09:00
147 lines
4.9 KiB
Kotlin
147 lines
4.9 KiB
Kotlin
package net.torvald.terrarum.tests
|
|
|
|
import com.badlogic.gdx.*
|
|
import com.badlogic.gdx.Input.Keys.*
|
|
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application
|
|
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration
|
|
import com.badlogic.gdx.graphics.g2d.BitmapFont
|
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
|
import net.torvald.unicode.EMDASH
|
|
import net.torvald.terrarum.gdxClearAndEnableBlend
|
|
import net.torvald.terrarum.inUse
|
|
|
|
/**
|
|
* Not meant to implement IME, just to be used with Options > Config
|
|
* where it shows a "summary" diagram of a keyboard and icon for functions on its keycap
|
|
*
|
|
* If unknown key was chosen (e.g. caret used on french AZERTY), config will simply won't display it
|
|
* on the "summary".
|
|
*/
|
|
object MakeKeylayoutFile {
|
|
|
|
fun invoke() {
|
|
val qwerty = arrayOf( // QWERTY
|
|
intArrayOf(TAB,Q,W,E,R,T,Y,U,I,O,P,LEFT_BRACKET,RIGHT_BRACKET,BACKSLASH),
|
|
intArrayOf(UNKNOWN,A,S,D,F,G,H,J,K,L,SEMICOLON,APOSTROPHE),
|
|
intArrayOf(SHIFT_LEFT,Z,X,C,V,B,N,M,COMMA,PERIOD,SLASH,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
val qwerty_hhk = arrayOf( // QWERTY HHK
|
|
intArrayOf(TAB,Q,W,E,R,T,Y,U,I,O,P,LEFT_BRACKET,RIGHT_BRACKET,BACKSLASH),
|
|
intArrayOf(CONTROL_LEFT,A,S,D,F,G,H,J,K,L,SEMICOLON,APOSTROPHE),
|
|
intArrayOf(SHIFT_LEFT,Z,X,C,V,B,N,M,COMMA,PERIOD,SLASH,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
val qwertz = arrayOf( // QWERTZ English
|
|
intArrayOf(TAB,Q,W,E,R,T,Z,U,I,O,P,LEFT_BRACKET,RIGHT_BRACKET,BACKSLASH),
|
|
intArrayOf(UNKNOWN,A,S,D,F,G,H,J,K,L,SEMICOLON,APOSTROPHE),
|
|
intArrayOf(SHIFT_LEFT,Y,X,C,V,B,N,M,COMMA,PERIOD,SLASH,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
val azerty = arrayOf( // AZERTY Windows
|
|
intArrayOf(TAB,A,Z,E,R,T,Y,U,I,O,P,72,74,BACKSLASH),
|
|
intArrayOf(UNKNOWN,Q,S,D,F,G,H,J,K,L,M,68),
|
|
intArrayOf(SHIFT_LEFT,W,X,C,V,B,N,COMMA,PERIOD,SLASH,UNKNOWN,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
val colemak = arrayOf( // Colemak
|
|
intArrayOf(TAB,Q,W,F,P,G,J,L,U,Y,SEMICOLON,LEFT_BRACKET,RIGHT_BRACKET,BACKSLASH),
|
|
intArrayOf(BACKSPACE,A,R,S,T,D,H,N,E,I,O,APOSTROPHE),
|
|
intArrayOf(SHIFT_LEFT,Z,X,C,V,B,K,M,COMMA,PERIOD,SLASH,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
val dvorak = arrayOf( // Dvorak
|
|
intArrayOf(TAB,APOSTROPHE,COMMA,PERIOD,P,Y,F,G,C,R,L,SLASH,EQUALS,BACKSLASH),
|
|
intArrayOf(UNKNOWN,A,O,E,U,I,D,H,T,N,S,MINUS),
|
|
intArrayOf(SHIFT_LEFT,SEMICOLON,Q,J,K,X,B,M,W,V,Z,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
val dvorak_lh = arrayOf( // Dvorak Left handed
|
|
intArrayOf(TAB,SEMICOLON,Q,B,Y,U,R,S,O,PERIOD,UNKNOWN,UNKNOWN,EQUALS,BACKSLASH),
|
|
intArrayOf(UNKNOWN,MINUS,K,C,D,T,H,E,A,Z,UNKNOWN,UNKNOWN),
|
|
intArrayOf(SHIFT_LEFT,APOSTROPHE,X,G,V,W,N,I,COMMA,UNKNOWN,UNKNOWN,SHIFT_RIGHT),
|
|
intArrayOf(SPACE)
|
|
)
|
|
|
|
|
|
val keys = listOf(
|
|
qwerty, qwerty_hhk, qwertz, azerty, colemak, dvorak, dvorak_lh
|
|
)
|
|
|
|
keys.forEach { println(it.toConfigStr()) }
|
|
}
|
|
|
|
private fun Array<IntArray>.toConfigStr() =
|
|
this.map { it.joinToString(",") }.joinToString(";")
|
|
|
|
}
|
|
|
|
class GetKeycode : Game() {
|
|
|
|
private lateinit var font: BitmapFont
|
|
private lateinit var batch: SpriteBatch
|
|
|
|
private var keyHit = "(keycode will be displayed here)"
|
|
|
|
override fun create() {
|
|
font = BitmapFont()
|
|
batch = SpriteBatch()
|
|
|
|
Gdx.input.inputProcessor = Con(this)
|
|
}
|
|
|
|
override fun getScreen(): Screen {
|
|
return super.getScreen()
|
|
}
|
|
|
|
override fun setScreen(screen: Screen?) {
|
|
super.setScreen(screen)
|
|
}
|
|
|
|
override fun render() {
|
|
Gdx.graphics.setTitle("Get Keycode $EMDASH F: ${Gdx.graphics.framesPerSecond}")
|
|
|
|
gdxClearAndEnableBlend(.1f,.1f,.1f,1f)
|
|
|
|
batch.inUse {
|
|
font.draw(batch, "Hit a key", 10f, 20f)
|
|
font.draw(batch, keyHit, 10f, 42f)
|
|
}
|
|
}
|
|
|
|
override fun pause() {
|
|
super.pause()
|
|
}
|
|
|
|
override fun resume() {
|
|
super.resume()
|
|
}
|
|
|
|
override fun resize(width: Int, height: Int) {
|
|
super.resize(width, height)
|
|
}
|
|
|
|
override fun dispose() {
|
|
super.dispose()
|
|
}
|
|
|
|
class Con(val host: GetKeycode): InputAdapter() {
|
|
override fun keyDown(keycode: Int): Boolean {
|
|
host.keyHit = "Key down: $keycode (${Input.Keys.toString(keycode)})"
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
fun main() {
|
|
val appConfig = Lwjgl3ApplicationConfiguration()
|
|
appConfig.setResizable(false)
|
|
appConfig.setWindowedMode(256, 64)
|
|
appConfig.setForegroundFPS(2)
|
|
appConfig.setIdleFPS(2)
|
|
|
|
val gdxWindow = GetKeycode()
|
|
|
|
Lwjgl3Application(gdxWindow, appConfig)
|
|
MakeKeylayoutFile.invoke()
|
|
} |