diff --git a/assets/graphics/fonts/code.tga b/assets/graphics/fonts/code.tga index 50115e006..5feb90493 100644 --- a/assets/graphics/fonts/code.tga +++ b/assets/graphics/fonts/code.tga @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ad87a26920e3f185e29d5ced2bed743bac04c7eac0432753c213ca2a2558751 +oid sha256:db3be4e727456c9c067e4348ace6972d48195ffa170c7ae87dd7de3aa922df58 size 36882 diff --git a/src/net/torvald/terrarum/TerrarumGlobalState.kt b/src/net/torvald/terrarum/TerrarumGlobalState.kt new file mode 100644 index 000000000..bee6a60c4 --- /dev/null +++ b/src/net/torvald/terrarum/TerrarumGlobalState.kt @@ -0,0 +1,25 @@ +package net.torvald.terrarum + +/** + * Created by minjaesong on 2023-09-05. + */ +object TerrarumGlobalState { + + var HAS_KEYBOARD_INPUT_FOCUS = CountedBool() + +} + +class CountedBool { + private var counter = 0L + + fun set() { + counter += 1 + } + fun unset() { + if (counter >= 1) counter -= 1 + } + val value: Boolean + get() = counter > 0 + fun isOn() = value + fun isOff() = !value +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIShare.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIShare.kt index 28a5a458c..3b10585ce 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIShare.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIShare.kt @@ -12,6 +12,9 @@ import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.utils.PasswordBase32 +/** + * Created by minjaesong on 2023-09-04. + */ class UIShare : UICanvas() { override var width = 434 diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalShare.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalShare.kt index 84b205821..1deb28515 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalShare.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalShare.kt @@ -15,6 +15,9 @@ import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UIItemTextButton import net.torvald.terrarum.utils.PasswordBase32 +/** + * Created by minjaesong on 2023-09-03. + */ class UIWorldPortalShare(private val full: UIWorldPortal) : UICanvas() { override var width = 434 diff --git a/src/net/torvald/terrarum/tests/Base32Test.kt b/src/net/torvald/terrarum/tests/Base32Test.kt index 9689e3e6c..4ca645b77 100644 --- a/src/net/torvald/terrarum/tests/Base32Test.kt +++ b/src/net/torvald/terrarum/tests/Base32Test.kt @@ -11,10 +11,10 @@ object Base32Test { val testStr = UUID.fromString("145efab2-d465-4e1e-abae-db6c809817a9").let { it.mostSignificantBits.toBig64() + it.leastSignificantBits.toBig64() } -// val pwd = "béchamel".toByteArray() + val pwd = "béchamel".toByteArray() - val enc = PasswordBase32.encode(testStr) - val dec = PasswordBase32.decode(enc, testStr.size) + val enc = PasswordBase32.encode(testStr, pwd) + val dec = PasswordBase32.decode(enc, testStr.size, pwd) println("Encoded text: $enc") println("Encoded bytes: ${testStr.joinToString(" ") { it.toInt().and(255).toString(16).padStart(2, '0') }}") diff --git a/src/net/torvald/terrarum/ui/UIHandler.kt b/src/net/torvald/terrarum/ui/UIHandler.kt index 8a42f2cb9..4ff81814f 100644 --- a/src/net/torvald/terrarum/ui/UIHandler.kt +++ b/src/net/torvald/terrarum/ui/UIHandler.kt @@ -7,10 +7,7 @@ import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.utils.Disposable -import net.torvald.terrarum.App -import net.torvald.terrarum.ControlPresets -import net.torvald.terrarum.FlippingSpriteBatch -import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.* import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.modulebasegame.TerrarumIngame @@ -189,7 +186,7 @@ void main() { // open/close UI by key pressed // some UIs will pause the game, and they still need to be closed if (!uiToggleLocked && (Terrarum.ingame?.consoleOpened == false && (Terrarum.ingame?.paused == false || isOpened))) { - if (toggleKey != null && Gdx.input.isKeyJustPressed(toggleKey!!)) { + if (toggleKey != null && Gdx.input.isKeyJustPressed(toggleKey!!) && TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.isOff()) { if (uiTogglerFunctionDefault == null) { if (isClosed) setAsOpen() @@ -200,7 +197,7 @@ void main() { // for the case of intermediate states, do nothing. } - if (toggleButton != null && Gdx.input.isButtonJustPressed(toggleButton!!)) { + if (toggleButton != null && Gdx.input.isButtonJustPressed(toggleButton!!) && TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.isOff()) { if (uiTogglerFunctionDefault == null) { if (isClosed) setAsOpen() @@ -211,7 +208,7 @@ void main() { } toggleKeyExtra.forEachIndexed { index, control -> - if (Gdx.input.isKeyJustPressed(ControlPresets.getKey(control))) { + if (Gdx.input.isKeyJustPressed(ControlPresets.getKey(control)) && TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.isOff()) { toggleKeyExtraAction[index].invoke(this) } } @@ -219,6 +216,9 @@ void main() { // ESC is a master key for closing if (!alwaysVisible && allowESCtoClose && Gdx.input.isKeyJustPressed(Input.Keys.ESCAPE) && isOpened) { setAsClose() + + // just in case... + TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.unset() } } diff --git a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt index 09fba3f10..f07518456 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt @@ -415,13 +415,25 @@ class UIItemTextLineInput( fboUpdateLatch = true } + override fun hide() { + super.hide() + if (this.isEnabled) { + this.isEnabled = false + TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.unset() + } + } + override fun update(delta: Float) { if (mouseoverUpdateLatch) { super.update(delta) val mouseDown = Terrarum.mouseDown if (mouseDown) { + val oldEnabled = isEnabled isEnabled = mouseUp + + if (oldEnabled && !isEnabled) TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.unset() + if (!oldEnabled && isEnabled) TerrarumGlobalState.HAS_KEYBOARD_INPUT_FOCUS.set() } if (App.getConfigString("inputmethod") == "none") imeOn = false