namespace AcDream.UI.Abstractions.Panels.Settings;
///
/// The five CLIENT-LOCAL preferences retail's "Use Mouse Turning Settings"
/// Gameplay-tab button (gmConfigUI::SetMouseTurningDefaults @0x0049E8F0)
/// writes alongside the one server-synced bit
/// (PlayerOption.UseMouseTurning, carried through
/// RuntimeCharacterOptionsState / SetSingleCharacterOption (0x0005)
/// — NOT stored here). Persisted to settings.json the same way
/// / are; this is the
/// forward-compatible home Campaign OP slice OP6's full Config tab (27 rows)
/// re-homes into its own preference groups without a storage-shape change —
/// these five keys ARE four of that tab's Camera/Input rows
/// (Camera_Stiffness, Camera_AdjustmentSpeed,
/// Camera_AlignToSlope, Input_MouseLookSensitivity,
/// Input_InvertMouseLookYAxis — research doc
/// 2026-08-10-options-panel-structure.md §4).
///
public sealed record CameraTurningSettings(
float Stiffness,
float AdjustmentSpeed,
float MouseLookSensitivity,
bool AlignToSlope,
bool InvertMouseLookYAxis)
{
///
/// Retail's ORDINARY Config-tab defaults (NOT the mouse-turning macro's
/// targets — gmConfigUI::InitOptions @0x0049E400, research doc §4):
/// Stiffness 0.45 (0x3EE66666), AdjustmentSpeed 40.0
/// (0x42200000), MouseLookSensitivity 0.55 (0x3F0CCCCD),
/// AlignToSlope on, InvertMouseLookYAxis off.
///
public static CameraTurningSettings Default { get; } = new(
Stiffness: 0.45f,
AdjustmentSpeed: 40.0f,
MouseLookSensitivity: 0.55f,
AlignToSlope: true,
InvertMouseLookYAxis: false);
///
/// The mouse-turning macro's recommended targets
/// (SetMouseTurningDefaults, research doc §4.4): Stiffness 0.95,
/// AdjustmentSpeed 50.0, MouseLookSensitivity 0.7, AlignToSlope OFF,
/// InvertMouseLookYAxis ON.
///
public static CameraTurningSettings MouseTurningTarget { get; } = new(
Stiffness: 0.95f,
AdjustmentSpeed: 50.0f,
MouseLookSensitivity: 0.7f,
AlignToSlope: false,
InvertMouseLookYAxis: true);
}