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

179 lines
6.2 KiB
Mathematica
Raw Normal View History

//
// 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