新增礼物特效开关的用户覆盖标记功能,更新 TurboModeStateManager 以支持从用户手动操作的状态更新,同时在房间进入时重置用户覆盖标记。确保在处理房间信息更新时同步礼物特效状态。
This commit is contained in:
@@ -32,6 +32,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
// 🔧 新增:更新礼物特效开关状态(通过 RoomInfo.hasAnimationEffect 更新)
|
||||
- (void)updateGiftEffectsForRoom:(NSString *)roomId enabled:(BOOL)enabled;
|
||||
// 支持来源标记:fromUser=YES 表示用户手动开关,打上覆盖标记
|
||||
- (void)updateGiftEffectsForRoom:(NSString *)roomId enabled:(BOOL)enabled fromUser:(BOOL)fromUser;
|
||||
|
||||
// 用户覆盖标记:用于阻止服务端推送覆盖用户选择
|
||||
- (void)setGiftEffectsOverrideForRoom:(NSString *)roomId enabled:(BOOL)enabled;
|
||||
- (BOOL)isGiftEffectsUserOverriddenForRoom:(NSString *)roomId;
|
||||
|
||||
// 🔧 新增:获取各开关状态
|
||||
- (BOOL)isGiftEffectsEnabledForRoom:(NSString *)roomId;
|
||||
|
@@ -87,11 +87,43 @@
|
||||
// 🔧 修复:发送通知以便UI能够更新
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kTurboGiftEffectsEnabledChanged
|
||||
object:nil
|
||||
userInfo:@{@"roomId": roomId, @"on": @(enabled)}];
|
||||
userInfo:@{ @"roomId": roomId, @"on": @(enabled) }];
|
||||
|
||||
NSLog(@"🎮 TurboModeStateManager: 房间 %@ 礼物特效开关更新为 %@", roomId, enabled ? @"开启" : @"关闭");
|
||||
}
|
||||
|
||||
// 向后兼容:默认视为非用户来源
|
||||
- (void)updateGiftEffectsForRoom:(NSString *)roomId enabled:(BOOL)enabled fromUser:(BOOL)fromUser {
|
||||
if (!roomId) return;
|
||||
[self ensureRoomSwitchStatesExist:roomId];
|
||||
NSMutableDictionary *roomStates = [self.roomSwitchStates[roomId] mutableCopy];
|
||||
roomStates[@"giftEffects"] = @(enabled);
|
||||
if (fromUser) {
|
||||
roomStates[@"giftEffectsOverride"] = @(YES);
|
||||
}
|
||||
self.roomSwitchStates[roomId] = roomStates;
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kTurboGiftEffectsEnabledChanged
|
||||
object:nil
|
||||
userInfo:@{ @"roomId": roomId, @"on": @(enabled) }];
|
||||
NSLog(@"🎮 TurboModeStateManager: 房间 %@ 礼物特效开关更新为 %@ (fromUser=%@)", roomId, enabled ? @"开启" : @"关闭", fromUser ? @"YES" : @"NO");
|
||||
}
|
||||
|
||||
// 用户覆盖标记控制
|
||||
- (void)setGiftEffectsOverrideForRoom:(NSString *)roomId enabled:(BOOL)enabled {
|
||||
if (!roomId) return;
|
||||
[self ensureRoomSwitchStatesExist:roomId];
|
||||
NSMutableDictionary *roomStates = [self.roomSwitchStates[roomId] mutableCopy];
|
||||
roomStates[@"giftEffectsOverride"] = @(enabled);
|
||||
self.roomSwitchStates[roomId] = roomStates;
|
||||
}
|
||||
|
||||
- (BOOL)isGiftEffectsUserOverriddenForRoom:(NSString *)roomId {
|
||||
if (!roomId) return NO;
|
||||
[self ensureRoomSwitchStatesExist:roomId];
|
||||
return [self.roomSwitchStates[roomId][@"giftEffectsOverride"] boolValue];
|
||||
}
|
||||
|
||||
// 🔧 修复:获取礼物特效开关状态,考虑全局turbo mode影响
|
||||
- (BOOL)isGiftEffectsEnabledForRoom:(NSString *)roomId {
|
||||
if (!roomId) return NO;
|
||||
@@ -259,6 +291,7 @@
|
||||
|
||||
// 礼物特效:按需求不持久化,这里默认开启(面板或 RoomAnimationView 会基于 roomInfo 决定)
|
||||
BOOL giftEffects = YES;
|
||||
BOOL giftEffectsOverride = NO;
|
||||
|
||||
id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
|
||||
BOOL globalGiftScreen = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : NO;
|
||||
@@ -438,6 +471,7 @@
|
||||
|
||||
// 礼物特效:从房间信息获取,这里先设为默认值
|
||||
BOOL giftEffects = YES;
|
||||
BOOL giftEffectsOverride = NO;
|
||||
|
||||
// 其他三个开关:从 NSUserDefaults 读取
|
||||
id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
|
||||
@@ -451,6 +485,7 @@
|
||||
|
||||
self.roomSwitchStates[roomId] = @{
|
||||
@"giftEffects": @(giftEffects),
|
||||
@"giftEffectsOverride": @(giftEffectsOverride),
|
||||
@"globalGiftScreen": @(globalGiftScreen),
|
||||
@"globalGameScreen": @(globalGameScreen),
|
||||
@"cpMic": @(cpMic)
|
||||
|
@@ -211,8 +211,8 @@
|
||||
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
|
||||
|
||||
if (sender.tag == 0) { // 礼物特效开关
|
||||
// 礼物特效开关不持久化,只更新临时状态
|
||||
[manager updateGiftEffectsForRoom:self.roomId enabled:isOn];
|
||||
// 礼物特效开关不持久化,只更新临时状态,并记录用户覆盖
|
||||
[manager updateGiftEffectsForRoom:self.roomId enabled:isOn fromUser:YES];
|
||||
|
||||
} else if (sender.tag == 1) { // 全局礼物屏幕
|
||||
[manager setGlobalGiftScreenEnabledForRoom:self.roomId enabled:isOn];
|
||||
|
@@ -1727,7 +1727,10 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
// 修复:首次获取roominfo成功后,同步礼物特效状态到开关
|
||||
NSString *roomId = @(roomInfo.roomId).stringValue;
|
||||
[[TurboModeStateManager sharedManager] updateGiftEffectsForRoom:roomId
|
||||
enabled:roomInfo.hasAnimationEffect];
|
||||
enabled:roomInfo.hasAnimationEffect
|
||||
fromUser:NO];
|
||||
// 进入房间后重置用户覆盖标记
|
||||
[[TurboModeStateManager sharedManager] setGiftEffectsOverrideForRoom:roomId enabled:NO];
|
||||
|
||||
[self requestBoomData];
|
||||
|
||||
@@ -2498,6 +2501,16 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:dic];
|
||||
self.roomInfo.hasAnimationEffect = roomInfo.hasAnimationEffect;
|
||||
[self.roomHeaderView onRoomUpdate];
|
||||
// 同步到 TurboModeStateManager,除非用户已手动覆盖
|
||||
{
|
||||
NSString *roomId = @(self.roomInfo.roomId).stringValue;
|
||||
BOOL userOverridden = [[TurboModeStateManager sharedManager] isGiftEffectsUserOverriddenForRoom:roomId];
|
||||
if (!userOverridden) {
|
||||
[[TurboModeStateManager sharedManager] updateGiftEffectsForRoom:roomId
|
||||
enabled:self.roomInfo.hasAnimationEffect
|
||||
fromUser:NO];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user