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

This commit is contained in:
adas20 2025-07-29 14:48:23 -04:00
parent 77cfb162e3
commit f62a5f2510
7 changed files with 68 additions and 9 deletions

View File

@ -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,

View File

@ -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

View File

@ -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)
}
}

View File

@ -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<SettingsItem>) {
settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.combo_key))
settingsActivity.setToolbarTitle(settingsActivity.getString(R.string.button_combo))
val comboSetting = object : AbstractMultiStringSetting {
override var strings: MutableSet<String>
get() {

View File

@ -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,

View File

@ -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)
}
}
}
}

View File

@ -142,6 +142,7 @@
<string name="button_home">HOME</string>
<string name="button_swap">Swap Screens</string>
<string name="button_turbo">Turbo</string>
<string name="button_combo">Combo Key</string>
<string name="button_x" translatable="false">X</string>
<string name="button_y" translatable="false">Y</string>
<string name="button_l" translatable="false">L</string>
@ -153,7 +154,6 @@
<string name="turbo_limit_hotkey">Turbo Speed</string>
<string name="turbo_enabled_toast">Turbo Speed Enabled</string>
<string name="turbo_disabled_toast">Turbo Speed Disabled</string>
<string name="combo_key">Combo Key</string>
<string name="combo_key_enable">Enable Combo Button</string>
<string name="combo_key_options">Combo Key Settings</string>
<string name="combo_key_description">Enable and Change Combo Button Bindings.</string>