Files
peko-ios/YuMi/Modules/YMRoom/View/MoreView/Action/XPPKAction.m

326 lines
12 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.

//
// XPPKAction.m
// YUMI
//
// Created by YUMI on 2024/01/01.
//
#import "XPPKAction.h"
#import "XPRoomMoreMenuActionContext.h"
#import "RoomInfoModel.h"
#import "DJDKMIMOMColor.h"
#import "TTPopup.h"
#import "BaseViewController.h"
#import "XPRoomPKViewController.h"
#import "XPAcrossRoomPKViewController.h"
#import "XPAnchorPKViewController.h"
#import "AccountInfoStorage.h"
@implementation XPPKAction
#pragma mark - 同房PK模式
+ (instancetype)roomPKOpenAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter1");
action.imageName = @"room_pk_menu_icon";
action.type = RoomMoreMenuType_Room_PK_Open;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
+ (instancetype)roomPKCloseAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter26");
action.imageName = @"room_pk_menu_icon";
action.type = RoomMoreMenuType_Room_PK_Close;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
#pragma mark - 跨房PK
+ (instancetype)acrossRoomPKOpenAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter31");
action.imageName = @"crossroom_pk_menu_icon";
action.type = RoomMoreMenuType_Room_Across_PK_Open;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
+ (instancetype)acrossRoomPKCloseAction{
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter31");
action.imageName = @"crossroom_pk_menu_icon";
action.type = RoomMoreMenuType_Room_Across_PK_Close;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
#pragma mark - 主播PK
+ (instancetype)anchorPKOpenAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter33");
action.imageName = @"room_more_menu_anchor_pk";
action.type = RoomMoreMenuType_Room_Anchor_PK_Open;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
+ (instancetype)anchorPKCloseAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter32");
action.imageName = @"room_more_menu_anchor_pk";
action.type = RoomMoreMenuType_Room_Anchor_PK_Close;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
#pragma mark - 相亲模式
+ (instancetype)datingOpenAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter8");
action.imageName = @"room_more_menu_dating";
action.type = RoomMoreMenuType_Room_Dating_Open;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
+ (instancetype)datingCloseAction {
XPPKAction *action = [[XPPKAction alloc] init];
action.title = YMLocalizedString(@"XPMoreMenuPresenter29");
action.imageName = @"room_more_menu_dating";
action.type = RoomMoreMenuType_Room_Dating_Close;
action.titleColor = [DJDKMIMOMColor appCellBackgroundColor];
return action;
}
#pragma mark - 根据房间信息创建Action
+ (instancetype)roomPKActionWithRoomInfo:(RoomInfoModel *)roomInfo {
return roomInfo.roomModeType == RoomModeType_Open_PK_Mode ? [self roomPKOpenAction] : [self roomPKCloseAction];
}
+ (instancetype)corssPKActionWithRoomInfo:(RoomInfoModel *)roomInfo {
return roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode ? [self acrossRoomPKCloseAction] : [self acrossRoomPKOpenAction];
}
+ (instancetype)blindActionWithRoomInfo:(RoomInfoModel *)roomInfo {
return roomInfo.roomModeType == RoomModeType_Open_Blind ? [self datingCloseAction] : [self datingOpenAction];
}
#pragma mark - XPRoomMoreMenuAction
- (BOOL)canExecuteWithContext:(XPRoomMoreMenuActionContext *)context {
NSLog(@"=== XPPKAction canExecuteWithContext ===");
NSLog(@"Action 类型: %ld, 标题: %@", (long)self.type, self.title);
// 所有PK相关的Action都可以执行
return YES;
}
- (void)executeWithContext:(XPRoomMoreMenuActionContext *)context {
NSLog(@"=== XPPKAction executeWithContext ===");
NSLog(@"Action 类型: %ld, 标题: %@", (long)self.type, self.title);
switch (self.type) {
case RoomMoreMenuType_Room_PK_Open:
[self executeRoomPKOpen:context];
break;
case RoomMoreMenuType_Room_PK_Close:
[self executeRoomPKClose:context];
break;
case RoomMoreMenuType_Room_Across_PK_Open:
[self executeAcrossRoomPKOpen:context];
break;
case RoomMoreMenuType_Room_Across_PK_Close:
[self executeAcrossRoomPKClose:context];
break;
case RoomMoreMenuType_Room_Anchor_PK_Open:
[self executeAnchorPKOpen:context];
break;
case RoomMoreMenuType_Room_Anchor_PK_Close:
[self executeAnchorPKClose:context];
break;
case RoomMoreMenuType_Room_Dating_Open:
[self executeDatingOpen:context];
break;
case RoomMoreMenuType_Room_Dating_Close:
[self executeDatingClose:context];
break;
default:
NSLog(@"❌ 未知的PK Action类型: %ld", (long)self.type);
break;
}
}
#pragma mark - 私有执行方法
- (void)executeRoomPKOpen:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行开启同房PK模式");
// 检查房间模式冲突
if (context.roomInfo.roomModeType == RoomModeType_Open_Blind) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController20") context:context];
[self dismissViewController:context];
return;
}
if (context.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController21") context:context];
[self dismissViewController:context];
return;
}
// 跳转到同房PK页面
[self dismissViewController:context];
XPRoomPKViewController *roomPKVC = [[XPRoomPKViewController alloc] initWithDelegate:context.hostDelegate];
[context.hostDelegate.getCurrentNav pushViewController:roomPKVC animated:YES];
}
- (void)executeRoomPKClose:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行关闭同房PK模式");
// 跳转到同房PK页面
[self dismissViewController:context];
XPRoomPKViewController *roomPKVC = [[XPRoomPKViewController alloc] initWithDelegate:context.hostDelegate];
[context.hostDelegate.getCurrentNav pushViewController:roomPKVC animated:YES];
}
- (void)executeAcrossRoomPKOpen:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行开启跨房PK");
// 检查房间模式冲突
if (context.roomInfo.roomModeType == RoomModeType_Open_Blind) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController13") context:context];
[self dismissViewController:context];
return;
}
if (context.roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController14") context:context];
[self dismissViewController:context];
return;
}
// 跳转到跨房PK页面
[self dismissViewController:context];
NSString *roomUid = [NSString stringWithFormat:@"%ld", context.roomInfo.uid];
XPAcrossRoomPKViewController *acrossRoomPKVC = [[XPAcrossRoomPKViewController alloc] initWithRoomUid:roomUid];
[context.hostDelegate.getCurrentNav presentViewController:acrossRoomPKVC animated:YES completion:nil];
}
- (void)executeAcrossRoomPKClose:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行关闭跨房PK");
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController15") context:context];
[self dismissViewController:context];
}
- (void)executeAnchorPKOpen:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行开启主播PK");
if (context.hostDelegate.getRoomInfo.pkMatchStartTime) {
// PK匹配中显示取消匹配确认框
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.message = YMLocalizedString(@"XPRoomMoreMenuViewController16");
[TTPopup alertWithConfig:config confirmHandler:^{
NSString *roomUid = [NSString stringWithFormat:@"%ld", context.roomInfo.uid];
// [context.hostDelegate requestCancelMatchRandomPK:roomUid];
} cancelHandler:^{
}];
} else {
// 跳转到主播PK页面
[self dismissViewController:context];
NSString *roomUid = [NSString stringWithFormat:@"%ld", context.roomInfo.uid];
XPAnchorPKViewController *anchorPKVC = [[XPAnchorPKViewController alloc] initWithRoomUid:roomUid];
[context.hostDelegate.getCurrentNav presentViewController:anchorPKVC animated:YES completion:nil];
}
}
- (void)executeAnchorPKClose:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行关闭主播PK");
if (context.roomInfo.pkState == AcrossRoomPkStateTypePenalty) {
if ([context.roomInfo.winUid isEqualToString:[AccountInfoStorage instance].getUid]) {
// 赢
if (context.roomInfo.roundId) {
// [context.hostDelegate requestFinishAnchorPK:[NSString stringWithFormat:@"%ld", context.roomInfo.roundId]];
}
} else if ([context.roomInfo.winUid isEqualToString:context.roomInfo.pkUid]) {
// 输,不需要操作
} else {
// 平局
if (context.roomInfo.roundId) {
// [context.hostDelegate requestFinishAnchorPK:[NSString stringWithFormat:@"%ld", context.roomInfo.roundId]];
}
}
} else {
if (context.roomInfo.roundId) {
// [context.hostDelegdate requestFinishAnchorPK:[NSString stringWithFormat:@"%ld", context.roomInfo.roundId]];
}
}
}
- (void)executeDatingOpen:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行开启相亲模式");
// 检查房间模式冲突
if (context.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController6") context:context];
[self dismissViewController:context];
return;
}
if (context.roomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
[self showErrorToast:YMLocalizedString(@"XPRoomMoreMenuViewController7") context:context];
[self dismissViewController:context];
return;
}
// 显示确认框
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.message = YMLocalizedString(@"XPRoomMoreMenuViewController8");
config.confirmButtonConfig.title = YMLocalizedString(@"XPRoomMoreMenuViewController9");
[TTPopup alertWithConfig:config confirmHandler:^{
NSString *roomUid = [NSString stringWithFormat:@"%ld", context.roomInfo.uid];
// [context.hostDelegate openRoomDating:roomUid];
} cancelHandler:^{
}];
}
- (void)executeDatingClose:(XPRoomMoreMenuActionContext *)context {
NSLog(@"执行关闭相亲模式");
// 显示确认框
TTAlertConfig *config = [[TTAlertConfig alloc] init];
config.title = YMLocalizedString(@"XPRoomMoreMenuViewController10");
config.message = YMLocalizedString(@"XPRoomMoreMenuViewController11");
config.confirmButtonConfig.title = YMLocalizedString(@"XPRoomMoreMenuViewController12");
[TTPopup alertWithConfig:config confirmHandler:^{
NSString *roomUid = [NSString stringWithFormat:@"%ld", context.roomInfo.uid];
// [context.hostDelegate closeRoomDating:roomUid];
} cancelHandler:^{
}];
}
#pragma mark - 辅助方法
- (void)showErrorToast:(NSString *)message context:(XPRoomMoreMenuActionContext *)context {
if (context.presentingViewController && [context.presentingViewController respondsToSelector:@selector(showErrorToast:)]) {
BaseViewController *viewController = (BaseViewController *)context.presentingViewController;
[viewController showErrorToast:message];
}
}
- (void)dismissViewController:(XPRoomMoreMenuActionContext *)context {
if (context.presentingViewController && [context.presentingViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
BaseViewController *viewController = (BaseViewController *)context.presentingViewController;
[viewController dismissViewControllerAnimated:NO completion:nil];
}
}
@end