Skip to content

Commit 0719680

Browse files
authored
Merge branch 'master' into lubos_immersive_mode
2 parents 6571ca4 + 350f964 commit 0719680

File tree

8 files changed

+48
-18
lines changed

8 files changed

+48
-18
lines changed

src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,17 @@ public boolean dispatchKeyEvent(KeyEvent event) {
587587
default:
588588
return false;
589589
}
590+
591+
if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
592+
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_UP, action);
593+
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN) {
594+
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_DOWN, action);
595+
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
596+
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_LEFT, action);
597+
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
598+
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, NativeLibrary.ButtonType.DPAD_RIGHT, action);
599+
}
600+
590601
InputDevice input = event.getDevice();
591602

592603
if (input == null) {

src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ private void addVRSettings(ArrayList<SettingsItem> sl) {
435435
Setting vrImmersiveMode = vrSection.getSetting(SettingsFile.KEY_VR_IMMERSIVE_MODE);
436436
sl.add(new SingleChoiceSetting(SettingsFile.KEY_VR_ENVIRONMENT, Settings.SECTION_VR, R.string.vr_background, 0, R.array.vrBackgroundNames, R.array.vrBackgroundValues, VRUtils.getHMDType() == VRUtils.HMDType.QUEST3.getValue() ? 1 : 2, vrEnvironment));
437437
sl.add(new CheckBoxSetting(SettingsFile.KEY_VR_EXTRA_PERFORMANCE_MODE, Settings.SECTION_VR, R.string.vr_extra_performance_mode, R.string.vr_extra_performance_mode_description, false, vrExtraPerformanceMode));
438-
sl.add(new SingleChoiceSetting(SettingsFile.KEY_VR_CPU_LEVEL, Settings.SECTION_VR, R.string.vr_cpu_level, R.string.vr_cpu_level_description, R.array.vrCpuLevelNames, R.array.vrCpuLevelValues, 4, vrCpuLevel));
439-
sl.add(new CheckBoxSetting(SettingsFile.KEY_VR_IMMERSIVE_MODE, Settings.SECTION_VR, R.string.vr_immersive_mode_title, R.string.vr_immersive_mode_description, false, vrImmersiveMode, false, true, mView));
438+
sl.add(new SingleChoiceSetting(SettingsFile.KEY_VR_CPU_LEVEL, Settings.SECTION_VR, R.string.vr_cpu_level, R.string.vr_cpu_level_description, R.array.vrCpuLevelNames, R.array.vrCpuLevelValues, 3, vrCpuLevel));
439+
sl.add(new CheckBoxSetting(SettingsFile.KEY_VR_IMMERSIVE_MODE, Settings.SECTION_VR, R.string.vr_immersive_mode_title, R.string.vr_immersive_mode_description, false, vrImmersiveMode, false, true, mView));
440440
}
441441
}

src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import java.util.TreeSet;
3434

3535
/**
36-
* Contains static methods for interacting with .ini files in which settings are stored.
36+
* Contains static methods for interacting with .ini.vr0 files in which settings are stored.
3737
*/
3838
public final class SettingsFile {
3939
public static final String FILE_NAME_CONFIG = "config";
@@ -245,7 +245,7 @@ public static void saveFile(final String fileName, TreeMap<String, SettingSectio
245245
outputStream.flush();
246246
outputStream.close();
247247
} catch (IOException e) {
248-
Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage());
248+
Log.error("[SettingsFile] File not found: " + fileName + ".ini.vr0 " + e.getMessage());
249249
if (view != null) {
250250
view.showToastMessage(CitraApplication.getAppContext().getString(R.string.error_saving, fileName, e.getMessage()), false);
251251
}
@@ -288,13 +288,13 @@ private static String mapSectionNameToIni(String generalSectionName) {
288288
public static DocumentFile getSettingsFile(String fileName) {
289289
DocumentFile root = DocumentFile.fromTreeUri(CitraApplication.getAppContext(), Uri.parse(DirectoryInitialization.getUserDirectory()));
290290
DocumentFile configDirectory = root.findFile("config");
291-
return configDirectory.findFile(fileName + ".ini");
291+
return configDirectory.findFile(fileName + ".ini.vr0");
292292
}
293293

294294
private static DocumentFile getCustomGameSettingsFile(String gameId) {
295295
DocumentFile root = DocumentFile.fromTreeUri(CitraApplication.getAppContext(), Uri.parse(DirectoryInitialization.getUserDirectory()));
296296
DocumentFile configDirectory = root.findFile("GameSettings");
297-
return configDirectory.findFile(gameId + ".ini");
297+
return configDirectory.findFile(gameId + ".ini.vr0");
298298
}
299299

300300
private static SettingSection sectionFromLine(String line, boolean isCustomGame) {

src/android/app/src/main/jni/config.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
Config::Config() {
2929
// TODO: Don't hardcode the path; let the frontend decide where to put the config files.
30-
sdl2_config_loc = FileUtil::GetUserPath(FileUtil::UserPath::ConfigDir) + "config.ini";
30+
sdl2_config_loc = FileUtil::GetUserPath(FileUtil::UserPath::ConfigDir) + "config.ini.vr0";
3131
std::string ini_buffer;
3232
FileUtil::ReadFileToString(true, sdl2_config_loc, ini_buffer);
3333
if (!ini_buffer.empty()) {
@@ -304,7 +304,7 @@ void Config::ReadValues() {
304304
VRSettings::values.cpu_level =
305305
VRSettings::values.extra_performance_mode_enabled ? XR_HIGHEST_CPU_PERF_LEVEL
306306
: VRSettings::CPUPrefToPerfSettingsLevel(sdl2_config->GetInteger(
307-
"VR", "vr_cpu_level", XR_HIGHEST_CPU_PREFERENCE));
307+
"VR", "vr_cpu_level", 3));
308308
Settings::values.vr_use_immersive_mode = sdl2_config->GetBoolean(
309309
"VR", "vr_immersive_mode", false);
310310

src/android/app/src/main/jni/vr/XrController.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ InputStateStatic::InputStateStatic(const XrInstance& instance, const XrSession&
100100
mThumbClickAction = CreateAction(mActionSet, XR_ACTION_TYPE_BOOLEAN_INPUT, "thumb_click",
101101
nullptr, 2, handSubactionPaths);
102102

103+
mThumbRestTouchAction = CreateAction(mActionSet, XR_ACTION_TYPE_BOOLEAN_INPUT, "thumbresttouch",
104+
nullptr, 2, handSubactionPaths);
105+
103106
mSqueezeTriggerAction = CreateAction(mActionSet, XR_ACTION_TYPE_BOOLEAN_INPUT,
104107
"squeeze_trigger", nullptr, 2, handSubactionPaths);
105108

@@ -141,6 +144,11 @@ InputStateStatic::InputStateStatic(const XrInstance& instance, const XrSession&
141144
bindings.push_back(ActionSuggestedBinding(instance, mThumbClickAction,
142145
"/user/hand/left/input/thumbstick/click"));
143146

147+
bindings.push_back(ActionSuggestedBinding(instance, mThumbRestTouchAction,
148+
"/user/hand/left/input/thumbrest/touch"));
149+
bindings.push_back(ActionSuggestedBinding(instance, mThumbRestTouchAction,
150+
"/user/hand/right/input/thumbrest/touch"));
151+
144152
bindings.push_back(ActionSuggestedBinding(instance, mSqueezeTriggerAction,
145153
"/user/hand/right/input/squeeze/value"));
146154
bindings.push_back(ActionSuggestedBinding(instance, mSqueezeTriggerAction,
@@ -176,6 +184,7 @@ InputStateStatic::~InputStateStatic() {
176184
OXR(xrDestroyAction(mHandPoseAction));
177185
OXR(xrDestroyAction(mThumbStickAction));
178186
OXR(xrDestroyAction(mThumbClickAction));
187+
OXR(xrDestroyAction(mThumbRestTouchAction));
179188
OXR(xrDestroyAction(mSqueezeTriggerAction));
180189

181190
if (mLeftHandSpace != XR_NULL_HANDLE) {
@@ -248,6 +257,12 @@ void InputStateFrame::SyncButtonsAndThumbSticks(
248257
mThumbStickClickState[RIGHT_CONTROLLER] = SyncButtonState(
249258
session, staticState->mThumbClickAction, staticState->mRightHandSubactionPath);
250259

260+
// Sync thumbrest touch states
261+
mThumbrestTouchState[LEFT_CONTROLLER] = SyncButtonState(
262+
session, staticState->mThumbRestTouchAction, staticState->mLeftHandSubactionPath);
263+
mThumbrestTouchState[RIGHT_CONTROLLER] = SyncButtonState(
264+
session, staticState->mThumbRestTouchAction, staticState->mRightHandSubactionPath);
265+
251266
// Sync index trigger states
252267
mIndexTriggerState[LEFT_CONTROLLER] = SyncButtonState(
253268
session, staticState->mLeftHandIndexTriggerAction, staticState->mLeftHandSubactionPath);

src/android/app/src/main/jni/vr/XrController.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class InputStateStatic {
5050
XrAction mHandPoseAction = XR_NULL_HANDLE;
5151
XrAction mThumbClickAction = XR_NULL_HANDLE;
5252
XrAction mSqueezeTriggerAction = XR_NULL_HANDLE;
53+
XrAction mThumbRestTouchAction = XR_NULL_HANDLE;
5354
};
5455

5556
struct InputStateFrame {
@@ -64,6 +65,7 @@ struct InputStateFrame {
6465

6566
XrActionStateVector2f mThumbStickState[NUM_CONTROLLERS];
6667
XrActionStateBoolean mThumbStickClickState[NUM_CONTROLLERS];
68+
XrActionStateBoolean mThumbrestTouchState[NUM_CONTROLLERS];
6769
XrActionStateBoolean mIndexTriggerState[NUM_CONTROLLERS];
6870
XrActionStateBoolean mSqueezeTriggerState[NUM_CONTROLLERS];
6971

src/android/app/src/main/jni/vr/vr_main.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,16 @@ class VRApp {
329329
const auto leftStickHand = InputStateFrame::LEFT_CONTROLLER;
330330
const auto cStickHand = InputStateFrame::RIGHT_CONTROLLER;
331331

332-
const auto& leftThumbstickClickState =
333-
mInputStateFrame.mThumbStickClickState[InputStateFrame::LEFT_CONTROLLER];
334-
const auto& rightThumbstickClickState =
335-
mInputStateFrame.mThumbStickClickState[InputStateFrame::RIGHT_CONTROLLER];
336-
const int dpadHand =
337-
leftThumbstickClickState.currentState ? InputStateFrame::LEFT_CONTROLLER
338-
: rightThumbstickClickState.currentState ? InputStateFrame::RIGHT_CONTROLLER
339-
: InputStateFrame::NUM_CONTROLLERS;
332+
const auto& leftThumbrestTouchState =
333+
mInputStateFrame.mThumbrestTouchState[InputStateFrame::LEFT_CONTROLLER];
334+
const auto& rightThumbrestTouchState =
335+
mInputStateFrame.mThumbrestTouchState[InputStateFrame::RIGHT_CONTROLLER];
336+
const int dpadHand = leftThumbrestTouchState.currentState
337+
? InputStateFrame::RIGHT_CONTROLLER
338+
: rightThumbrestTouchState.currentState
339+
? InputStateFrame::LEFT_CONTROLLER
340+
: InputStateFrame::NUM_CONTROLLERS;
341+
340342
{
341343
static constexpr float kThumbStickDirectionThreshold = 0.5f;
342344
// Doing it this way helps ensure we don't leave the dpad

src/android/app/src/main/jni/vr/vr_settings.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ std::string GetHMDTypeStr();
3737
HMDType HmdTypeFromStr(const std::string& hmdType);
3838

3939
struct Values {
40-
XrPerfSettingsLevelEXT cpu_level = XR_HIGHEST_CPU_PERF_LEVEL;
40+
XrPerfSettingsLevelEXT cpu_level = XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT;
4141
HMDType hmd_type = HMDType::UNKNOWN;
4242
uint32_t resolution_factor = 0;
4343
int32_t vr_environment = 0;
44-
bool extra_performance_mode_enabled = false;
4544
int32_t vr_immersive_mode = 0;
45+
bool extra_performance_mode_enabled = false;
4646
} extern values;
4747

4848
} // namespace VRSettings

0 commit comments

Comments
 (0)