HostInterface: Add proper turbo speed setting

This commit is contained in:
Connor McLaughlin
2020-11-03 21:21:11 +10:00
parent d5a5969bd4
commit 2b66492ed8
20 changed files with 201 additions and 98 deletions

View File

@ -538,6 +538,12 @@ void AndroidHostInterface::SetControllerAxisState(u32 index, s32 button_code, fl
false);
}
void AndroidHostInterface::SetFastForwardEnabled(bool enabled)
{
m_fast_forward_enabled = enabled;
UpdateSpeedLimiterState();
}
void AndroidHostInterface::RefreshGameList(bool invalidate_cache, bool invalidate_database,
ProgressCallback* progress_callback)
{
@ -895,6 +901,20 @@ DEFINE_JNI_ARGS_METHOD(jboolean, AndroidHostInterface_hasAnyBIOSImages, jobject
return hi->HasAnyBIOSImages();
}
DEFINE_JNI_ARGS_METHOD(jboolean, AndroidHostInterface_isFastForwardEnabled, jobject obj)
{
return AndroidHelpers::GetNativeClass(env, obj)->IsFastForwardEnabled();
}
DEFINE_JNI_ARGS_METHOD(void, AndroidHostInterface_setFastForwardEnabled, jobject obj, jboolean enabled)
{
if (!System::IsValid())
return;
AndroidHostInterface* hi = AndroidHelpers::GetNativeClass(env, obj);
hi->RunOnEmulationThread([enabled, hi]() { hi->SetFastForwardEnabled(enabled); });
}
DEFINE_JNI_ARGS_METHOD(jstring, AndroidHostInterface_importBIOSImage, jobject obj, jbyteArray data)
{
AndroidHostInterface* hi = AndroidHelpers::GetNativeClass(env, obj);

View File

@ -49,6 +49,7 @@ public:
void SetControllerType(u32 index, std::string_view type_name);
void SetControllerButtonState(u32 index, s32 button_code, bool pressed);
void SetControllerAxisState(u32 index, s32 button_code, float value);
void SetFastForwardEnabled(bool enabled);
void RefreshGameList(bool invalidate_cache, bool invalidate_database, ProgressCallback* progress_callback);
void ApplySettings(bool display_osd_messages);

View File

@ -79,6 +79,9 @@ public class AndroidHostInterface {
public native String importBIOSImage(byte[] data);
public native boolean isFastForwardEnabled();
public native void setFastForwardEnabled(boolean enabled);
static {
System.loadLibrary("duckstation-native");
}

View File

@ -284,11 +284,9 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
return;
}
case 3: // Toggle Speed Limiter
case 3: // Toggle Fast Forward
{
boolean newSetting = !getBooleanSetting("Main/SpeedLimiterEnabled", true);
setBooleanSetting("Main/SpeedLimiterEnabled", newSetting);
applySettings();
AndroidHostInterface.getInstance().setFastForwardEnabled(!AndroidHostInterface.getInstance().isFastForwardEnabled());
return;
}

View File

@ -131,7 +131,7 @@
<item>Load State</item>
<item>Save State</item>
<item>Save State Slot</item>
<item>Toggle Speed Limiter</item>
<item>Toggle Fast Forward</item>
<item>More Options</item>
<item>Quit</item>
</string-array>
@ -283,4 +283,60 @@
<item>75</item>
<item>90</item>
</string-array>
<string-array name="settings_emulation_speed_entries">
<item>Unlimited</item>
<item>10% [6 FPS (NTSC) / 5 FPS (PAL)]</item>
<item>20% [12 FPS (NTSC) / 10 FPS (PAL)]</item>
<item>30% [18 FPS (NTSC) / 15 FPS (PAL)]</item>
<item>40% [24 FPS (NTSC) / 20 FPS (PAL)]</item>
<item>50% [30 FPS (NTSC) / 25 FPS (PAL)]</item>
<item>60% [36 FPS (NTSC) / 30 FPS (PAL)]</item>
<item>70% [42 FPS (NTSC) / 35 FPS (PAL)]</item>
<item>80% [48 FPS (NTSC) / 40 FPS (PAL)]</item>
<item>90% [54 FPS (NTSC) / 45 FPS (PAL)]</item>
<item>100% [60 FPS (NTSC) / 50 FPS (PAL), Default]</item>
<item>125% [75 FPS (NTSC) / 62 FPS (PAL)]</item>
<item>150% [90 FPS (NTSC) / 75 FPS (PAL)]</item>
<item>175% [105 FPS (NTSC) / 87 FPS (PAL)]</item>
<item>200% [120 FPS (NTSC) / 100 FPS (PAL)]</item>
<item>250% [150 FPS (NTSC) / 125 FPS (PAL)]</item>
<item>300% [180 FPS (NTSC) / 150 FPS (PAL)]</item>
<item>350% [210 FPS (NTSC) / 175 FPS (PAL)]</item>
<item>400% [240 FPS (NTSC) / 200 FPS (PAL)]</item>
<item>450% [270 FPS (NTSC) / 225 FPS (PAL)]</item>
<item>500% [300 FPS (NTSC) / 250 FPS (PAL)]</item>
<item>600% [360 FPS (NTSC) / 300 FPS (PAL)]</item>
<item>700% [420 FPS (NTSC) / 350 FPS (PAL)]</item>
<item>800% [480 FPS (NTSC) / 400 FPS (PAL)]</item>
<item>900% [540 FPS (NTSC) / 450 FPS (PAL)]</item>
<item>1000% [600 FPS (NTSC) / 500 FPS (PAL)]</item>
</string-array>
<string-array name="settings_emulation_speed_values">
<item>0.0</item>
<item>0.1</item>
<item>0.2</item>
<item>0.3</item>
<item>0.4</item>
<item>0.5</item>
<item>0.6</item>
<item>0.7</item>
<item>0.8</item>
<item>0.9</item>
<item>1.0</item>
<item>1.25</item>
<item>1.5</item>
<item>1.75</item>
<item>2.0</item>
<item>2.5</item>
<item>3.0</item>
<item>3.5</item>
<item>4.0</item>
<item>4.5</item>
<item>5.0</item>
<item>6.0</item>
<item>7.0</item>
<item>8.0</item>
<item>9.0</item>
<item>10.0</item>
</string-array>
</resources>

View File

@ -17,6 +17,22 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ListPreference
app:key="Main/EmulationSpeed"
app:title="Emulation Speed"
app:entries="@array/settings_emulation_speed_entries"
app:entryValues="@array/settings_emulation_speed_values"
app:defaultValue="1.0"
app:useSimpleSummaryProvider="true"
app:iconSpaceReserved="false" />
<ListPreference
app:key="Main/FastForwardSpeed"
app:title="Fast Forward Speed"
app:entries="@array/settings_emulation_speed_entries"
app:entryValues="@array/settings_emulation_speed_values"
app:defaultValue="0.0"
app:useSimpleSummaryProvider="true"
app:iconSpaceReserved="false" />
<SwitchPreferenceCompat
app:key="Main/SpeedLimiterEnabled"
app:title="@string/settings_behavior_enable_speed_limiter"