From f62a5f25104ccc6e43629d3fff1d75dddb38ef36 Mon Sep 17 00:00:00 2001 From: adas20 Date: Tue, 29 Jul 2025 14:48:23 -0400 Subject: [PATCH] Changed the combo_key string into button_combo, added functionality (impl could be better), added combo key as an input bindable setting within the buttons tab --- .../features/settings/model/Settings.kt | 7 ++- .../model/view/InputBindingSetting.kt | 2 + .../features/settings/ui/SettingsAdapter.kt | 8 ++++ .../settings/ui/SettingsFragmentPresenter.kt | 3 +- .../citra/citra_emu/overlay/InputOverlay.kt | 8 ++-- .../org/citra/citra_emu/utils/ComboHelper.kt | 47 +++++++++++++++++++ .../app/src/main/res/values/strings.xml | 2 +- 7 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 src/android/app/src/main/java/org/citra/citra_emu/utils/ComboHelper.kt diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt index 8d10a946c..49eb6c4b5 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.kt @@ -131,6 +131,7 @@ class Settings { const val KEY_BUTTON_R = "button_r" const val KEY_BUTTON_ZL = "button_zl" const val KEY_BUTTON_ZR = "button_zr" + const val KEY_BUTTON_COMBO = "button_combo" const val KEY_CIRCLEPAD_AXIS_VERTICAL = "circlepad_axis_vertical" const val KEY_CIRCLEPAD_AXIS_HORIZONTAL = "circlepad_axis_horizontal" const val KEY_CSTICK_AXIS_VERTICAL = "cstick_axis_vertical" @@ -152,7 +153,8 @@ class Settings { KEY_BUTTON_Y, KEY_BUTTON_SELECT, KEY_BUTTON_START, - KEY_BUTTON_HOME + KEY_BUTTON_HOME, + KEY_BUTTON_COMBO ) val buttonTitles = listOf( R.string.button_a, @@ -161,7 +163,8 @@ class Settings { R.string.button_y, R.string.button_select, R.string.button_start, - R.string.button_home + R.string.button_home, + R.string.button_combo ) val circlePadKeys = listOf( KEY_CIRCLEPAD_AXIS_VERTICAL, diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt index 64827d89d..c10b12d7c 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt @@ -123,6 +123,7 @@ class InputBindingSetting( Settings.KEY_BUTTON_SELECT -> NativeLibrary.ButtonType.BUTTON_SELECT Settings.KEY_BUTTON_START -> NativeLibrary.ButtonType.BUTTON_START Settings.KEY_BUTTON_HOME -> NativeLibrary.ButtonType.BUTTON_HOME + Settings.KEY_BUTTON_COMBO -> NativeLibrary.ButtonType.BUTTON_COMBO Settings.KEY_BUTTON_UP -> NativeLibrary.ButtonType.DPAD_UP Settings.KEY_BUTTON_DOWN -> NativeLibrary.ButtonType.DPAD_DOWN Settings.KEY_BUTTON_LEFT -> NativeLibrary.ButtonType.DPAD_LEFT @@ -277,6 +278,7 @@ class InputBindingSetting( NativeLibrary.ButtonType.BUTTON_SELECT -> Settings.KEY_BUTTON_SELECT NativeLibrary.ButtonType.BUTTON_START -> Settings.KEY_BUTTON_START NativeLibrary.ButtonType.BUTTON_HOME -> Settings.KEY_BUTTON_HOME + NativeLibrary.ButtonType.BUTTON_COMBO -> Settings.KEY_BUTTON_COMBO NativeLibrary.ButtonType.DPAD_UP -> Settings.KEY_BUTTON_UP NativeLibrary.ButtonType.DPAD_DOWN -> Settings.KEY_BUTTON_DOWN NativeLibrary.ButtonType.DPAD_LEFT -> Settings.KEY_BUTTON_LEFT diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt index a69667c5d..7e20e9e7b 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt @@ -46,6 +46,7 @@ import org.citra.citra_emu.features.settings.model.AbstractStringSetting import org.citra.citra_emu.features.settings.model.FloatSetting import org.citra.citra_emu.features.settings.model.ScaledFloatSetting import org.citra.citra_emu.features.settings.model.AbstractShortSetting +import org.citra.citra_emu.features.settings.model.Settings import org.citra.citra_emu.features.settings.model.view.DateTimeSetting import org.citra.citra_emu.features.settings.model.view.InputBindingSetting import org.citra.citra_emu.features.settings.model.view.MultiChoiceSetting @@ -745,6 +746,9 @@ class SettingsAdapter( } */ + + //TODO: Don't fully know how to grab the setting itself for the buttons so I'm adding them to a backing array to be called later + //TODO: Likely need to be reimplemented is StringMultiChoiceSetting -> { val scSetting = clickedItem as? StringMultiChoiceSetting scSetting?.let { @@ -752,16 +756,20 @@ class SettingsAdapter( is AbstractMultiStringSetting -> { val value = it.getValueAt(which) if (value in it.selectedValues && !is_checked) { + Settings.comboSelection.remove(value ?: "") it.removeSelectedValue(value ?: "") } else { + Settings.comboSelection.add(value ?: "") it.addSelectedValue(value ?: "") } } is AbstractMultiShortSetting -> { if (is_checked != it.selectValueIndices[which]) { + Settings.comboSelection.remove((it.getValueAt(which)?.toShort() ?: 1).toString()) it.removeSelectedValue(it.getValueAt(which)?.toShort() ?: 1) } else { + Settings.comboSelection.add((it.getValueAt(which)?.toShort() ?: 1).toString()) it.addSelectedValue(it.getValueAt(which)?.toShort() ?: 1) } } diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt index 4c38a0fcf..d021681cb 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -34,7 +34,6 @@ import org.citra.citra_emu.features.settings.model.StringSetting import org.citra.citra_emu.features.settings.model.view.DateTimeSetting import org.citra.citra_emu.features.settings.model.view.HeaderSetting import org.citra.citra_emu.features.settings.model.view.InputBindingSetting -import org.citra.citra_emu.features.settings.model.view.MultiChoiceSetting import org.citra.citra_emu.features.settings.model.view.RunnableSetting import org.citra.citra_emu.features.settings.model.view.SettingsItem import org.citra.citra_emu.features.settings.model.view.SingleChoiceSetting @@ -821,7 +820,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) } private fun addComboButtonSettings(sl: ArrayList) { - settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.combo_key)) + settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.button_combo)) val comboSetting = object : AbstractMultiStringSetting { override var strings: MutableSet get() { diff --git a/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.kt b/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.kt index 840ce45bf..1199f112b 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/overlay/InputOverlay.kt @@ -26,6 +26,7 @@ import org.citra.citra_emu.NativeLibrary import org.citra.citra_emu.R import org.citra.citra_emu.utils.EmulationMenuSettings import org.citra.citra_emu.utils.TurboHelper +import org.citra.citra_emu.utils.ComboHelper import java.lang.NullPointerException import kotlin.math.min @@ -140,11 +141,10 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex else if (button.id == NativeLibrary.ButtonType.BUTTON_TURBO && button.status == NativeLibrary.ButtonState.PRESSED) { TurboHelper.toggleTurbo(true) } - /* - else if (button.id == NativeLibrary.ButtonType.BUTTON_COMBO && button.status == NativeLibrary.ButtonState.PRESSED) { - var comboButtonArray = + else if (button.id == NativeLibrary.ButtonType.BUTTON_COMBO) { + ComboHelper.comboActivate(button) } - */ + NativeLibrary.onGamePadEvent( NativeLibrary.TouchScreenDevice, diff --git a/src/android/app/src/main/java/org/citra/citra_emu/utils/ComboHelper.kt b/src/android/app/src/main/java/org/citra/citra_emu/utils/ComboHelper.kt new file mode 100644 index 000000000..77746d140 --- /dev/null +++ b/src/android/app/src/main/java/org/citra/citra_emu/utils/ComboHelper.kt @@ -0,0 +1,47 @@ +// Copyright Citra Emulator Project / Azahar Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +package org.citra.citra_emu.utils + +import org.citra.citra_emu.CitraApplication +import org.citra.citra_emu.NativeLibrary +import org.citra.citra_emu.R +import org.citra.citra_emu.features.settings.model.BooleanSetting +import org.citra.citra_emu.features.settings.model.Settings +import org.citra.citra_emu.overlay.InputOverlayDrawableButton + +object ComboHelper { + + fun getButton(button: String): Int { + when (button) { + "A" -> return NativeLibrary.ButtonType.BUTTON_A + "B" -> return NativeLibrary.ButtonType.BUTTON_B + "X" -> return NativeLibrary.ButtonType.BUTTON_X + "Y" -> return NativeLibrary.ButtonType.BUTTON_Y + "L" -> return NativeLibrary.ButtonType.TRIGGER_L + "R" -> return NativeLibrary.ButtonType.TRIGGER_R + "ZL" -> return NativeLibrary.ButtonType.BUTTON_ZL + "ZR" -> return NativeLibrary.ButtonType.BUTTON_ZR + "START" -> return NativeLibrary.ButtonType.BUTTON_START + "SELECT" -> return NativeLibrary.ButtonType.BUTTON_SELECT + } + return -1 + } + + fun comboActivate(button: InputOverlayDrawableButton) { + var comboArray = Settings.comboSelection + for (selectedbutton in comboArray) { + var nativebutton = getButton(selectedbutton) + if (nativebutton == -1) { + println("Bad Button") + } else { + NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, nativebutton, button.status) + } + } + } + + + + +} diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index ab30d09fc..ae12566a7 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -142,6 +142,7 @@ HOME Swap Screens Turbo + Combo Key X Y L @@ -153,7 +154,6 @@ Turbo Speed Turbo Speed Enabled Turbo Speed Disabled - Combo Key Enable Combo Button Combo Key Settings Enable and Change Combo Button Bindings.