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