Files
peko-ios/YuMi/Modules/YMRoom/View/MoreView/Manager/TurboModeStateManager.m

179 lines
6.2 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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 = YES3个开关全部关闭
[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 = YES3个开关全部关闭
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