179 lines
6.2 KiB
Objective-C
179 lines
6.2 KiB
Objective-C
//
|
||
// 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<NSString *, NSNumber *> *)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
|