Game-specific settings (#623)

This commit is contained in:
redphx
2025-01-28 11:28:26 +07:00
parent 91c8172564
commit e3f971845f
79 changed files with 2205 additions and 1426 deletions

View File

@@ -1,7 +1,9 @@
import type { BaseSettingsStorage } from "@/utils/settings-storages/base-settings-storage";
import type { BlockFeature, CodecProfile, DeviceVibrationMode, GameBarPosition, LoadingScreenRocket, NativeMkbMode, StreamPlayerType, StreamResolution, StreamStat, StreamStatPosition, StreamVideoProcessing, TouchControllerMode, TouchControllerStyleCustom, TouchControllerStyleStandard, UiLayout, UiSection, VideoPosition, VideoPowerPreference, VideoRatio } from "./pref-values"
export const enum StorageKey {
GLOBAL = 'BetterXcloud',
STREAM = 'BetterXcloud.Stream',
LOCALE = 'BetterXcloud.Locale',
LOCALE_TRANSLATIONS = 'BetterXcloud.Locale.Translations',
@@ -16,7 +18,7 @@ export const enum StorageKey {
}
export const enum PrefKey {
export const enum GlobalPref {
VERSION_LAST_CHECK = 'version.lastCheck',
VERSION_LATEST = 'version.latest',
VERSION_CURRENT = 'version.current',
@@ -43,26 +45,11 @@ export const enum PrefKey {
GAME_BAR_POSITION = 'gameBar.position',
LOCAL_CO_OP_ENABLED = 'localCoOp.enabled',
DEVICE_VIBRATION_MODE = 'deviceVibration.mode',
DEVICE_VIBRATION_INTENSITY = 'deviceVibration.intensity',
CONTROLLER_POLLING_RATE = 'controller.pollingRate',
NATIVE_MKB_MODE = 'nativeMkb.mode',
NATIVE_MKB_FORCED_GAMES = 'nativeMkb.forcedGames',
NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY = 'nativeMkb.scroll.sensitivityX',
NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY = 'nativeMkb.scroll.sensitivityY',
MKB_ENABLED = 'mkb.enabled',
MKB_HIDE_IDLE_CURSOR = 'mkb.cursor.hideIdle',
MKB_P1_MAPPING_PRESET_ID = 'mkb.p1.preset.mappingId',
MKB_P1_SLOT = 'mkb.p1.slot',
MKB_P2_MAPPING_PRESET_ID = 'mkb.p2.preset.mappingId',
MKB_P2_SLOT = 'mkb.p2.slot',
KEYBOARD_SHORTCUTS_IN_GAME_PRESET_ID = 'keyboardShortcuts.preset.inGameId',
SCREENSHOT_APPLY_FILTERS = 'screenshot.applyFilters',
@@ -88,6 +75,84 @@ export const enum PrefKey {
UI_REDUCE_ANIMATIONS = 'ui.reduceAnimations',
UI_IMAGE_QUALITY = 'ui.imageQuality',
AUDIO_MIC_ON_PLAYING = 'audio.mic.onPlaying',
AUDIO_VOLUME_CONTROL_ENABLED = 'audio.volume.booster.enabled',
REMOTE_PLAY_ENABLED = 'xhome.enabled',
REMOTE_PLAY_STREAM_RESOLUTION = 'xhome.video.resolution',
GAME_FORTNITE_FORCE_CONSOLE = 'game.fortnite.forceConsole',
}
export type GlobalPrefTypeMap = {
[GlobalPref.AUDIO_MIC_ON_PLAYING]: boolean;
[GlobalPref.AUDIO_VOLUME_CONTROL_ENABLED]: boolean;
[GlobalPref.BLOCK_FEATURES]: BlockFeature[];
[GlobalPref.BLOCK_TRACKING]: boolean;
[GlobalPref.GAME_BAR_POSITION]: GameBarPosition;
[GlobalPref.GAME_FORTNITE_FORCE_CONSOLE]: boolean;
[GlobalPref.LOADING_SCREEN_GAME_ART]: boolean;
[GlobalPref.LOADING_SCREEN_ROCKET]: LoadingScreenRocket;
[GlobalPref.LOADING_SCREEN_SHOW_WAIT_TIME]: boolean;
[GlobalPref.MKB_ENABLED]: boolean;
[GlobalPref.MKB_HIDE_IDLE_CURSOR]: boolean;
[GlobalPref.NATIVE_MKB_FORCED_GAMES]: string[];
[GlobalPref.NATIVE_MKB_MODE]: NativeMkbMode;
[GlobalPref.REMOTE_PLAY_ENABLED]: boolean;
[GlobalPref.REMOTE_PLAY_STREAM_RESOLUTION]: StreamResolution;
[GlobalPref.SCREENSHOT_APPLY_FILTERS]: boolean;
[GlobalPref.SERVER_BYPASS_RESTRICTION]: string;
[GlobalPref.SERVER_PREFER_IPV6]: boolean;
[GlobalPref.SERVER_REGION]: string;
[GlobalPref.STREAM_CODEC_PROFILE]: CodecProfile;
[GlobalPref.STREAM_COMBINE_SOURCES]: boolean;
[GlobalPref.STREAM_MAX_VIDEO_BITRATE]: number;
[GlobalPref.STREAM_PREFERRED_LOCALE]: StreamPreferredLocale;
[GlobalPref.STREAM_RESOLUTION]: StreamResolution;
[GlobalPref.TOUCH_CONTROLLER_AUTO_OFF]: boolean;
[GlobalPref.TOUCH_CONTROLLER_DEFAULT_OPACITY]: number;
[GlobalPref.TOUCH_CONTROLLER_MODE]: TouchControllerMode;
[GlobalPref.TOUCH_CONTROLLER_STYLE_CUSTOM]: TouchControllerStyleCustom;
[GlobalPref.TOUCH_CONTROLLER_STYLE_STANDARD]: TouchControllerStyleStandard;
[GlobalPref.UI_CONTROLLER_FRIENDLY]: boolean;
[GlobalPref.UI_CONTROLLER_SHOW_STATUS]: boolean;
[GlobalPref.UI_DISABLE_FEEDBACK_DIALOG]: boolean;
[GlobalPref.UI_GAME_CARD_SHOW_WAIT_TIME]: boolean;
[GlobalPref.UI_HIDE_SECTIONS]: UiSection[];
[GlobalPref.UI_HIDE_SYSTEM_MENU_ICON]: boolean;
[GlobalPref.UI_IMAGE_QUALITY]: number;
[GlobalPref.UI_LAYOUT]: UiLayout;
[GlobalPref.UI_REDUCE_ANIMATIONS]: boolean;
[GlobalPref.UI_SCROLLBAR_HIDE]: boolean;
[GlobalPref.UI_SIMPLIFY_STREAM_MENU]: boolean;
[GlobalPref.UI_SKIP_SPLASH_VIDEO]: boolean;
[GlobalPref.VERSION_CURRENT]: string;
[GlobalPref.VERSION_LAST_CHECK]: number;
[GlobalPref.VERSION_LATEST]: string;
[GlobalPref.SCRIPT_LOCALE]: string;
[GlobalPref.USER_AGENT_PROFILE]: string;
}
export const enum StreamPref {
LOCAL_CO_OP_ENABLED = 'localCoOp.enabled',
DEVICE_VIBRATION_MODE = 'deviceVibration.mode',
DEVICE_VIBRATION_INTENSITY = 'deviceVibration.intensity',
CONTROLLER_POLLING_RATE = 'controller.pollingRate',
CONTROLLER_SETTINGS = 'controller.settings',
NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY = 'nativeMkb.scroll.sensitivityX',
NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY = 'nativeMkb.scroll.sensitivityY',
MKB_P1_MAPPING_PRESET_ID = 'mkb.p1.preset.mappingId',
MKB_P1_SLOT = 'mkb.p1.slot',
MKB_P2_MAPPING_PRESET_ID = 'mkb.p2.preset.mappingId',
MKB_P2_SLOT = 'mkb.p2.slot',
KEYBOARD_SHORTCUTS_IN_GAME_PRESET_ID = 'keyboardShortcuts.preset.inGameId',
VIDEO_PLAYER_TYPE = 'video.player.type',
VIDEO_POWER_PREFERENCE = 'video.player.powerPreference',
VIDEO_PROCESSING = 'video.processing',
@@ -99,8 +164,6 @@ export const enum PrefKey {
VIDEO_SATURATION = 'video.saturation',
VIDEO_POSITION = 'video.position',
AUDIO_MIC_ON_PLAYING = 'audio.mic.onPlaying',
AUDIO_VOLUME_CONTROL_ENABLED = 'audio.volume.booster.enabled',
AUDIO_VOLUME = 'audio.volume',
STATS_ITEMS = 'stats.items',
@@ -111,85 +174,137 @@ export const enum PrefKey {
STATS_OPACITY_ALL = 'stats.opacity.all',
STATS_OPACITY_BACKGROUND = 'stats.opacity.background',
STATS_CONDITIONAL_FORMATTING = 'stats.colors',
REMOTE_PLAY_ENABLED = 'xhome.enabled',
REMOTE_PLAY_STREAM_RESOLUTION = 'xhome.video.resolution',
GAME_FORTNITE_FORCE_CONSOLE = 'game.fortnite.forceConsole',
}
export type PrefTypeMap = {
[PrefKey.AUDIO_MIC_ON_PLAYING]: boolean,
[PrefKey.AUDIO_VOLUME_CONTROL_ENABLED]: boolean,
[PrefKey.AUDIO_VOLUME]: number,
[PrefKey.BLOCK_FEATURES]: BlockFeature[],
[PrefKey.BLOCK_TRACKING]: boolean,
[PrefKey.CONTROLLER_POLLING_RATE]: number,
[PrefKey.DEVICE_VIBRATION_INTENSITY]: number,
[PrefKey.DEVICE_VIBRATION_MODE]: DeviceVibrationMode,
[PrefKey.GAME_BAR_POSITION]: GameBarPosition,
[PrefKey.GAME_FORTNITE_FORCE_CONSOLE]: boolean,
[PrefKey.KEYBOARD_SHORTCUTS_IN_GAME_PRESET_ID]: number,
[PrefKey.LOADING_SCREEN_GAME_ART]: boolean,
[PrefKey.LOADING_SCREEN_ROCKET]: LoadingScreenRocket,
[PrefKey.LOADING_SCREEN_SHOW_WAIT_TIME]: boolean,
[PrefKey.LOCAL_CO_OP_ENABLED]: boolean,
[PrefKey.MKB_ENABLED]: boolean,
[PrefKey.MKB_HIDE_IDLE_CURSOR]: boolean,
[PrefKey.MKB_P1_MAPPING_PRESET_ID]: number,
[PrefKey.MKB_P1_SLOT]: number,
[PrefKey.NATIVE_MKB_FORCED_GAMES]: string[],
[PrefKey.NATIVE_MKB_MODE]: NativeMkbMode,
[PrefKey.NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY]: number,
[PrefKey.NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY]: number,
[PrefKey.REMOTE_PLAY_ENABLED]: boolean,
[PrefKey.REMOTE_PLAY_STREAM_RESOLUTION]: StreamResolution,
[PrefKey.SCREENSHOT_APPLY_FILTERS]: boolean,
[PrefKey.SERVER_BYPASS_RESTRICTION]: string,
[PrefKey.SERVER_PREFER_IPV6]: boolean,
[PrefKey.SERVER_REGION]: string,
[PrefKey.STATS_CONDITIONAL_FORMATTING]: boolean,
[PrefKey.STATS_ITEMS]: StreamStat[],
[PrefKey.STATS_OPACITY_ALL]: number,
[PrefKey.STATS_OPACITY_BACKGROUND]: number,
[PrefKey.STATS_POSITION]: StreamStatPosition,
[PrefKey.STATS_QUICK_GLANCE_ENABLED]: boolean,
[PrefKey.STATS_SHOW_WHEN_PLAYING]: boolean,
[PrefKey.STATS_TEXT_SIZE]: string,
[PrefKey.STREAM_CODEC_PROFILE]: CodecProfile,
[PrefKey.STREAM_COMBINE_SOURCES]: boolean,
[PrefKey.STREAM_MAX_VIDEO_BITRATE]: number,
[PrefKey.STREAM_PREFERRED_LOCALE]: StreamPreferredLocale,
[PrefKey.STREAM_RESOLUTION]: StreamResolution,
[PrefKey.TOUCH_CONTROLLER_AUTO_OFF]: boolean,
[PrefKey.TOUCH_CONTROLLER_DEFAULT_OPACITY]: number,
[PrefKey.TOUCH_CONTROLLER_MODE]: TouchControllerMode,
[PrefKey.TOUCH_CONTROLLER_STYLE_CUSTOM]: TouchControllerStyleCustom,
[PrefKey.TOUCH_CONTROLLER_STYLE_STANDARD]: TouchControllerStyleStandard,
[PrefKey.UI_CONTROLLER_FRIENDLY]: boolean,
[PrefKey.UI_CONTROLLER_SHOW_STATUS]: boolean,
[PrefKey.UI_DISABLE_FEEDBACK_DIALOG]: boolean,
[PrefKey.UI_GAME_CARD_SHOW_WAIT_TIME]: boolean,
[PrefKey.UI_HIDE_SECTIONS]: UiSection[],
[PrefKey.UI_HIDE_SYSTEM_MENU_ICON]: boolean,
[PrefKey.UI_IMAGE_QUALITY]: number,
[PrefKey.UI_LAYOUT]: UiLayout,
[PrefKey.UI_REDUCE_ANIMATIONS]: boolean,
[PrefKey.UI_SCROLLBAR_HIDE]: boolean,
[PrefKey.UI_SIMPLIFY_STREAM_MENU]: boolean,
[PrefKey.UI_SKIP_SPLASH_VIDEO]: boolean,
[PrefKey.VERSION_CURRENT]: string,
[PrefKey.VERSION_LAST_CHECK]: number,
[PrefKey.VERSION_LATEST]: string,
[PrefKey.VIDEO_BRIGHTNESS]: number,
[PrefKey.VIDEO_CONTRAST]: number,
[PrefKey.VIDEO_MAX_FPS]: number,
[PrefKey.VIDEO_PLAYER_TYPE]: StreamPlayerType,
[PrefKey.VIDEO_POSITION]: VideoPosition,
[PrefKey.VIDEO_POWER_PREFERENCE]: VideoPowerPreference,
[PrefKey.VIDEO_PROCESSING]: StreamVideoProcessing,
[PrefKey.VIDEO_RATIO]: VideoRatio,
[PrefKey.VIDEO_SATURATION]: number,
[PrefKey.VIDEO_SHARPNESS]: number,
export type StreamPrefTypeMap = {
[StreamPref.AUDIO_VOLUME]: number;
[StreamPref.CONTROLLER_POLLING_RATE]: number;
[StreamPref.CONTROLLER_SETTINGS]: ControllerSettings;
[StreamPref.DEVICE_VIBRATION_INTENSITY]: number;
[StreamPref.DEVICE_VIBRATION_MODE]: DeviceVibrationMode;
[StreamPref.KEYBOARD_SHORTCUTS_IN_GAME_PRESET_ID]: number;
[StreamPref.LOCAL_CO_OP_ENABLED]: boolean;
[StreamPref.MKB_P1_MAPPING_PRESET_ID]: number;
[StreamPref.MKB_P1_SLOT]: number;
[StreamPref.MKB_P2_MAPPING_PRESET_ID]: number;
[StreamPref.MKB_P2_SLOT]: number;
[StreamPref.NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY]: number;
[StreamPref.NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY]: number;
[StreamPref.STATS_CONDITIONAL_FORMATTING]: boolean;
[StreamPref.STATS_ITEMS]: StreamStat[];
[StreamPref.STATS_OPACITY_ALL]: number;
[StreamPref.STATS_OPACITY_BACKGROUND]: number;
[StreamPref.STATS_POSITION]: StreamStatPosition;
[StreamPref.STATS_QUICK_GLANCE_ENABLED]: boolean;
[StreamPref.STATS_SHOW_WHEN_PLAYING]: boolean;
[StreamPref.STATS_TEXT_SIZE]: string;
[StreamPref.VIDEO_BRIGHTNESS]: number;
[StreamPref.VIDEO_CONTRAST]: number;
[StreamPref.VIDEO_MAX_FPS]: number;
[StreamPref.VIDEO_PLAYER_TYPE]: StreamPlayerType;
[StreamPref.VIDEO_POSITION]: VideoPosition;
[StreamPref.VIDEO_POWER_PREFERENCE]: VideoPowerPreference;
[StreamPref.VIDEO_PROCESSING]: StreamVideoProcessing;
[StreamPref.VIDEO_RATIO]: VideoRatio;
[StreamPref.VIDEO_SATURATION]: number;
[StreamPref.VIDEO_SHARPNESS]: number;
}
export type AllPrefs = GlobalPref | StreamPref;
export const ALL_PREFS: {
global: GlobalPref[],
stream: StreamPref[],
} = {
global: [
GlobalPref.AUDIO_MIC_ON_PLAYING,
GlobalPref.AUDIO_VOLUME_CONTROL_ENABLED,
GlobalPref.BLOCK_FEATURES,
GlobalPref.BLOCK_TRACKING,
GlobalPref.GAME_BAR_POSITION,
GlobalPref.GAME_FORTNITE_FORCE_CONSOLE,
GlobalPref.LOADING_SCREEN_GAME_ART,
GlobalPref.LOADING_SCREEN_ROCKET,
GlobalPref.LOADING_SCREEN_SHOW_WAIT_TIME,
GlobalPref.MKB_ENABLED,
GlobalPref.MKB_HIDE_IDLE_CURSOR,
GlobalPref.NATIVE_MKB_FORCED_GAMES,
GlobalPref.NATIVE_MKB_MODE,
GlobalPref.REMOTE_PLAY_ENABLED,
GlobalPref.REMOTE_PLAY_STREAM_RESOLUTION,
GlobalPref.SCREENSHOT_APPLY_FILTERS,
GlobalPref.SERVER_BYPASS_RESTRICTION,
GlobalPref.SERVER_PREFER_IPV6,
GlobalPref.SERVER_REGION,
GlobalPref.STREAM_CODEC_PROFILE,
GlobalPref.STREAM_COMBINE_SOURCES,
GlobalPref.STREAM_MAX_VIDEO_BITRATE,
GlobalPref.STREAM_PREFERRED_LOCALE,
GlobalPref.STREAM_RESOLUTION,
GlobalPref.TOUCH_CONTROLLER_AUTO_OFF,
GlobalPref.TOUCH_CONTROLLER_DEFAULT_OPACITY,
GlobalPref.TOUCH_CONTROLLER_MODE,
GlobalPref.TOUCH_CONTROLLER_STYLE_CUSTOM,
GlobalPref.TOUCH_CONTROLLER_STYLE_STANDARD,
GlobalPref.UI_CONTROLLER_FRIENDLY,
GlobalPref.UI_CONTROLLER_SHOW_STATUS,
GlobalPref.UI_DISABLE_FEEDBACK_DIALOG,
GlobalPref.UI_GAME_CARD_SHOW_WAIT_TIME,
GlobalPref.UI_HIDE_SECTIONS,
GlobalPref.UI_HIDE_SYSTEM_MENU_ICON,
GlobalPref.UI_IMAGE_QUALITY,
GlobalPref.UI_LAYOUT,
GlobalPref.UI_REDUCE_ANIMATIONS,
GlobalPref.UI_SCROLLBAR_HIDE,
GlobalPref.UI_SIMPLIFY_STREAM_MENU,
GlobalPref.UI_SKIP_SPLASH_VIDEO,
GlobalPref.VERSION_CURRENT,
GlobalPref.VERSION_LAST_CHECK,
GlobalPref.VERSION_LATEST,
GlobalPref.SCRIPT_LOCALE,
GlobalPref.USER_AGENT_PROFILE,
],
stream: [
StreamPref.AUDIO_VOLUME,
StreamPref.CONTROLLER_POLLING_RATE,
StreamPref.CONTROLLER_SETTINGS,
StreamPref.DEVICE_VIBRATION_INTENSITY,
StreamPref.DEVICE_VIBRATION_MODE,
StreamPref.KEYBOARD_SHORTCUTS_IN_GAME_PRESET_ID,
StreamPref.LOCAL_CO_OP_ENABLED,
StreamPref.MKB_P1_MAPPING_PRESET_ID,
StreamPref.MKB_P1_SLOT,
StreamPref.MKB_P2_MAPPING_PRESET_ID,
StreamPref.MKB_P2_SLOT,
StreamPref.NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY,
StreamPref.NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY,
StreamPref.STATS_CONDITIONAL_FORMATTING,
StreamPref.STATS_ITEMS,
StreamPref.STATS_OPACITY_ALL,
StreamPref.STATS_OPACITY_BACKGROUND,
StreamPref.STATS_POSITION,
StreamPref.STATS_QUICK_GLANCE_ENABLED,
StreamPref.STATS_SHOW_WHEN_PLAYING,
StreamPref.STATS_TEXT_SIZE,
StreamPref.VIDEO_BRIGHTNESS,
StreamPref.VIDEO_CONTRAST,
StreamPref.VIDEO_MAX_FPS,
StreamPref.VIDEO_PLAYER_TYPE,
StreamPref.VIDEO_POSITION,
StreamPref.VIDEO_POWER_PREFERENCE,
StreamPref.VIDEO_PROCESSING,
StreamPref.VIDEO_RATIO,
StreamPref.VIDEO_SATURATION,
StreamPref.VIDEO_SHARPNESS,
],
} as const;
export type AnySettingsStorage = BaseSettingsStorage<GlobalPref> | BaseSettingsStorage<StreamPref>;
export type AnyPref = GlobalPref | StreamPref;
export type PrefTypeMap<Key> = Key extends GlobalPref
? GlobalPrefTypeMap
: Key extends StreamPref
? StreamPrefTypeMap
: never;