some sort of an intro for the typewriter

This commit is contained in:
minjaesong
2021-11-26 16:18:13 +09:00
parent b83dd501fc
commit 1fce4055d7

View File

@@ -78,38 +78,49 @@ class TypewriterGDX(val width: Int, val height: Int, val cols: Int) : Game() {
} }
} }
private val textbuf: ArrayList<CodepointSequence> = arrayListOf( private val intro = listOf(
CodepointSequence(listOf(
39,50,29, // kva (HANG_GONG) 39,50,29, // kva (HANG_GONG)
42,31, // nc (HANG_SE) 42,31, // nc (HANG_SE)
74,48,51, // ;tw (HANG_BEOL) 74,48,51, // ;tw (HANG_BEOL)
62, // space 62, // space
0x561F71, // shiftin
184,164,171,170, // >HON (ASC_3-90) 184,164,171,170, // >HON (ASC_3-90)
0x561F70, // shiftout
62, // space 62, // space
74,48, // ;t (HANG_BEO) 74,48, // ;t (HANG_BEO)
43,12, // o5 (HANG_CYU) 43,12, // o5 (HANG_CYU)
38,48,51, // jtw (HANG_EOL) 38,48,51, // jtw (HANG_EOL)
0x561F71, // shiftin
164, // H (ASC_-) 164, // H (ASC_-)
0x561F70, // shiftout
75,34, // 'f (HANG_TA) 75,34, // 'f (HANG_TA)
40,34, // lf (HANG_JA) 40,34, // lf (HANG_JA)
39,32 // kd (HANG_GI) 39,32, // kd (HANG_GI)
).map { it + 0xF3000 }), Input.Keys.ENTER,Input.Keys.ENTER
CodepointSequence(/* new line */) )
private val textbuf: ArrayList<CodepointSequence> = arrayListOf(
CodepointSequence()
) )
var keylayoutbase = 0xF3000 var keylayoutbase = 0xF3000
private val printableKeys = ((Input.Keys.NUM_0..Input.Keys.NUM_9) + (Input.Keys.A..Input.Keys.PERIOD) + 62 + (Input.Keys.BACKSPACE..Input.Keys.SLASH)).toHashSet() private val printableKeys = ((Input.Keys.NUM_0..Input.Keys.NUM_9) + (Input.Keys.A..Input.Keys.PERIOD) + 62 + (Input.Keys.BACKSPACE..Input.Keys.SLASH)).toHashSet()
fun acceptKey(keycode: Int) { var initDone = false
println("[TypewriterGDX] Accepting key: $keycode") var initTimer = 0f
var initTypingCursor = 0
var keystrokeDelay = 0.12f
fun acceptKey(keycode: Int, force: Boolean = false) {
if (initDone || force) {
// println("[TypewriterGDX] Accepting key: $keycode")
if (keycode == Input.Keys.ENTER) { if (keycode == Input.Keys.ENTER) {
val tbufsize = textbuf.last().size.div(cols.toFloat()).times(6f).coerceIn(0f, 6f).roundToInt() // 0..6 val tbufsize = textbuf.last().size.div(cols.toFloat()).times(6f).coerceIn(0f, 6f).roundToInt() // 0..6
textbuf.add(CodepointSequence()) textbuf.add(CodepointSequence())
if (tbufsize == 0) sndLF.play() if (tbufsize == 0) sndLF.play()
else sndCRs[tbufsize - 1].play() else sndCRs[tbufsize - 1].play()
} } else if (printableKeys.contains(keycode and 127)) {
else if (printableKeys.contains(keycode and 127)) {
val cp = keycode + keylayoutbase val cp = keycode + keylayoutbase
textbuf.last().add(cp) textbuf.last().add(cp)
// println("[TypewriterGDX] width: ${font.glyphProps[cp]}") // println("[TypewriterGDX] width: ${font.glyphProps[cp]}")
@@ -118,18 +129,16 @@ class TypewriterGDX(val width: Int, val height: Int, val cols: Int) : Game() {
val isDeadkey = font.glyphProps[cp]?.width == 0 val isDeadkey = font.glyphProps[cp]?.width == 0
if (isDeadkey) { if (isDeadkey) {
sndDeadkey.play() sndDeadkey.play()
} } else if (keycode == Input.Keys.SPACE || keycode == Input.Keys.BACKSPACE) {
else if (keycode == Input.Keys.SPACE || keycode == Input.Keys.BACKSPACE) {
sndSpace.play() sndSpace.play()
} } else {
else {
sndMovingkey.play() sndMovingkey.play()
} }
} } else if (keycode == 128 + Input.Keys.SHIFT_LEFT || keycode == 128 + Input.Keys.SHIFT_RIGHT) {
else if (keycode == 128+Input.Keys.SHIFT_LEFT || keycode == 128+Input.Keys.SHIFT_RIGHT) {
sndShiftin.play() sndShiftin.play()
} }
} }
}
/** /**
* For Shift-out only * For Shift-out only
@@ -160,6 +169,39 @@ class TypewriterGDX(val width: Int, val height: Int, val cols: Int) : Game() {
catch (e: ConcurrentModificationException) {} catch (e: ConcurrentModificationException) {}
batch.end() batch.end()
if (!initDone) {
while (initTimer > keystrokeDelay) {
val keyToType = intro[initTypingCursor]
if (keyToType < 256) {
acceptKey(keyToType, true)
}
else if (keyToType == 0x561F71) {
acceptKey(Input.Keys.SHIFT_LEFT + 128, true)
}
else if (keyToType == 0x561F70) {
shiftOut()
}
initTypingCursor += 1
initTimer -= keystrokeDelay
if (keyToType == Input.Keys.ENTER)
initTimer -= 0.4f
else if (keyToType == 0x561F71)
initTimer -= 0.2f
else if (keyToType == 0x561F70)
initTimer -= 0.15f
else
initTimer -= Math.random().toFloat() * 0.08f
}
initTimer += Gdx.graphics.deltaTime
if (initTypingCursor >= intro.size) {
initDone = true
}
}
} }
override fun dispose() { override fun dispose() {