Added First Person VR item management

- Implemented DVDReadVrAsset function to read mapped disc paths for VR assets.
- Created HeldItem structure and ReadHeldItem function for managing held items in the game.
- Developed unit tests for ReadHeldItem to ensure correct functionality and edge case handling.
- Added cockpit item data tests to validate model indexing and parsing of archives.
This commit is contained in:
iChris4 committed 2026-09-29 23:55:52 +02:00
1 parent 75f075b234
commit db30945f4c
26 files changed
+1598 -19

No files matched your search

@@ -189,13 +189,20 @@ class SettingsPage(
write = { c, value -> c.setBool("vr", "hand_steering", value) },
enabledIf = cockpit,
)
// The hands follow the headset's hand tracking; kVrHandTrackingDefault is off. The
// hands are only drawn while they can steer, so it goes with hand steering.
choice(
R.string.vr_cockpit_item_hand, R.string.vr_cockpit_item_hand_helper,
listOf(R.string.vr_item_left, R.string.vr_item_right, R.string.vr_item_off),
read = { stringIndex(it, "vr", "cockpit_item_hand", ITEM_HANDS) },
write = { c, index -> c.setString("vr", "cockpit_item_hand", ITEM_HANDS[index]) },
enabledIf = cockpit,
)
// Tracked hands can show the item with stick steering as well.
toggle(
R.string.vr_hand_tracking, R.string.vr_hand_tracking_helper,
read = { it.bool("vr", "hand_tracking") ?: false },
write = { c, value -> c.setBool("vr", "hand_tracking", value) },
enabledIf = { c -> cockpit(c) && (c.bool("vr", "hand_steering") ?: true) },
enabledIf = { c -> cockpit(c) && ((c.bool("vr", "hand_steering") ?: true) ||
stringIndex(c, "vr", "cockpit_item_hand", ITEM_HANDS) != 2) },
)
slider(
R.string.vr_lean_back, R.string.vr_lean_back_helper, -45.0, 45.0, 1.0,
@@ -755,6 +762,7 @@ class SettingsPage(
val ROTATION_DEFAULT = ROTATIONS.indexOf("yaw_pitch")
// The runtime's default ("cockpit") first.
val SEATS = listOf("cockpit", "custom")
val ITEM_HANDS = listOf("left", "right", "off")
// The runtime's default ("boost") first: an absent key reads as index 0.
val PERFORMANCE_LEVELS = listOf("boost", "sustained_high", "sustained_low", "power_savings", "default")
// runtime_config.h's kVrFoveationLevels, and its Quest default.
@@ -535,6 +535,11 @@
<string name="vr_seat_custom">Custom</string>
<string name="vr_hand_steering">Hand steering</string>
<string name="vr_hand_steering_helper">In the cockpit, squeeze a grip near the steering wheel or handlebar to grab it, and turn it to steer. Releasing both grips gives steering back to the stick. Hand steering by heurazy.</string>
<string name="vr_cockpit_item_hand">Item in cockpit hand</string>
<string name="vr_cockpit_item_hand_helper">Show Player 1\'s settled inventory item above the selected palm. Triple items show the remaining count. Using or losing the item hides it.</string>
<string name="vr_item_left">Left</string>
<string name="vr_item_right">Right</string>
<string name="vr_item_off">Off</string>
<string name="vr_hand_tracking">Tracked hands</string>
<string name="vr_hand_tracking_helper">The cockpit hands follow your own. Holding the controllers, the fingers follow their touch sensors; put one down and the cameras track that hand at once. Put the controllers down to drive with bare hands: close a hand on the wheel to hold it, which also holds the gas; pinch with a free hand to use an item; flick your hands up for a trick; pinch with your left palm facing you to pause. In menus, a right pinch is A. Choose Automatic drift. Needs hand tracking on in the headset\'s settings.</string>
<string name="vr_lean_back">Lean back angle</string>