diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9ade0ca --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +*.psd filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.tga filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.opus filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.kra filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text diff --git a/FontTestGDX/src/TypewriterGDX.kt b/FontTestGDX/src/TypewriterGDX.kt index b23387e..3c8dc66 100644 --- a/FontTestGDX/src/TypewriterGDX.kt +++ b/FontTestGDX/src/TypewriterGDX.kt @@ -2,23 +2,25 @@ import com.badlogic.gdx.Game import com.badlogic.gdx.Gdx import com.badlogic.gdx.Input import com.badlogic.gdx.InputAdapter +import com.badlogic.gdx.audio.AudioDevice +import com.badlogic.gdx.audio.Sound import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.GL20 import com.badlogic.gdx.graphics.OrthographicCamera -import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.g2d.SpriteBatch -import com.badlogic.gdx.graphics.glutils.FrameBuffer +import com.badlogic.gdx.utils.GdxRuntimeException import net.torvald.terrarum.gamecontroller.InputStrober import net.torvald.terrarumsansbitmap.gdx.CodepointSequence import net.torvald.terrarumtypewriterbitmap.gdx.TerrarumTypewriterBitmap import java.io.StringReader +import kotlin.math.roundToInt /** * Created by minjaesong on 2021-11-05. */ -class TypewriterGDX(val width: Int, val height: Int) : Game() { +class TypewriterGDX(val width: Int, val height: Int, val cols: Int) : Game() { lateinit var font: TerrarumTypewriterBitmap lateinit var batch: SpriteBatch @@ -27,12 +29,22 @@ class TypewriterGDX(val width: Int, val height: Int) : Game() { lateinit var inputStrober: InputStrober + lateinit var sndMovingkey: Sound + lateinit var sndDeadkey: Sound + lateinit var sndShiftin: Sound + lateinit var sndShiftout: Sound + lateinit var sndSpace: Sound + lateinit var sndCRs: Array + lateinit var sndLF: Sound + override fun create() { font = TerrarumTypewriterBitmap( "./assets/typewriter", - StringReader("""ko_kr_3set-390_typewriter,typewriter_ko_3set-390.tga,16 + StringReader( + """ko_kr_3set-390_typewriter,typewriter_ko_3set-390.tga,16 |en_intl_qwerty_typewriter,typewriter_intl_qwerty.tga,0 - """.trimMargin()), + """.trimMargin() + ), true, false, 256, true ) @@ -47,6 +59,23 @@ class TypewriterGDX(val width: Int, val height: Int) : Game() { inputStrober = InputStrober(this) + + try { + sndMovingkey = Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/movingkey.wav")) + sndDeadkey = Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/deadkey.wav")) + sndShiftin = Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/shiftin.wav")) + sndShiftout = Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/shiftout.wav")) + sndSpace = Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/space.wav")) + + sndCRs = Array(6) { + Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/cr$it.wav")) + } + + sndLF = Gdx.audio.newSound(Gdx.files.internal("assets/typewriter/audio/crlf.wav")) + } + catch (e: GdxRuntimeException) { + e.printStackTrace() + } } private val textbuf: ArrayList = arrayListOf( @@ -68,19 +97,45 @@ class TypewriterGDX(val width: Int, val height: Int) : Game() { CodepointSequence(/* new line */) ) + 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() fun acceptKey(keycode: Int) { println("[TypewriterGDX] Accepting key: $keycode") if (keycode == Input.Keys.ENTER) { + val tbufsize = textbuf.last().size.div(cols.toFloat()).times(6f).coerceIn(0f,6f).roundToInt() // 0..6 textbuf.add(CodepointSequence()) + if (tbufsize == 0) sndLF.play() + else sndCRs[tbufsize - 1].play() } else if (printableKeys.contains(keycode and 127)) { - val cp = keycode + 0xF3000 + val cp = keycode + keylayoutbase textbuf.last().add(cp) // println("[TypewriterGDX] width: ${font.glyphProps[cp]}") + + // play audio + val isDeadkey = font.glyphProps[cp]?.width == 0 + if (isDeadkey) { + sndDeadkey.play() + } + else if (keycode == Input.Keys.SPACE || keycode == Input.Keys.BACKSPACE) { + sndSpace.play() + } + else { + sndMovingkey.play() + } } + else if (keycode == 128+Input.Keys.SHIFT_LEFT || keycode == 128+Input.Keys.SHIFT_RIGHT) { + sndShiftin.play() + } + } + + /** + * For Shift-out only + */ + fun shiftOut() { + sndShiftout.play() } @@ -111,6 +166,13 @@ class TypewriterGDX(val width: Int, val height: Int) : Game() { font.dispose() batch.dispose() inputStrober.dispose() + sndMovingkey.dispose() + sndDeadkey.dispose() + sndShiftin.dispose() + sndShiftout.dispose() + sndSpace.dispose() + sndCRs.forEach { it.dispose() } + sndLF.dispose() } } @@ -137,5 +199,5 @@ fun main(args: Array) { appConfig.setWindowedMode(600, 800) appConfig.setTitle("Terrarum Typewriter Bitmap Test") - Lwjgl3Application(TypewriterGDX(600, 800), appConfig) + Lwjgl3Application(TypewriterGDX(600, 800, 64), appConfig) } diff --git a/FontTestGDX/src/net/torvald/terrarum/gamecontroller/InputStrober.kt b/FontTestGDX/src/net/torvald/terrarum/gamecontroller/InputStrober.kt index 437a38d..8535c6b 100644 --- a/FontTestGDX/src/net/torvald/terrarum/gamecontroller/InputStrober.kt +++ b/FontTestGDX/src/net/torvald/terrarum/gamecontroller/InputStrober.kt @@ -49,7 +49,7 @@ class InputStrober(val typewriter: TypewriterGDX) { // println("Key strobed: ${keys.joinToString()}") - if (stroboStatus % 2 == 0 && keys[0] != 0) { + if (stroboStatus % 2 == 0 && (keys[0] != 0 || oldKeys[0] != 0)) { stroboStatus += 1 stroboTime = System.nanoTime() repeatCount += 1 @@ -73,6 +73,13 @@ class InputStrober(val typewriter: TypewriterGDX) { // App.inputStrobed(TerrarumKeyboardEvent(KEY_DOWN, newKeysym, headKeyCode, repeatCount, keys)) typewriter.acceptKey(headKeyCode) } + + +// println("shiftin=${shiftin} oldkeys=${oldKeys.joinToString()}") + + if (!shiftin && (oldKeys.contains(Input.Keys.SHIFT_LEFT) || oldKeys.contains(Input.Keys.SHIFT_RIGHT))) { + typewriter.shiftOut() + } } oldKeys = keys // don't put this outside of if-cascade diff --git a/assets/typewriter/audio/cr0.wav b/assets/typewriter/audio/cr0.wav new file mode 100644 index 0000000..26762e7 --- /dev/null +++ b/assets/typewriter/audio/cr0.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:605a775bf39bbfd15ba276593655a1a9aa26aca7c00d7cf0a4ef15e9ba926de3 +size 43866 diff --git a/assets/typewriter/audio/cr1.wav b/assets/typewriter/audio/cr1.wav new file mode 100644 index 0000000..a84be71 --- /dev/null +++ b/assets/typewriter/audio/cr1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aa3470b5c4c586891d938bd135c7bcc1869c0cc38d6f0bc92c8d3e27520d66d +size 55404 diff --git a/assets/typewriter/audio/cr2.wav b/assets/typewriter/audio/cr2.wav new file mode 100644 index 0000000..735039d --- /dev/null +++ b/assets/typewriter/audio/cr2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e20dd385dcd985e2c82a3ec6b12b78f9ea9358c7b8007657eaecd7df7c0b7519 +size 65566 diff --git a/assets/typewriter/audio/cr3.wav b/assets/typewriter/audio/cr3.wav new file mode 100644 index 0000000..c1ef5dc --- /dev/null +++ b/assets/typewriter/audio/cr3.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e6a91dd738713cb1e34458e73b55df2359d9d9d12b3c3f2be8b11ef46711384 +size 78728 diff --git a/assets/typewriter/audio/cr4.wav b/assets/typewriter/audio/cr4.wav new file mode 100644 index 0000000..0c3a4a5 --- /dev/null +++ b/assets/typewriter/audio/cr4.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d173450a0e5a49cba7c91c6daa04f634dea1db4fecd1977aae3e067f954a698c +size 88586 diff --git a/assets/typewriter/audio/cr5.wav b/assets/typewriter/audio/cr5.wav new file mode 100644 index 0000000..ea6a41e --- /dev/null +++ b/assets/typewriter/audio/cr5.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0f648a03632c306669172c7afebf514fe97514244b1e6e51ba26db8fe3e1ac0 +size 102172 diff --git a/assets/typewriter/audio/crlf.wav b/assets/typewriter/audio/crlf.wav new file mode 100644 index 0000000..9f60a4b --- /dev/null +++ b/assets/typewriter/audio/crlf.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21462b4e121a47ad541dcbd8d2d82d0ff82b7e3268b994ee1c3b3fb389acfe88 +size 37494 diff --git a/assets/typewriter/audio/deadkey.wav b/assets/typewriter/audio/deadkey.wav new file mode 100644 index 0000000..910d791 --- /dev/null +++ b/assets/typewriter/audio/deadkey.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96e2a614f84013548f915f76a86ce60f809ec425ff72125cec40187d8bbb43a3 +size 47472 diff --git a/assets/typewriter/audio/movingkey.wav b/assets/typewriter/audio/movingkey.wav new file mode 100644 index 0000000..de6439c --- /dev/null +++ b/assets/typewriter/audio/movingkey.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0be0bb5e49abd07394816bc675ae3bc105ca319aa8074c224a06d6a02a123936 +size 43690 diff --git a/assets/typewriter/audio/shiftin.wav b/assets/typewriter/audio/shiftin.wav new file mode 100644 index 0000000..021a710 --- /dev/null +++ b/assets/typewriter/audio/shiftin.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60ba2bf0094fef7779fe899e2b468ed345fcfaa0468abbcac5155372aac9b644 +size 19796 diff --git a/assets/typewriter/audio/shiftout.wav b/assets/typewriter/audio/shiftout.wav new file mode 100644 index 0000000..4cdfed7 --- /dev/null +++ b/assets/typewriter/audio/shiftout.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eea2a29f547ea956e61fc0172fe6e8b649aba9b1b9d298a4ced7f3d0755b3e8f +size 15930 diff --git a/assets/typewriter/audio/space.wav b/assets/typewriter/audio/space.wav new file mode 100644 index 0000000..2047df4 --- /dev/null +++ b/assets/typewriter/audio/space.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e21481a2c81b0b43e4b9249dd5a012ffa076574d4f8c907a602c921114808cdc +size 30940