Skip to content

v0.5.72 Four-view camera + Android CAM QA

Source-delivered features

The original single C-key near/far toggle has been replaced by a four-preset native Unreal spring-arm camera cycle:

C press sequence Arm Pitch Intent
0 / 4: CHASE 560 cm -12° Original rear follow camera
1: CLOSE CHASE 270 cm -9° Tighter racing perspective
2: HOOD 0 cm -3° Low forward-mounted camera (verify vehicle clipping in engine)
3: HIGH CHASE 720 cm -40° Steep elevated view of nearby track

Each preset explicitly controls spring arm/socket offsets, lag and collision probe and bounded static lens field of view. Camera state is ephemeral to the pawn; it does not change driving/AI forces, checkpoint scoring, career progression, reward accounting, multiplayer, game saves or lap record eligibility. Unsupported enum values fall back to safe CHASE. The non-compact HUD shows the view name after official race lap/time lines.

On Android, the already reserved upper-middle MenuBrowse rectangle displays CAM 1/2/3/4 during driving, indicating the active preset, and keeps its existing BROWSE menu function while the menu is open. The new policy only accepts a genuine freshly pressed finger on this specific control when a real mode, qualified circuit and local driver exist, with no game/menu pause, focus-loss latch or finished event. Dragging a steering/pedal finger into CAM never switches the view. Input safety and viewport ownership remain unchanged.

Independent strict source tests

cmake -S Tests/Standalone -B Tests/Standalone/build -DCMAKE_BUILD_TYPE=Release
cmake --build Tests/Standalone/build --config Release
ctest --test-dir Tests/Standalone/build -C Release \
  -R '^(CameraPresets|TouchCameraCyclePolicy)$' --output-on-failure
python3 -m unittest discover -s Tests/Editor -p '*Tests.py' -v

The C++20 tests verify distinct deterministic framing, 4→1 cycling, reset, invalid configurations, correct names, exact shared TouchControlLayout disjoint hit tests, fresh press gating, paused and menu/focus/restart conditions, and all unrelated action regions. CameraPresetBindingTests.py checks real UE pawn spring-arm updates, keyboard action binding, shared Android menu-vs-race rectangle, live race HUD ordering and source/test registration.

These are source tests, not Unreal Editor/UHT compilation.

Required engine/device acceptance before playable claims

  • Compile real licensed UE 5.8 Editor and game targets with UHT, record build SHA, UHT logs and toolchain.
  • Create and cook the original owned circuit map, start a car with authenticated collision/physics and ensure the view does not pass through the chassis, cabin, barriers or scenery.
  • On Windows, cycle all four views while accelerating, braking, reversing, resetting the car, crossing gates, pausing/resuming and using menus. Verify default Chase is the original camera.
  • On Android test real multitouch: steering + throttle + CAM, drag over CAM while a pedal finger is held, press duplication, rotation while a finger is down, background/resume, menu BROWSE, pause and recovery. CAM must not steal or latch accelerator/steering fingers or permit a camera cycle on an invalid or unfinished race world.
  • Check several device aspect ratios and DPI: low right-hand buttons remain clear; upper-middle numbered CAM must not overlap the speed/time HUD, SAVE FAILED warning or menu controls. Verify natural camera lag, lens field of view and spring arm collision behavior at high speeds and narrow track walls.
  • Attach actual package provenance, screenshots, device model/OS, failures and benchmark metrics to Android issue #13.

v0.5.72 is published as a source-only pre-release with zero executable assets. This is not proof of a working UE camera, cooked original track or playable game build.

Next-cycle temporary rear view (not a new camera preset)

Hold V on keyboard or left shoulder on gamepad during an eligible active race to point the camera 180 degrees behind. Release immediately restores the current selected front-facing chase, close, hood or high view. Pausing or clearing driver input cancels the hold; it does not alter car heading or racing rules. Separate source and real-game QA checklist. This has not been verified in Unreal Engine or on an installed device.