新增 TurboModeStateManager 的功能,支持 CP 麦位开关状态管理,优化房间中各个视图对 Turbo 模式的集成。更新相关视图控制器以使用 TurboModeStateManager 获取和设置开关状态,提升代码可维护性和用户体验。同时,新增 CP 麦位相关的本地化字符串,确保多语言支持。

This commit is contained in:
edwinQQQ
2025-09-10 17:21:09 +08:00
parent 58ab43c7d8
commit d414cd1cfc
30 changed files with 683 additions and 209 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "房间背景@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "搜索@3x (1).png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "搜索@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "5@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "5@3x (1).png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "5@3x (2).png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -18,8 +18,13 @@
#import "AccountModel.h"
#import "UserInfoModel.h"
#import "XPLoginAuthCodeVC.h"
///Manager
#import "TurboModeStateManager.h"
#import "FirstRechargeManager.h"
#import "PublicRoomManager.h"
///Tool
#import "XNDJTDDLoadingTool.h"
#import "AccountInfoStorage.h"
@implementation PILoginManager
+(void)loginWithVC:(MvpViewController *)VC isLoginPhone:(BOOL)isLoginPhone{
@@ -90,5 +95,11 @@
//
[[PublicRoomManager sharedManager] initialize];
// 🔧 TurboModeStateManager
NSString *userId = [[AccountInfoStorage instance] getUid];
if (userId) {
[[TurboModeStateManager sharedManager] startupWithCurrentUser:userId];
}
}
@end

View File

@@ -425,8 +425,8 @@ TZImagePickerControllerDelegate>
// displayGIF YES GIF
NSString *filename = [asset valueForKey:@"filename"];
BOOL isGIF = [filename containsString:@"GIF"];
// BOOL isVideo = asset.mediaType == PHAssetMediaTypeVideo;
return isGIF;// || isVideo;
BOOL isVideo = asset.mediaType == PHAssetMediaTypeVideo;
return isGIF || isVideo;
} else {
// displayGIF NO GIF
return ![[asset valueForKey:@"filename"] containsString:@"GIF"];

View File

@@ -14,6 +14,8 @@
#import <libpag/libpag.h>
#import <NIMSDK/NIMSDK.h>
#import <UIImageView+WebCache.h>
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "UIView+VAP.h"
@@ -79,7 +81,7 @@
#import "SocialStageView.h"
#import "MSRoomOnLineView.h"
#import "XPTurboModeConstants.h"
#import "../MoreView/Manager/TurboModeStateManager.h"
#import "TurboModeStateManager.h"
#import "BannerScheduler.h"
#import "GameBannerGestureManager.h"
@@ -186,10 +188,7 @@ BannerSchedulerDelegate
@property (nonatomic, strong) UISwipeGestureRecognizer *swipeWhenPlayGame;
// 🔧 Turbo Mode
@property (nonatomic, assign) BOOL turboGiftEffectsEnabled; //
@property (nonatomic, assign) BOOL turboGlobalGiftScreenEnabled; //
@property (nonatomic, assign) BOOL turboGlobalGameScreenEnabled; //
// 🔧 使 TurboModeStateManager
@property (nonatomic, strong) NSString *currentRoomId; // ID
@end
@@ -458,68 +457,24 @@ BannerSchedulerDelegate
// 🔧 Turbo Mode
- (void)setupTurboModeSwitches {
NSString *roomId = @(self.hostDelegate.getRoomInfo.roomId).stringValue;
self.currentRoomId = roomId;
// 🔧 ID TurboModeStateManager
// TurboModeStateManager ID使
NSString *roomId = [[TurboModeStateManager sharedManager] loadCurrentRoomId];
// 1.
[self loadSwitchStatesFromCache:roomId];
// 2. turbo mode
[[TurboModeStateManager sharedManager] applyTurboModeToSwitchesForRoom:roomId];
// 3. turbo mode
[self forceUpdateLocalSwitchStates:roomId];
NSLog(@"🎮 RoomAnimationView Turbo Mode开关初始化完成 - 房间ID: %@", roomId);
}
// 🔧
- (void)loadSwitchStatesFromCache:(NSString *)roomId {
//
self.turboGiftEffectsEnabled = self.hostDelegate.getRoomInfo.hasAnimationEffect;
// NSUserDefaults NO
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
self.turboGlobalGiftScreenEnabled = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : YES;
id gameScreenObj = [defaults objectForKey:kTurboGlobalGameScreenEnabledKey(roomId)];
self.turboGlobalGameScreenEnabled = (gameScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] : YES;
}
// 🔧
- (void)updateLocalSwitchStates:(NSString *)roomId {
NSDictionary *switchStates = [[TurboModeStateManager sharedManager] getSwitchStatesAfterTurboModeForRoom:roomId];
if (switchStates.count > 0) {
self.turboGiftEffectsEnabled = [switchStates[@"giftEffects"] boolValue];
self.turboGlobalGiftScreenEnabled = [switchStates[@"globalGiftScreen"] boolValue];
self.turboGlobalGameScreenEnabled = [switchStates[@"globalGameScreen"] boolValue];
if (roomId && roomId.length > 0) {
self.currentRoomId = roomId;
NSLog(@"🎮 RoomAnimationView 开关状态已更新 - 礼物特效: %@, 全局礼物屏幕: %@, 全局游戏屏幕: %@",
self.turboGiftEffectsEnabled ? @"开启" : @"关闭",
self.turboGlobalGiftScreenEnabled ? @"开启" : @"关闭",
self.turboGlobalGameScreenEnabled ? @"开启" : @"关闭");
}
}
// 🔧 turbo mode
- (void)forceUpdateLocalSwitchStates:(NSString *)roomId {
// turbo mode
BOOL turboModeEnabled = [[TurboModeStateManager sharedManager] isTurboModeEnabled];
if (turboModeEnabled) {
// turbo mode = YES
self.turboGiftEffectsEnabled = NO;
self.turboGlobalGiftScreenEnabled = NO;
self.turboGlobalGameScreenEnabled = NO;
//
[[TurboModeStateManager sharedManager] updateGiftEffectsForRoom:roomId
enabled:self.hostDelegate.getRoomInfo.hasAnimationEffect];
NSLog(@"🎮 RoomAnimationView 强制更新开关状态 - Turbo Mode 开启,所有开关已关闭");
NSLog(@"🎮 RoomAnimationView Turbo Mode开关初始化完成 - 房间ID: %@", roomId);
} else {
// turbo mode = NO使
[self updateLocalSwitchStates:roomId];
NSLog(@"🎮 RoomAnimationView: 等待 TurboModeStateManager 设置房间ID");
}
}
// 🔧 Turbo Mode
- (void)setupTurboModeNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self
@@ -537,6 +492,17 @@ BannerSchedulerDelegate
name:kTurboGlobalGameScreenEnabledChanged
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTurboCpMicChanged:)
name:kTurboCpMicEnabledChanged
object:nil];
// 🔧 ID
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleCurrentRoomIdSet:)
name:kTurboCurrentRoomIdSet
object:nil];
NSLog(@"🎮 Turbo Mode通知监听设置完成");
}
@@ -632,8 +598,8 @@ BannerSchedulerDelegate
effectPath:(NSString *)effectPath
isCPEnter:(BOOL)isCP {
// 🔧 Turbo Mode
if (!self.turboGiftEffectsEnabled) {
// 🔧 使 TurboModeStateManager
if (![[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 Turbo Mode进房特效已关闭跳过进房动画");
return;
}
@@ -762,11 +728,11 @@ BannerSchedulerDelegate
return;
}
// 🔧 Turbo Mode Banner
// 🔧 使 TurboModeStateManager Banner
if (obj.second == Custom_Message_Sub_General_Floating_Screen_One_Room ||
obj.second == Custom_Message_Sub_General_Floating_Screen_All_Room) {
// banner
if (!self.turboGlobalGameScreenEnabled) {
if (![[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 Turbo Mode全局游戏屏幕已关闭跳过游戏banner");
return;
}
@@ -774,7 +740,7 @@ BannerSchedulerDelegate
obj.second == Custom_Message_Sub_Gift_ChannelNotify ||
obj.second == Custom_Message_Sub_LuckyPackage) {
// banner
if (!self.turboGlobalGiftScreenEnabled) {
if (![[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 Turbo Mode全局礼物屏幕已关闭跳过礼物banner");
return;
}
@@ -978,8 +944,8 @@ BannerSchedulerDelegate
}
- (void)receiveRoomGiftBanner:(AttachmentModel *)obj {
// 🔧 Turbo Mode
if (!self.turboGlobalGiftScreenEnabled) {
// 🔧 使 TurboModeStateManager
if (![[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 RoomAnimationView 全局礼物屏幕已关闭,跳过 RoomGiftBanner");
return;
}
@@ -1010,8 +976,8 @@ BannerSchedulerDelegate
}
- (void)receiveCPEvent:(AttachmentModel *)attachment {
// 🔧 Turbo Mode
if (!self.turboGiftEffectsEnabled) {
// 🔧 使 TurboModeStateManager
if (![[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 RoomAnimationView 礼物特效已关闭跳过CP动画");
return;
}
@@ -1211,8 +1177,8 @@ BannerSchedulerDelegate
}
- (void)receiveLuckGiftBanner:(AttachmentModel *)attachment {
// 🔧 Turbo Mode
if (!self.turboGlobalGiftScreenEnabled) {
// 🔧 使 TurboModeStateManager
if (![[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 RoomAnimationView 全局礼物屏幕已关闭,跳过 LuckyGiftWinningBanner");
return;
}
@@ -1262,8 +1228,8 @@ BannerSchedulerDelegate
}
- (void)receiveGameBanner:(AttachmentModel *)attachment {
// 🔧 Turbo Mode
if (!self.turboGlobalGameScreenEnabled) {
// 🔧 使 TurboModeStateManager
if (![[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 RoomAnimationView 全局游戏屏幕已关闭,跳过 GameBanner");
return;
}
@@ -1401,8 +1367,8 @@ BannerSchedulerDelegate
#pragma mark - Method: Send Gifts
- (void)receiveGiftHandleSendGiftAnimationWith:(GiftReceiveInfoModel *)receiveInfo attachment:(AttachmentModel *)attachment {
// 🔧 Turbo Mode
if (!self.turboGiftEffectsEnabled) {
// 🔧 使 TurboModeStateManager
if (![[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:self.currentRoomId]) {
NSLog(@"🎮 RoomAnimationView 礼物特效已关闭,跳过动画");
return;
}
@@ -4315,10 +4281,9 @@ BannerSchedulerDelegate
}
}
// 🔧 Turbo Mode
// 🔧 Turbo Mode
- (void)handleTurboGiftEffectsChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
self.turboGiftEffectsEnabled = enabled;
//
if (!enabled) {
@@ -4328,10 +4293,9 @@ BannerSchedulerDelegate
NSLog(@"🎮 RoomAnimationView 礼物特效状态变化: %@", enabled ? @"开启" : @"关闭");
}
// 🔧 Turbo Mode
// 🔧 Turbo Mode
- (void)handleTurboGlobalGiftScreenChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
self.turboGlobalGiftScreenEnabled = enabled;
// banner
if (!enabled) {
@@ -4341,10 +4305,9 @@ BannerSchedulerDelegate
NSLog(@"🎮 RoomAnimationView 全局礼物屏幕状态变化: %@", enabled ? @"开启" : @"关闭");
}
// 🔧 Turbo Mode
// 🔧 Turbo Mode
- (void)handleTurboGlobalGameScreenChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
self.turboGlobalGameScreenEnabled = enabled;
// banner
if (!enabled) {
@@ -4354,6 +4317,29 @@ BannerSchedulerDelegate
NSLog(@"🎮 RoomAnimationView 全局游戏屏幕状态变化: %@", enabled ? @"开启" : @"关闭");
}
// 🔧 Turbo Mode CP
- (void)handleTurboCpMicChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
// CP MicMidpointRectManager
NSLog(@"🎮 RoomAnimationView CP麦位开关状态变化: %@", enabled ? @"开启" : @"关闭");
}
// 🔧 ID
- (void)handleCurrentRoomIdSet:(NSNotification *)notification {
NSString *roomId = notification.userInfo[@"roomId"];
if (roomId && roomId.length > 0) {
self.currentRoomId = roomId;
//
[[TurboModeStateManager sharedManager] updateGiftEffectsForRoom:roomId
enabled:self.hostDelegate.getRoomInfo.hasAnimationEffect];
NSLog(@"🎮 RoomAnimationView: 收到房间ID设置通知房间ID: %@", roomId);
}
}
// 🔧
- (BOOL)hasImportantAnimationPlaying {
// topContainer

View File

@@ -26,6 +26,27 @@ NS_ASSUME_NONNULL_BEGIN
// 重置全局 turbo mode
- (void)resetTurboMode;
// 🔧 新增:启动 TurboModeStateManager在用户登录成功后调用
- (void)startupWithCurrentUser:(NSString *)userId;
// 🔧 新增:更新礼物特效开关状态(通过 RoomInfo.hasAnimationEffect 更新)
- (void)updateGiftEffectsForRoom:(NSString *)roomId enabled:(BOOL)enabled;
// 🔧 新增:获取各开关状态
- (BOOL)isGiftEffectsEnabledForRoom:(NSString *)roomId;
- (BOOL)isGlobalGiftScreenEnabledForRoom:(NSString *)roomId;
- (BOOL)isGlobalGameScreenEnabledForRoom:(NSString *)roomId;
- (BOOL)isCpMicEnabledForRoom:(NSString *)roomId;
// 🔧 新增:设置各开关状态
- (void)setGlobalGiftScreenEnabledForRoom:(NSString *)roomId enabled:(BOOL)enabled;
- (void)setGlobalGameScreenEnabledForRoom:(NSString *)roomId enabled:(BOOL)enabled;
- (void)setCpMicEnabledForRoom:(NSString *)roomId enabled:(BOOL)enabled;
// 🔧 新增设置当前房间ID进房成功后调用
- (void)setCurrentRoomId:(NSString *)roomId;
- (NSString *)loadCurrentRoomId;
@end
NS_ASSUME_NONNULL_END

View File

@@ -11,6 +11,9 @@
@interface TurboModeStateManager ()
@property (nonatomic, assign) BOOL globalTurboEnabled; // turbo
@property (nonatomic, strong) NSMutableDictionary<NSString *, NSDictionary *> *roomSwitchStates; //
@property (nonatomic, copy) NSString *currentUserId; // ID
@property (nonatomic, copy) NSString *currentRoomId;
@end
@@ -31,12 +34,153 @@
if (self = [super init]) {
//
self.globalTurboEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"TurboMode_Global"];
self.roomSwitchStates = [NSMutableDictionary dictionary];
self.currentUserId = nil;
}
return self;
}
#pragma mark - Public Methods
// 🔧 TurboModeStateManager
- (void)startupWithCurrentUser:(NSString *)userId {
if (!userId) return;
self.currentUserId = userId;
[self loadAllRoomSwitchStates];
NSLog(@"🎮 TurboModeStateManager: 已启动用户ID: %@", userId);
}
// 🔧
- (void)loadAllRoomSwitchStates {
if (!self.currentUserId) return;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *prefix = [NSString stringWithFormat:@"Turbo_%@_", self.currentUserId];
// UserDefaults key
NSDictionary *allDefaults = [defaults dictionaryRepresentation];
for (NSString *key in allDefaults.allKeys) {
if ([key hasPrefix:prefix] && [key containsString:@"_Room_"]) {
// ID
NSString *roomId = [self extractRoomIdFromKey:key];
if (roomId) {
[self loadSwitchStatesForRoom:roomId];
}
}
}
NSLog(@"🎮 TurboModeStateManager: 已加载 %lu 个房间的开关状态", (unsigned long)self.roomSwitchStates.count);
}
// 🔧 RoomInfo.hasAnimationEffect
- (void)updateGiftEffectsForRoom:(NSString *)roomId enabled:(BOOL)enabled {
if (!roomId) return;
[self ensureRoomSwitchStatesExist:roomId];
NSMutableDictionary *roomStates = [self.roomSwitchStates[roomId] mutableCopy];
roomStates[@"giftEffects"] = @(enabled);
self.roomSwitchStates[roomId] = roomStates;
NSLog(@"🎮 TurboModeStateManager: 房间 %@ 礼物特效开关更新为 %@", roomId, enabled ? @"开启" : @"关闭");
}
// 🔧
- (BOOL)isGiftEffectsEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId];
return [self.roomSwitchStates[roomId][@"giftEffects"] boolValue];
}
// 🔧
- (BOOL)isGlobalGiftScreenEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId];
return [self.roomSwitchStates[roomId][@"globalGiftScreen"] boolValue];
}
// 🔧
- (BOOL)isGlobalGameScreenEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId];
return [self.roomSwitchStates[roomId][@"globalGameScreen"] boolValue];
}
// 🔧 CP
- (BOOL)isCpMicEnabledForRoom:(NSString *)roomId {
if (!roomId) return NO;
[self ensureRoomSwitchStatesExist:roomId];
return [self.roomSwitchStates[roomId][@"cpMic"] boolValue];
}
// 🔧
- (void)setGlobalGiftScreenEnabledForRoom:(NSString *)roomId enabled:(BOOL)enabled {
if (!roomId) return;
[self ensureRoomSwitchStatesExist:roomId];
NSMutableDictionary *roomStates = [self.roomSwitchStates[roomId] mutableCopy];
roomStates[@"globalGiftScreen"] = @(enabled);
self.roomSwitchStates[roomId] = roomStates;
// NSUserDefaults
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
[[NSUserDefaults standardUserDefaults] synchronize];
//
[[NSNotificationCenter defaultCenter] postNotificationName:kTurboGlobalGiftScreenEnabledChanged
object:nil
userInfo:@{@"on": @(enabled), @"roomId": roomId}];
NSLog(@"🎮 TurboModeStateManager: 房间 %@ 全局礼物屏幕开关设置为 %@", roomId, enabled ? @"开启" : @"关闭");
}
// 🔧
- (void)setGlobalGameScreenEnabledForRoom:(NSString *)roomId enabled:(BOOL)enabled {
if (!roomId) return;
[self ensureRoomSwitchStatesExist:roomId];
NSMutableDictionary *roomStates = [self.roomSwitchStates[roomId] mutableCopy];
roomStates[@"globalGameScreen"] = @(enabled);
self.roomSwitchStates[roomId] = roomStates;
// NSUserDefaults
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:kTurboGlobalGameScreenEnabledKey(roomId)];
[[NSUserDefaults standardUserDefaults] synchronize];
//
[[NSNotificationCenter defaultCenter] postNotificationName:kTurboGlobalGameScreenEnabledChanged
object:nil
userInfo:@{@"on": @(enabled), @"roomId": roomId}];
NSLog(@"🎮 TurboModeStateManager: 房间 %@ 全局游戏屏幕开关设置为 %@", roomId, enabled ? @"开启" : @"关闭");
}
// 🔧 CP
- (void)setCpMicEnabledForRoom:(NSString *)roomId enabled:(BOOL)enabled {
if (!roomId) return;
[self ensureRoomSwitchStatesExist:roomId];
NSMutableDictionary *roomStates = [self.roomSwitchStates[roomId] mutableCopy];
roomStates[@"cpMic"] = @(enabled);
self.roomSwitchStates[roomId] = roomStates;
// NSUserDefaults
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:kTurboCpMicEnabledKey(roomId)];
[[NSUserDefaults standardUserDefaults] synchronize];
//
[[NSNotificationCenter defaultCenter] postNotificationName:kTurboCpMicEnabledChanged
object:nil
userInfo:@{@"on": @(enabled), @"roomId": roomId}];
NSLog(@"🎮 TurboModeStateManager: 房间 %@ CP麦位开关设置为 %@", roomId, enabled ? @"开启" : @"关闭");
}
- (void)setTurboModeEnabled:(BOOL)enabled {
self.globalTurboEnabled = enabled;
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"TurboMode_Global"];
@@ -76,11 +220,12 @@
BOOL turboModeEnabled = [self isTurboModeEnabled];
if (turboModeEnabled) {
// turbo mode = YES3
// turbo mode = YES4
return @{
@"giftEffects": @(NO),
@"globalGiftScreen": @(NO),
@"globalGameScreen": @(NO)
@"globalGameScreen": @(NO),
@"cpMic": @(NO)
};
} else {
// turbo mode = NO
@@ -89,18 +234,21 @@
// RoomAnimationView roomInfo
BOOL giftEffects = YES;
//
// 🔧 使 RoomAnimationView XPEffectPanelViewController
id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
BOOL globalGiftScreen = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : YES;
BOOL globalGiftScreen = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : NO;
//
id gameScreenObj = [defaults objectForKey:kTurboGlobalGameScreenEnabledKey(roomId)];
BOOL globalGameScreen = (gameScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] : YES;
BOOL globalGameScreen = (gameScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] : NO;
id cpMicObj = [defaults objectForKey:kTurboCpMicEnabledKey(roomId)];
BOOL cpMic = (cpMicObj != nil) ? [defaults boolForKey:kTurboCpMicEnabledKey(roomId)] : NO;
return @{
@"giftEffects": @(giftEffects),
@"globalGiftScreen": @(globalGiftScreen),
@"globalGameScreen": @(globalGameScreen)
@"globalGameScreen": @(globalGameScreen),
@"cpMic": @(cpMic)
};
}
}
@@ -180,4 +328,87 @@
//
}
// 🔧 key ID
- (NSString *)extractRoomIdFromKey:(NSString *)key {
// key : Turbo_UserId_Room_RoomId_GlobalGiftScreen
NSArray *components = [key componentsSeparatedByString:@"_"];
if (components.count >= 4) {
// "Room"
NSInteger roomIndex = -1;
for (NSInteger i = 0; i < components.count; i++) {
if ([components[i] isEqualToString:@"Room"]) {
roomIndex = i;
break;
}
}
if (roomIndex != -1 && roomIndex + 1 < components.count) {
return components[roomIndex + 1];
}
}
return nil;
}
// 🔧
- (void)ensureRoomSwitchStatesExist:(NSString *)roomId {
if (!roomId) return;
if (!self.roomSwitchStates[roomId]) {
[self loadSwitchStatesForRoom:roomId];
}
}
// 🔧
- (void)loadSwitchStatesForRoom:(NSString *)roomId {
if (!roomId) return;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//
BOOL giftEffects = YES;
// NSUserDefaults
id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
BOOL globalGiftScreen = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : NO;
id gameScreenObj = [defaults objectForKey:kTurboGlobalGameScreenEnabledKey(roomId)];
BOOL globalGameScreen = (gameScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] : NO;
id cpMicObj = [defaults objectForKey:kTurboCpMicEnabledKey(roomId)];
BOOL cpMic = (cpMicObj != nil) ? [defaults boolForKey:kTurboCpMicEnabledKey(roomId)] : NO;
self.roomSwitchStates[roomId] = @{
@"giftEffects": @(giftEffects),
@"globalGiftScreen": @(globalGiftScreen),
@"globalGameScreen": @(globalGameScreen),
@"cpMic": @(cpMic)
};
}
#pragma mark - ID
// 🔧 ID
- (void)setCurrentRoomId:(NSString *)roomId {
if (!roomId) return;
if ([roomId isEqualToString:_currentRoomId]) {
return;
}
_currentRoomId = roomId;
//
[self ensureRoomSwitchStatesExist:roomId];
// ID
[[NSNotificationCenter defaultCenter] postNotificationName:kTurboCurrentRoomIdSet
object:nil
userInfo:@{@"roomId": roomId}];
NSLog(@"🎮 TurboModeStateManager: 设置当前房间ID: %@", roomId);
}
// 🔧 ID
- (NSString *)loadCurrentRoomId {
return self.currentRoomId;
}
@end

View File

@@ -16,15 +16,13 @@
@property (nonatomic, strong) UIButton *dismissButton;
@property (nonatomic, strong) UILabel *titleLabel;
//
//
@property (nonatomic, strong) UISwitch *giftEffectsSwitch; //
@property (nonatomic, strong) UISwitch *globalGiftScreenSwitch; //
@property (nonatomic, strong) UISwitch *globalGameScreenSwitch; //
@property (nonatomic, strong) UISwitch *cpMicSwitch; // CP
//
@property (nonatomic, assign) BOOL giftEffectsEnabled; //
@property (nonatomic, assign) BOOL globalGiftScreenEnabled; //
@property (nonatomic, assign) BOOL globalGameScreenEnabled; //
// 🔧 使 TurboModeStateManager
//
@property (nonatomic, strong) NSString *roomId; // ID
@@ -59,7 +57,7 @@
// - 使 Masonry
[self.bottomAreaBackground mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.mas_equalTo(self.view);
make.height.mas_equalTo(300);
make.height.mas_equalTo(370); //
}];
}
@@ -111,6 +109,11 @@
[self setupSwitchItem:YMLocalizedString(@"20.20.62_text_12") // Global game screen
switch:self.globalGameScreenSwitch
atIndex:2];
// CP
[self setupSwitchItem:YMLocalizedString(@"20.20.62_text_21") // CP mic
switch:self.cpMicSwitch
atIndex:3];
}
- (void)setupSwitchItem:(NSString *)title
@@ -161,6 +164,8 @@
self.globalGiftScreenSwitch = switchViewControl;
} else if (index == 2) {
self.globalGameScreenSwitch = switchViewControl;
} else if (index == 3) {
self.cpMicSwitch = switchViewControl;
}
}
@@ -168,40 +173,30 @@
NSString *roomId = @(self.roomInfo.roomId).stringValue;
self.roomId = roomId;
// turbo mode
BOOL turboModeEnabled = [[TurboModeStateManager sharedManager] isTurboModeEnabled];
// 🔧 使 TurboModeStateManager
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//
[manager updateGiftEffectsForRoom:roomId enabled:self.roomInfo.hasAnimationEffect];
if (turboModeEnabled) {
// turbo mode = YES3
self.giftEffectsEnabled = NO;
self.globalGiftScreenEnabled = NO;
self.globalGameScreenEnabled = NO;
// enabled = NO
NSLog(@"🎮 Turbo Mode 已开启,所有开关显示关闭状态但可点击");
} else {
// turbo mode = NO
// 使
self.giftEffectsEnabled = self.roomInfo.hasAnimationEffect;
// NSUserDefaults NO
id giftScreenObj = [defaults objectForKey:kTurboGlobalGiftScreenEnabledKey(roomId)];
self.globalGiftScreenEnabled = (giftScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] : YES; //
id gameScreenObj = [defaults objectForKey:kTurboGlobalGameScreenEnabledKey(roomId)];
self.globalGameScreenEnabled = (gameScreenObj != nil) ? [defaults boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] : YES; //
}
//
BOOL giftEffectsEnabled = [manager isGiftEffectsEnabledForRoom:roomId];
BOOL globalGiftScreenEnabled = [manager isGlobalGiftScreenEnabledForRoom:roomId];
BOOL globalGameScreenEnabled = [manager isGlobalGameScreenEnabledForRoom:roomId];
BOOL cpMicEnabled = [manager isCpMicEnabledForRoom:roomId];
//
self.giftEffectsSwitch.on = self.giftEffectsEnabled;
self.globalGiftScreenSwitch.on = self.globalGiftScreenEnabled;
self.globalGameScreenSwitch.on = self.globalGameScreenEnabled;
self.giftEffectsSwitch.on = giftEffectsEnabled;
self.globalGiftScreenSwitch.on = globalGiftScreenEnabled;
self.globalGameScreenSwitch.on = globalGameScreenEnabled;
self.cpMicSwitch.on = cpMicEnabled;
NSLog(@"🎮 Turbo Mode开关初始化完成 - 房间ID: %@, 礼物特效: %@, 全局礼物屏幕: %@, 全局游戏屏幕: %@",
NSLog(@"🎮 Turbo Mode开关初始化完成 - 房间ID: %@, 礼物特效: %@, 全局礼物屏幕: %@, 全局游戏屏幕: %@, CP麦位: %@",
roomId,
self.giftEffectsEnabled ? @"开启" : @"关闭",
self.globalGiftScreenEnabled ? @"开启" : @"关闭",
self.globalGameScreenEnabled ? @"开启" : @"关闭");
giftEffectsEnabled ? @"开启" : @"关闭",
globalGiftScreenEnabled ? @"开启" : @"关闭",
globalGameScreenEnabled ? @"开启" : @"关闭",
cpMicEnabled ? @"开启" : @"关闭");
}
- (void)switchValueChanged:(UISwitch *)sender {
@@ -214,52 +209,47 @@
// turbo mode turbo mode
[[TurboModeStateManager sharedManager] setTurboModeEnabled:NO];
//
if (sender.tag == 0) { //
self.giftEffectsEnabled = YES;
} else if (sender.tag == 1) { //
self.globalGiftScreenEnabled = YES;
// 🔧 使 TurboModeStateManager
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
if (sender.tag == 1) { //
[manager setGlobalGiftScreenEnabledForRoom:self.roomId enabled:YES];
} else if (sender.tag == 2) { //
self.globalGameScreenEnabled = YES;
[manager setGlobalGameScreenEnabledForRoom:self.roomId enabled:YES];
} else if (sender.tag == 3) { // CP
[manager setCpMicEnabledForRoom:self.roomId enabled:YES];
}
// RoomAnimationView
[self sendSwitchStateChangeNotification:sender.tag enabled:YES];
NSLog(@"🎮 Turbo Mode 已自动关闭,开关 %ld 已开启", (long)sender.tag);
return;
}
//
// 🔧 使 TurboModeStateManager
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
if (sender.tag == 0) { //
// roomInfo.hasAnimationEffect
self.giftEffectsEnabled = isOn;
// RoomAnimationView
[self sendTurboGiftEffectsNotification:isOn];
//
[manager updateGiftEffectsForRoom:self.roomId enabled:isOn];
} else if (sender.tag == 1) { //
self.globalGiftScreenEnabled = isOn;
// ID
[[NSUserDefaults standardUserDefaults]
setBool:isOn forKey:kTurboGlobalGiftScreenEnabledKey(self.roomId)];
[[NSUserDefaults standardUserDefaults] synchronize];
[self sendTurboGlobalGiftScreenNotification:isOn];
[manager setGlobalGiftScreenEnabledForRoom:self.roomId enabled:isOn];
// 🔧 toast
NSString *toastMessage = isOn ? YMLocalizedString(@"20.20.62_text_17") : YMLocalizedString(@"20.20.62_text_18");
[self showToastWithMessage:toastMessage];
} else if (sender.tag == 2) { //
self.globalGameScreenEnabled = isOn;
// ID
[[NSUserDefaults standardUserDefaults]
setBool:isOn forKey:kTurboGlobalGameScreenEnabledKey(self.roomId)];
[[NSUserDefaults standardUserDefaults] synchronize];
[self sendTurboGlobalGameScreenNotification:isOn];
[manager setGlobalGameScreenEnabledForRoom:self.roomId enabled:isOn];
// 🔧 toast
NSString *toastMessage = isOn ? YMLocalizedString(@"20.20.62_text_19") : YMLocalizedString(@"20.20.62_text_20");
[self showToastWithMessage:toastMessage];
} else if (sender.tag == 3) { // CP
[manager setCpMicEnabledForRoom:self.roomId enabled:isOn];
// 🔧 toast
NSString *toastMessage = isOn ? YMLocalizedString(@"20.20.62_text_22") : YMLocalizedString(@"20.20.62_text_23");
[self showToastWithMessage:toastMessage];
}
// Turbo_Mode
@@ -268,27 +258,14 @@
NSLog(@"🎮 Turbo Mode开关变化 - 索引: %ld, 状态: %@", (long)sender.tag, isOn ? @"开启" : @"关闭");
}
- (void)sendSwitchStateChangeNotification:(NSInteger)switchTag enabled:(BOOL)enabled {
//
switch (switchTag) {
case 0: //
[self sendTurboGiftEffectsNotification:enabled];
break;
case 1: //
[self sendTurboGlobalGiftScreenNotification:enabled];
break;
case 2: //
[self sendTurboGlobalGameScreenNotification:enabled];
break;
default:
break;
}
}
- (void)notifyParentUpdateTurboModeButton {
BOOL allSwitchesOn = self.giftEffectsEnabled &&
self.globalGiftScreenEnabled &&
self.globalGameScreenEnabled;
// 🔧 使 TurboModeStateManager
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
BOOL allSwitchesOn = [manager isGiftEffectsEnabledForRoom:self.roomId] &&
[manager isGlobalGiftScreenEnabledForRoom:self.roomId] &&
[manager isGlobalGameScreenEnabledForRoom:self.roomId] &&
[manager isCpMicEnabledForRoom:self.roomId];
[[NSNotificationCenter defaultCenter]
postNotificationName:kTurboModeButtonStateChanged
@@ -297,27 +274,7 @@
}
#pragma mark - Notification Methods
- (void)sendTurboGiftEffectsNotification:(BOOL)enabled {
[[NSNotificationCenter defaultCenter]
postNotificationName:kTurboGiftEffectsEnabledChanged
object:nil
userInfo:@{@"on": @(enabled)}];
}
- (void)sendTurboGlobalGiftScreenNotification:(BOOL)enabled {
[[NSNotificationCenter defaultCenter]
postNotificationName:kTurboGlobalGiftScreenEnabledChanged
object:nil
userInfo:@{@"on": @(enabled)}];
}
- (void)sendTurboGlobalGameScreenNotification:(BOOL)enabled {
[[NSNotificationCenter defaultCenter]
postNotificationName:kTurboGlobalGameScreenEnabledChanged
object:nil
userInfo:@{@"on": @(enabled)}];
}
// 🔧 TurboModeStateManager
- (void)setupTapGesture {
// VC

View File

@@ -18,6 +18,8 @@
#import "RtcManager.h"
///Model
#import "XPRoomMoreItemModel.h"
///Manager
#import "TurboModeStateManager.h"
#import "RoomInfoModel.h"
#import "AttachmentModel.h"
#import "GuildSuperAdminInfoModel.h"
@@ -159,14 +161,19 @@ extern NSString *const kTurboModeButtonStateChanged;
- (void)updateTurboModeButtonStateOnRoomEnter {
NSString *roomId = @(self.roomInfo.roomId).stringValue;
//
BOOL giftEffectsEnabled = self.roomInfo.hasAnimationEffect;
BOOL globalGiftScreenEnabled = [[NSUserDefaults standardUserDefaults]
boolForKey:kTurboGlobalGiftScreenEnabledKey(roomId)] ?: YES;
BOOL globalGameScreenEnabled = [[NSUserDefaults standardUserDefaults]
boolForKey:kTurboGlobalGameScreenEnabledKey(roomId)] ?: YES;
// 🔧 使 TurboModeStateManager
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
BOOL allOn = giftEffectsEnabled && globalGiftScreenEnabled && globalGameScreenEnabled;
//
[manager updateGiftEffectsForRoom:roomId enabled:self.roomInfo.hasAnimationEffect];
//
BOOL giftEffectsEnabled = [manager isGiftEffectsEnabledForRoom:roomId];
BOOL globalGiftScreenEnabled = [manager isGlobalGiftScreenEnabledForRoom:roomId];
BOOL globalGameScreenEnabled = [manager isGlobalGameScreenEnabledForRoom:roomId];
BOOL cpMicEnabled = [manager isCpMicEnabledForRoom:roomId];
BOOL allOn = giftEffectsEnabled && globalGiftScreenEnabled && globalGameScreenEnabled && cpMicEnabled;
[self updateTurboModeButtonState:allOn];
}

View File

@@ -31,6 +31,13 @@ NSString *kTurboGlobalGiftScreenEnabledKey(NSString *roomId);
*/
NSString *kTurboGlobalGameScreenEnabledKey(NSString *roomId);
/**
* 生成CP麦位开关的缓存 Key
* @param roomId 房间 ID
* @return 格式化的缓存 Key
*/
NSString *kTurboCpMicEnabledKey(NSString *roomId);
// MARK: - 通知名称常量
/**
* 礼物特效开关状态改变通知
@@ -47,6 +54,16 @@ extern NSString *const kTurboGlobalGiftScreenEnabledChanged;
*/
extern NSString *const kTurboGlobalGameScreenEnabledChanged;
/**
* CP麦位开关状态改变通知
*/
extern NSString *const kTurboCpMicEnabledChanged;
/**
* 当前房间ID设置通知
*/
extern NSString *const kTurboCurrentRoomIdSet;
/**
* Turbo Mode 按钮状态改变通知
*/

View File

@@ -20,8 +20,14 @@ NSString *kTurboGlobalGameScreenEnabledKey(NSString *roomId) {
return [NSString stringWithFormat:@"TurboGlobalGameScreen_%@", roomId];
}
NSString *kTurboCpMicEnabledKey(NSString *roomId) {
return [NSString stringWithFormat:@"TurboCpMic_%@", roomId];
}
// MARK: -
NSString *const kTurboGiftEffectsEnabledChanged = @"kTurboGiftEffectsEnabledChanged";
NSString *const kTurboGlobalGiftScreenEnabledChanged = @"kTurboGlobalGiftScreenEnabledChanged";
NSString *const kTurboGlobalGameScreenEnabledChanged = @"kTurboGlobalGameScreenEnabledChanged";
NSString *const kTurboCpMicEnabledChanged = @"kTurboCpMicEnabledChanged";
NSString *const kTurboCurrentRoomIdSet = @"kTurboCurrentRoomIdSet";
NSString *const kTurboModeButtonStateChanged = @"kTurboModeButtonStateChanged";

View File

@@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong, readonly) NSArray *cachedCpList;
/// 缓存麦位position -> uid无用户为-1
@property (nonatomic, strong, readonly) NSDictionary<NSNumber *, NSNumber *> *micPositionToUid;
/// CP麦位开关状态
@property (nonatomic, assign) BOOL cpMicEnabled;
/// 初始化方法
- (instancetype)initWithContainerView:(UIView *)containerView;

View File

@@ -10,6 +10,8 @@
#import <SVGA.h>
#import "StageView.h"
#import <UIKit/UIKit.h>
#import "XPTurboModeConstants.h"
#import <Foundation/Foundation.h>
@class SVGAImageView;
@class SVGAParser;
@@ -35,6 +37,10 @@
_svgaParser = [[SVGAParser alloc] init];
_micPositionToUidInternal = [NSMutableDictionary dictionary];
_midpointRectInfo = [NSMutableDictionary dictionary];
_cpMicEnabled = YES; //
//
[self setupNotifications];
}
return self;
}
@@ -71,8 +77,8 @@
[self.containerView addSubview:rectView];
[self.midpointRects addObject:rectView];
// SVGA
if (autoPlaySVGA) {
// SVGACP
if (autoPlaySVGA && self.cpMicEnabled) {
[self playSVGAAnimationAtFrame:frame];
}
@@ -101,14 +107,16 @@
if (leftUid <= 0 && rightUid <= 0) {
return;
}
// SVGA
for (MicCpInfoModel *obj in cpList) {
BOOL match = (obj.uid == leftUid && obj.loverUid == rightUid) || (obj.uid == rightUid && obj.loverUid == leftUid);
if (match) {
NSInteger safeLevel = MAX(1, MIN(5, obj.cpLevel+1));
NSString *svgaName = [NSString stringWithFormat:@"mic_cp_lv%ld", (long)safeLevel];
[self playSVGAAnimationAtFrame:frame withNamed:svgaName];
break;
// SVGACP
if (self.cpMicEnabled) {
for (MicCpInfoModel *obj in cpList) {
BOOL match = (obj.uid == leftUid && obj.loverUid == rightUid) || (obj.uid == rightUid && obj.loverUid == leftUid);
if (match) {
NSInteger safeLevel = MAX(1, MIN(5, obj.cpLevel+1));
NSString *svgaName = [NSString stringWithFormat:@"mic_cp_lv%ld", (long)safeLevel];
[self playSVGAAnimationAtFrame:frame withNamed:svgaName];
break;
}
}
}
}
@@ -376,7 +384,30 @@
#pragma mark - Dealloc
- (void)setupNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleCpMicSwitchChanged:)
name:kTurboCpMicEnabledChanged
object:nil];
}
- (void)handleCpMicSwitchChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
self.cpMicEnabled = enabled;
if (!enabled) {
// SVGA
[self stopAllSVGAAnimations];
NSLog(@"🔧 CP麦位开关已关闭停止所有SVGA动画");
} else {
// CP
NSLog(@"🔧 CP麦位开关已开启重新绘制CP关系");
//
}
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self removeAllMidpointRects];
}

View File

@@ -16,6 +16,7 @@
#import "RtcManager.h"
#import "XPRoomMiniManager.h"
#import "TTPopup.h"
#import "TurboModeStateManager.h"
#import "Api+ArrangeMic.h"
#import "Api+Room.h"
#import "DESEncrypt.h"
@@ -1075,6 +1076,9 @@ XPCandyTreeInsufficientBalanceViewDelegate>
// 🔧 stage viewCPAPI
NSMutableDictionary<NSString *,MicroQueueModel *> *currentQueue = [self.stageView getMicroQueue];
[self callMicCpListByUidListOnMicChangeWithQueue:currentQueue];
// 🔧 19 micposition 6
[self checkCentralPositionUserQualification:currentQueue];
[self addExitGameButton];
@@ -1197,7 +1201,11 @@ XPCandyTreeInsufficientBalanceViewDelegate>
return;
}
_roomInfo = roomInfo;
[[LuckyPackageLogicManager sharedInstance] setRoomUid:@(roomInfo.uid).stringValue];
NSString *roomId = @(self.roomInfo.roomId).stringValue;
NSLog(@"🎮 设置房间ID: %@", roomId);
[[TurboModeStateManager sharedManager] setCurrentRoomId:roomId];
[[LuckyPackageLogicManager sharedInstance] setRoomUid:roomId];
[[RoomResourceManager sharedManager] updateCurrentSkinID:roomInfo.usedMicSkinId
effectID:roomInfo.usedMicEffectId];
@@ -1739,7 +1747,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
[self.stageView onRoomEntered];
[self.functionView onRoomEntered];
// 🔧
[self initializeCurrentUserMicStatus];
@@ -4303,4 +4311,63 @@ XPCandyTreeInsufficientBalanceViewDelegate>
}
}
/// 19 micposition 6
- (void)checkCentralPositionUserQualification:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
// 19 mic
if (self.roomInfo.type != RoomType_19Mic) {
return;
}
NSLog(@"🔧 检查19 mic房间中央位置用户资格");
// position 6
MicroQueueModel *centralMicModel = nil;
for (NSString *positionKey in queue.allKeys) {
MicroQueueModel *micModel = queue[positionKey];
if (micModel.microState.position == 6) {
centralMicModel = micModel;
break;
}
}
//
if (centralMicModel && centralMicModel.userInfo) {
NSString *userId = [NSString stringWithFormat:@"%ld", (long)centralMicModel.userInfo.uid];
NSLog(@"🔧 中央位置用户:%@,检查资格", userId);
// BossAPI
[Api requestBossMicUp:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
NSLog(@"✅ 中央位置用户资格检查通过:%@", userId);
} else {
NSLog(@"❌ 中央位置用户资格检查失败:%@,错误:%@", userId, msg);
// mic
[self forceDownMicForUser:userId atPosition:6];
}
} roomUid:@(self.roomInfo.uid).stringValue uid:userId];
} else {
NSLog(@"🔧 中央位置无用户,无需检查");
}
}
/// mic
- (void)forceDownMicForUser:(NSString *)userId atPosition:(NSInteger)position {
NSLog(@"🔧 强制用户下mic%@,位置:%ld", userId, (long)position);
// 使 NIM API mic
NIMChatroomQueueRemoveRequest *request = [[NIMChatroomQueueRemoveRequest alloc] init];
request.key = [NSString stringWithFormat:@"%ld", (long)position];
request.roomId = @(self.roomInfo.uid).stringValue;
[[NIMSDK sharedSDK].chatroomManager removeChatroomQueueObject:request completion:^(NSError * _Nullable error, NSDictionary<NSString *,NSString *> * _Nullable element) {
if (error) {
NSLog(@"❌ 强制下mic失败%@,错误:%@", userId, error.localizedDescription);
[XNDJTDDLoadingTool showErrorWithMessage:@"强制下mic失败"];
} else {
NSLog(@"✅ 强制下mic成功%@", userId);
[XNDJTDDLoadingTool showSuccessWithMessage:@"中央位置需要满足贡献值要求已自动下mic"];
}
}];
}
@end

View File

@@ -4251,3 +4251,6 @@ ineHeadView12" = "الحمل";
"20.20.62_text_18" = "لقد عطّلتَ تأثير شاشة هدية غروبال العائمة. لم تعد شاشة هدية غروبال العائمة ظاهرة في هذه الغرفة. انقر لتفعيلها مجددًا.";
"20.20.62_text_19" = "لقد فعّلتَ تأثير شاشة لعبة غروبال العائمة.";
"20.20.62_text_20" = "لقد عطّلتَ تأثير شاشة لعبة غروبال العائمة. لم تعد شاشة لعبة غروبال العائمة ظاهرة في هذه الغرفة. انقر لتفعيلها مجددًا.";
"20.20.62_text_21" = "ميكروفون CP";
"20.20.62_text_22" = "لقد فعّلتَ تأثيرات ميكروفون CP.";
"20.20.62_text_23" = "لقد عطّلتَ تأثيرات ميكروفون CP. لم تعد رسوميات ميكروفون CP ظاهرة في هذه الغرفة. انقر لتفعيلها مجددًا.";

View File

@@ -4030,6 +4030,9 @@
"20.20.62_text_11" = "Global gift screen";
"20.20.62_text_12" = "Global game screen";
"20.20.62_text_13" = "Turbo mode";
"20.20.62_text_21" = "CP mic";
"20.20.62_text_22" = "You have enabled CP mic effects.";
"20.20.62_text_23" = "You have disabled CP mic effects. CP mic animations are no longer visible in this room. Tap to re-enable.";
"20.20.62_text_14" = "我的特效";
"20.20.62_text_15.1" = "Enabling Turbo mode can make the app run smoother.\nTurbo mode: Turns off room gift animations, in-room broadcasts, CP displays, and other animated effects.";
"20.20.62_text_15.2" = "To make the app run smoother, it has automatically switched to Turbo mode for you (Turbo mode: Automatically turns off gift animations, headwear effects, and merges gift messages in the public chat). You can turn off this mode in the room settings.";

View File

@@ -3832,3 +3832,6 @@
"20.20.62_text_18" = "Küresel hediye yüzen ekran efektini devre dışı bıraktınız. Küresel hediye yüzen ekran artık bu odada görünmüyor. Tekrar etkinleştirmek için tıklayın.";
"20.20.62_text_19" = "Küresel oyun yüzen ekran efektini etkinleştirdiniz.";
"20.20.62_text_20" = "Küresel oyun yüzen ekran efektini devre dışı bıraktınız. Küresel oyun yüzen ekran artık bu odada görünmüyor. Tekrar etkinleştirmek için tıklayın.";
"20.20.62_text_21" = "CP mikrofon";
"20.20.62_text_22" = "CP mikrofon efektlerini etkinleştirdiniz.";
"20.20.62_text_23" = "CP mikrofon efektlerini devre dışı bıraktınız. CP mikrofon animasyonları artık bu odada görünmüyor. Tekrar etkinleştirmek için tıklayın.";

View File

@@ -3702,3 +3702,6 @@
"20.20.62_text_18" = "你已经关闭全服礼物飘屏特效。本房间内无法看到全服礼物飘屏,点击即可重新开启。";
"20.20.62_text_19" = "你已经开启全服游戏飘屏特效。";
"20.20.62_text_20" = "你已经关闭全服游戏飘屏特效。本房间内无法看到全服游戏飘屏,点击即可重新开启。";
"20.20.62_text_21" = "CP麦位";
"20.20.62_text_22" = "你已经开启CP麦位特效。";
"20.20.62_text_23" = "你已经关闭CP麦位特效。本房间内无法看到CP麦位动画点击即可重新开启。";