// // TurboModeStateManager.m // YuMi // // Created by Linus on 2025/1/13. // #import "TurboModeStateManager.h" #import "../XPTurboModeConstants.h" @interface TurboModeStateManager () @property (nonatomic, assign) BOOL globalTurboEnabled; // 全局 turbo 模式 @end @implementation TurboModeStateManager #pragma mark - Singleton + (instancetype)sharedManager { static TurboModeStateManager *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[TurboModeStateManager alloc] init]; }); return instance; } - (instancetype)init { if (self = [super init]) { // 从全局缓存加载 self.globalTurboEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"TurboMode_Global"]; } return self; } #pragma mark - Public Methods - (void)setTurboModeEnabled:(BOOL)enabled { self.globalTurboEnabled = enabled; [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"TurboMode_Global"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSLog(@"🎮 TurboModeStateManager: 全局 turbo mode 设置为 %@", enabled ? @"开启" : @"关闭"); } - (BOOL)isTurboModeEnabled { return self.globalTurboEnabled; } - (void)applyTurboModeToSwitchesForRoom:(NSString *)roomId { if (!roomId) return; BOOL turboModeEnabled = [self isTurboModeEnabled]; if (turboModeEnabled) { // turbo mode = YES,3个开关全部关闭 [self forceCloseAllSwitches:roomId]; NSLog(@"🎮 TurboModeStateManager: 应用 turbo mode,房间 %@ 的3个开关全部关闭", roomId); } else { // turbo mode = NO,按最新需求:全部开关打开 [self forceOpenAllSwitches:roomId]; NSLog(@"🎮 TurboModeStateManager: turbo mode 关闭,房间 %@ 的3个开关全部打开", roomId); } } - (NSDictionary *)getSwitchStatesAfterTurboModeForRoom:(NSString *)roomId { if (!roomId) return @{}; BOOL turboModeEnabled = [self isTurboModeEnabled]; if (turboModeEnabled) { // turbo mode = YES,3个开关全部关闭 return @{ @"giftEffects": @(NO), @"globalGiftScreen": @(NO), @"globalGameScreen": @(NO) }; } else { // turbo mode = NO,返回当前缓存的状态 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // 礼物特效:按需求不持久化,这里默认开启(面板或 RoomAnimationView 会基于 roomInfo 决定) BOOL giftEffects = YES; // 全局礼物屏幕:从缓存读取 id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)]; BOOL globalGiftScreen = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : YES; // 全局游戏屏幕:从缓存读取 id gameScreenObj = [defaults objectForKey:kTurboGlobalGameScreenEnabledKey(roomId)]; BOOL globalGameScreen = (gameScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] : YES; return @{ @"giftEffects": @(giftEffects), @"globalGiftScreen": @(globalGiftScreen), @"globalGameScreen": @(globalGameScreen) }; } } - (void)resetTurboMode { self.globalTurboEnabled = NO; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"TurboMode_Global"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSLog(@"🎮 TurboModeStateManager: 全局 turbo mode 状态已重置"); } #pragma mark - Private Methods - (void)forceCloseAllSwitches:(NSString *)roomId { if (!roomId) return; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // 强制关闭礼物特效开关:不持久化,只发通知 // 强制关闭全局礼物屏幕开关 [defaults setBool:NO forKey:kTurboGlobalGiftScreenEnabledKey(roomId)]; // 强制关闭全局游戏屏幕开关 [defaults setBool:NO forKey:kTurboGlobalGameScreenEnabledKey(roomId)]; [defaults synchronize]; // 发送通知,让相关组件更新状态 [self sendSwitchStateChangeNotifications:roomId]; } - (void)forceOpenAllSwitches:(NSString *)roomId { if (!roomId) return; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // 礼物特效:不持久化,只发通知 // 全局礼物屏幕和全局游戏屏幕:打开并持久化 [defaults setBool:YES forKey:kTurboGlobalGiftScreenEnabledKey(roomId)]; [defaults setBool:YES forKey:kTurboGlobalGameScreenEnabledKey(roomId)]; [defaults synchronize]; // 通知三开关打开 [[NSNotificationCenter defaultCenter] postNotificationName:kTurboGiftEffectsEnabledChanged object:nil userInfo:@{ @"on": @(YES), @"roomId": roomId }]; [[NSNotificationCenter defaultCenter] postNotificationName:kTurboGlobalGiftScreenEnabledChanged object:nil userInfo:@{ @"on": @(YES), @"roomId": roomId }]; [[NSNotificationCenter defaultCenter] postNotificationName:kTurboGlobalGameScreenEnabledChanged object:nil userInfo:@{ @"on": @(YES), @"roomId": roomId }]; } - (void)sendSwitchStateChangeNotifications:(NSString *)roomId { // 发送礼物特效开关状态变化通知 [[NSNotificationCenter defaultCenter] postNotificationName:kTurboGiftEffectsEnabledChanged object:nil userInfo:@{@"on": @(NO), @"roomId": roomId}]; // 发送全局礼物屏幕开关状态变化通知 [[NSNotificationCenter defaultCenter] postNotificationName:kTurboGlobalGiftScreenEnabledChanged object:nil userInfo:@{@"on": @(NO), @"roomId": roomId}]; // 发送全局游戏屏幕开关状态变化通知 [[NSNotificationCenter defaultCenter] postNotificationName:kTurboGlobalGameScreenEnabledChanged object:nil userInfo:@{@"on": @(NO), @"roomId": roomId}]; } - (void)loadTurboModeStatesFromCache { // 不再按房间加载,已改为全局 } @end