namespace AcDream.UI.Abstractions.Panels.Settings; /// /// Per-character preferences persisted to settings.json under /// character[toonName]. Settings on this tab are scoped to a /// single toon; switching characters loads a different bag. /// /// /// L.0 scope: local-only. The settings here describe how the /// client UI behaves for the active toon — they don't yet flow to the /// server. When server-sync ships, options like /// would be pushed via the retail Player-Options packet. /// /// /// /// MVP shape — four settings only. Easy to grow when more per-toon /// preferences land. Each is value-typed so equality and Cancel-revert /// behave like the other tabs' records. /// /// public sealed record CharacterSettings( string DefaultChatChannel, // "Local" / "Allegiance" / "Fellowship" / "General" / etc. bool AutoAttack, // Tap-to-attack continues swinging until target dies bool ConfirmSalvage, // Prompt before salvaging valuable items bool ShowPickupMessages) // "You picked up X" lines in chat { /// Defaults applied to a fresh character (no settings.json /// entry yet). Conservative — opt-in for AutoAttack, opt-in for /// confirmation prompts, pickup messages on by default. public static CharacterSettings Default { get; } = new( DefaultChatChannel: "Local", AutoAttack: false, ConfirmSalvage: true, ShowPickupMessages: true); /// Channel-name presets exposed in the dropdown. Order /// roughly matches retail's chat-channel routing. public static System.Collections.Generic.IReadOnlyList AvailableChannels { get; } = new[] { "Local", "Allegiance", "Fellowship", "General", "Trade", "LFG", "Roleplay", }; }