diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt index 583e59863..be2e2939d 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt @@ -773,6 +773,7 @@ object NativeLibrary { const val BUTTON_DEBUG = 781 const val BUTTON_GPIO14 = 782 const val BUTTON_SWAP = 800 + const val BUTTON_TURBO = 801 } /** diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt index c91f63d40..cb4ea96d9 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt @@ -52,7 +52,7 @@ class EmulationActivity : AppCompatActivity() { get() = PreferenceManager.getDefaultSharedPreferences(CitraApplication.appContext) var isActivityRecreated = false private val emulationViewModel: EmulationViewModel by viewModels() - private val settingsViewModel: SettingsViewModel by viewModels() + val settingsViewModel: SettingsViewModel by viewModels() private lateinit var binding: ActivityEmulationBinding private lateinit var screenAdjustmentUtil: ScreenAdjustmentUtil diff --git a/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt index d5d78710e..b6b2c1c67 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt @@ -954,12 +954,12 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram private fun showToggleControlsDialog() { val editor = preferences.edit() - val enabledButtons = BooleanArray(15) + val enabledButtons = BooleanArray(16) enabledButtons.forEachIndexed { i: Int, _: Boolean -> // Buttons that are disabled by default var defaultValue = true when (i) { - 6, 7, 12, 13, 14 -> defaultValue = false + 6, 7, 12, 13, 14, 15 -> defaultValue = false } enabledButtons[i] = preferences.getBoolean("buttonToggle$i", defaultValue) } @@ -1137,10 +1137,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram .apply() val editor = preferences.edit() - for (i in 0 until 15) { + for (i in 0 until 16) { var defaultValue = true when (i) { - 6, 7, 12, 13, 14 -> defaultValue = false + 6, 7, 12, 13, 14, 15 -> defaultValue = false } editor.putBoolean("buttonToggle$i", defaultValue) } 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 9b30a7fb1..c3c6bd7ef 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 @@ -1,4 +1,4 @@ -// Copyright 2023 Citra Emulator Project +// Copyright Citra Emulator Project / Azahar Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -24,6 +24,7 @@ import androidx.preference.PreferenceManager import org.citra.citra_emu.CitraApplication import org.citra.citra_emu.NativeLibrary import org.citra.citra_emu.R +import org.citra.citra_emu.features.hotkeys.HotkeyFunctions import org.citra.citra_emu.utils.EmulationMenuSettings import java.lang.NullPointerException import kotlin.math.min @@ -44,6 +45,8 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex private var buttonBeingConfigured: InputOverlayDrawableButton? = null private var dpadBeingConfigured: InputOverlayDrawableDpad? = null private var joystickBeingConfigured: InputOverlayDrawableJoystick? = null + private val settingsViewModel = NativeLibrary.sEmulationActivity.get()!!.settingsViewModel + private val hotkeyFunctions = HotkeyFunctions(settingsViewModel.settings) // Stores the ID of the pointer that interacted with the 3DS touchscreen. private var touchscreenPointerId = -1 @@ -104,6 +107,11 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex swapScreen() } + if (button.id == NativeLibrary.ButtonType.BUTTON_TURBO && button.status == NativeLibrary.ButtonState.PRESSED) { + + hotkeyFunctions.setTurboSpeed((!hotkeyFunctions.isTurboSpeedEnabled)) + } + NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.id, button.status) shouldUpdateView = true } @@ -468,6 +476,18 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex ) ) } + + if (preferences.getBoolean("buttonToggle15", false)) { + overlayButtons.add( + initializeOverlayButton( + context, + R.drawable.button_turbo, + R.drawable.button_turbo_pressed, + NativeLibrary.ButtonType.BUTTON_TURBO, + orientation + ) + ) + } } fun refreshControls() { @@ -673,6 +693,14 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex NativeLibrary.ButtonType.BUTTON_SWAP.toString() + "-Y", resources.getInteger(R.integer.N3DS_BUTTON_SWAP_Y).toFloat() / 1000 * maxY ) + .putFloat( + NativeLibrary.ButtonType.BUTTON_TURBO.toString() + "-X", + resources.getInteger(R.integer.N3DS_BUTTON_TURBO_X).toFloat() / 1000 * maxX + ) + .putFloat( + NativeLibrary.ButtonType.BUTTON_TURBO.toString() + "-Y", + resources.getInteger(R.integer.N3DS_BUTTON_TURBO_Y).toFloat() / 1000 * maxY + ) .apply() } @@ -816,6 +844,14 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex NativeLibrary.ButtonType.BUTTON_SWAP.toString() + portrait + "-Y", resources.getInteger(R.integer.N3DS_BUTTON_SWAP_PORTRAIT_Y).toFloat() / 1000 * maxY ) + .putFloat( + NativeLibrary.ButtonType.BUTTON_TURBO.toString() + portrait + "-X", + resources.getInteger(R.integer.N3DS_BUTTON_TURBO_PORTRAIT_X).toFloat() / 1000 * maxX + ) + .putFloat( + NativeLibrary.ButtonType.BUTTON_TURBO.toString() + portrait + "-Y", + resources.getInteger(R.integer.N3DS_BUTTON_TURBO_PORTRAIT_Y).toFloat() / 1000 * maxY + ) .apply() } @@ -928,6 +964,7 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex NativeLibrary.ButtonType.BUTTON_START, NativeLibrary.ButtonType.BUTTON_SELECT, NativeLibrary.ButtonType.BUTTON_SWAP -> 0.08f + NativeLibrary.ButtonType.BUTTON_TURBO -> 0.10f NativeLibrary.ButtonType.TRIGGER_L, NativeLibrary.ButtonType.TRIGGER_R, diff --git a/src/android/app/src/main/res/drawable-hdpi/button_turbo.png b/src/android/app/src/main/res/drawable-hdpi/button_turbo.png new file mode 100644 index 000000000..10a0eb8b9 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/button_turbo.png differ diff --git a/src/android/app/src/main/res/drawable-hdpi/button_turbo_pressed.png b/src/android/app/src/main/res/drawable-hdpi/button_turbo_pressed.png new file mode 100644 index 000000000..fd35892d5 Binary files /dev/null and b/src/android/app/src/main/res/drawable-hdpi/button_turbo_pressed.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/button_turbo.png b/src/android/app/src/main/res/drawable-xhdpi/button_turbo.png new file mode 100644 index 000000000..6857a2d80 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/button_turbo.png differ diff --git a/src/android/app/src/main/res/drawable-xhdpi/button_turbo_pressed.png b/src/android/app/src/main/res/drawable-xhdpi/button_turbo_pressed.png new file mode 100644 index 000000000..2047ed687 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xhdpi/button_turbo_pressed.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/button_turbo.png b/src/android/app/src/main/res/drawable-xxhdpi/button_turbo.png new file mode 100644 index 000000000..55f2ad885 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/button_turbo.png differ diff --git a/src/android/app/src/main/res/drawable-xxhdpi/button_turbo_pressed.png b/src/android/app/src/main/res/drawable-xxhdpi/button_turbo_pressed.png new file mode 100644 index 000000000..b3d436304 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxhdpi/button_turbo_pressed.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/button_turbo.png b/src/android/app/src/main/res/drawable-xxxhdpi/button_turbo.png new file mode 100644 index 000000000..a235097e3 Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/button_turbo.png differ diff --git a/src/android/app/src/main/res/drawable-xxxhdpi/button_turbo_pressed.png b/src/android/app/src/main/res/drawable-xxxhdpi/button_turbo_pressed.png new file mode 100644 index 000000000..47a911c4f Binary files /dev/null and b/src/android/app/src/main/res/drawable-xxxhdpi/button_turbo_pressed.png differ diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index bef6bb558..51b68bd60 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -131,6 +131,7 @@ @string/controller_c @string/button_home @string/button_swap + @string/button_turbo diff --git a/src/android/app/src/main/res/values/integers.xml b/src/android/app/src/main/res/values/integers.xml index 50cde75f8..1f19c2373 100644 --- a/src/android/app/src/main/res/values/integers.xml +++ b/src/android/app/src/main/res/values/integers.xml @@ -33,6 +33,8 @@ 850 370 850 + 630 + 850 810 @@ -65,5 +67,7 @@ 794 460 675 + 453 + 720 diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 612d12345..c77afdaeb 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -137,6 +137,7 @@ START HOME Swap Screens + Turbo X Y L