#include "NN_PrivateEndNode.h" #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h" #include "GameDefine.h" #include "ImagicDownManager.h" #include "JniFun.h" USING_NS_CC; using namespace ui; using namespace std; #define SETCTRLTEXT(pNode, ctrl, str) \ { \ Text* pText = (Text*)pNode->getChildByName(ctrl);\ if (pText) pText->setString(str);\ } NNPrivateEndNode::NNPrivateEndNode() { m_ImageViewBg = nullptr; // 根节点 m_btnleave = nullptr; // 用户离开 m_btnShow = nullptr; // 分享 zeromemory(m_pPlayNode, sizeof(m_pPlayNode)); // 玩家结束信息 } NNPrivateEndNode::~NNPrivateEndNode() { } bool NNPrivateEndNode::init() { if (!Node::init()) { return false; } auto rootNode = static_cast(CSLoader::createNodeWithVisibleSize("Games/NiuNiu/PrivateEndScene.csb")); ASSERT(rootNode != nullptr); this->addChild(rootNode); m_ImageViewBg = (ImageView*)rootNode->getChildByName("ImageBg"); ASSERT(m_ImageViewBg != nullptr); m_txtRoomID = (Text*)m_ImageViewBg->getChildByName("txtRoomID"); ASSERT(m_txtRoomID != nullptr); m_txtRoomID->setString(""); m_txtTime = (Text*)m_ImageViewBg->getChildByName("txtTime"); ASSERT(m_txtTime != nullptr); m_txtTime->setString(""); // 离开按钮 m_btnleave = (Button*)m_ImageViewBg->getChildByName("btnClose"); ASSERT(m_btnleave); m_btnleave->addClickEventListener([=](Ref *pSender){ Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(LEAVE_GAME); }); // 分享 m_btnShow = (Button*)m_ImageViewBg->getChildByName("btnShow"); ASSERT(m_btnShow); m_btnShow->addClickEventListener([=](Ref *pSender){ Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(WEIXIN_SHOW); }); m_PanelList = (Layout*)m_ImageViewBg->getChildByName("PanelList"); ASSERT(m_PanelList != nullptr); //m_ListItem = (Layout*)m_PanelList->getChildByName("Item"); //ASSERT(m_ListItem != nullptr); //m_ListItem->setVisible(false); // 内容 for (WORD i = 0; i < NN_GAME_PLAYER; i++) { m_pPlayNode[i] = (Node*)m_PanelList->getChildByName(StringUtils::format("UserItem_%d", i)); ASSERT(m_pPlayNode[i]); m_pPlayNode[i]->setVisible(false); } return true; } void NNPrivateEndNode::SetRoomID(std::string strRoomID) { if (m_txtRoomID != nullptr) { m_txtRoomID->setString(strRoomID); } } std::string NNPrivateEndNode::getcurrTime() { struct tm* tm; time_t timep; time(&timep); tm = localtime(&timep); return StringUtils::format("%02d-%02d-%02d %02d:%02d", 1900+tm->tm_year, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min); } void NNPrivateEndNode::ShowGameResult(NN_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[NN_GAME_PLAYER], bool bUnionScore, SCORE lGameGold, SCORE lScoreMultiple) { if (pNetInfo == nullptr) return; // 当前时间; if (m_txtTime != nullptr) { std::string strSystemTime = JniFun::getDataTime(); m_txtTime->setString(strSystemTime); } //SCORE lMaxScore = 0; int iWinPlayer = 0; int iUserCount = 0; // 寻找大赢家; SCORE lMaxScore = 0; for (int i = 0; i < NN_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; // 找到大赢家; if (lMaxScore < pNetInfo->lAllScore[i]) { lMaxScore = pNetInfo->lAllScore[i]; } } // 欢乐场计算税收; SCORE lRevenue = 0; if (bUnionScore) { // 统计大赢家数量; int iMaxScoreCount = 0; for (int j = 0; j < NN_GAME_PLAYER; j++) { if ((lMaxScore > 0) && (pNetInfo->lAllScore[j] == lMaxScore)) { iMaxScoreCount++; } } if (iMaxScoreCount > 0) { // 计算玩家积分; lRevenue = floor(lGameGold / iMaxScoreCount); } } for (int i = 0; i < NN_GAME_PLAYER; i++) { // 设置积分; if (pNetInfo->aryActiveStatus[i]) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; if (nullptr == m_pPlayNode[iUserCount]) continue; // 头像 Sprite* pHead = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("Head"); if (pHead) { ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID()); } SETCTRLTEXT(m_pPlayNode[iUserCount], "txtUserName", pPlayer->GetNickName()); // 名称 SETCTRLTEXT(m_pPlayNode[iUserCount], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllWin", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_ALL_WIN])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllLose", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_ALL_LOSE])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllNN", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_NIUNIU])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtWin", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_WIN])); auto txtAllScore = (TextAtlas*)m_pPlayNode[iUserCount]->getChildByName("txtAllScore"); // 总积分 SCORE lGameScore = pNetInfo->lAllScore[i]; if (lGameScore >= 0) { txtAllScore->setProperty(StringUtils::format(".%d", lGameScore), "Games/NiuNiu/Table/num_win.png", 38, 55, "."); } else { txtAllScore->setProperty(StringUtils::format("/%d", std::abs(lGameScore)), "Games/NiuNiu/Table/num_loss.png", 38, 55, "."); } Sprite* pCreate = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("create"); if (pCreate) pCreate->setVisible(0 == i); // 是不是大赢家; bool bMaxWinUser = false; if ((lMaxScore > 0) && (lMaxScore == pNetInfo->lAllScore[i])) { bMaxWinUser = true; } // 大赢家; auto winicon = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("win"); if (winicon) winicon->setVisible(bMaxWinUser); // 欢乐积分; auto txtUnionScore = (TextAtlas*)m_pPlayNode[iUserCount]->getChildByName("txtUnionScore"); // 总积分 ASSERT(txtUnionScore != nullptr); if (bUnionScore) { SCORE lUnionScore = pNetInfo->lAllScore[i] * lScoreMultiple; if (bMaxWinUser) { if (lUnionScore > lRevenue) { lUnionScore -= lRevenue; } else { lUnionScore = 0; } } if (lUnionScore >= 0) { txtUnionScore->setProperty(StringUtils::format(".%d", lUnionScore), "Games/NiuNiu/Table/num_win.png", 38, 55, "."); } else { txtUnionScore->setProperty(StringUtils::format("/%d", std::abs(lUnionScore)), "Games/NiuNiu/Table/num_loss.png", 38, 55, "."); } } else { txtUnionScore->setVisible(false); } m_pPlayNode[iUserCount]->setVisible(true); iUserCount++; } } //// 大赢家 //if (lMaxScore > 0) //{ // auto winicon = (Sprite*)m_pPlayNode[iWinPlayer]->getChildByName("win"); // if (winicon) winicon->setVisible(true); //} // 调玩家位置; if (iUserCount > 0) { // 容器宽度; float fPlanelWidth = m_PanelList->getContentSize().width; // 节点宽度; float fItemWidth = m_pPlayNode[0]->getContentSize().width; // 间隔宽度 = (容器宽度 - 节点宽度*节点个数)/(节点个数+1); float fIntervalWidth = (fPlanelWidth - fItemWidth*iUserCount) / (iUserCount + 1); // 重置位置; for (int i = 0; i < iUserCount; i++) { if ((m_pPlayNode[i] != nullptr) && m_pPlayNode[i]->isVisible()) { m_pPlayNode[i]->setPositionX(fIntervalWidth + (fItemWidth + fIntervalWidth)*i); } } } this->setVisible(false); } void NNPrivateEndNode::ShowGameResult(NN_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[NN_GAME_PLAYER], CMD_GF_Private_Room_Info& RoomInfo, CMD_GF_Private_Score_Info& ScoreInfo) { if (pNetInfo == nullptr) return; bool bUnionScore = (RoomInfo.cbUnionGoldOpen == 1); //SCORE lScoreMultiple = RoomInfo.lScoreMultiple; uint8 cbBaseScore = RoomInfo.cbBaseScore; SCORE lGameGold = RoomInfo.lGameGold * RoomInfo.dwPlayCost; // 当前时间; if (m_txtTime != nullptr) { std::string strSystemTime = JniFun::getDataTime(); m_txtTime->setString(strSystemTime); } //SCORE lMaxScore = 0; int iWinPlayer = 0; int iUserCount = 0; // 寻找大赢家; SCORE lMaxScore = 0; for (int i = 0; i < NN_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; // 找到大赢家; if (lMaxScore < pNetInfo->lAllScore[i]) { lMaxScore = pNetInfo->lAllScore[i]; } } // 欢乐场计算税收; SCORE lRevenue = 0; if (bUnionScore) { // 统计大赢家数量; int iMaxScoreCount = 0; for (int j = 0; j < NN_GAME_PLAYER; j++) { if ((lMaxScore > 0) && (pNetInfo->lAllScore[j] == lMaxScore)) { iMaxScoreCount++; } } if (iMaxScoreCount > 0) { // 计算玩家积分; lRevenue = floor(lGameGold / iMaxScoreCount); } } for (int i = 0; i < NN_GAME_PLAYER; i++) { // 设置积分; if (pNetInfo->aryActiveStatus[i]) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; if (nullptr == m_pPlayNode[iUserCount]) continue; // 头像 Sprite* pHead = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("Head"); if (pHead) { ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID()); } SETCTRLTEXT(m_pPlayNode[iUserCount], "txtUserName", pPlayer->GetNickName()); // 名称 SETCTRLTEXT(m_pPlayNode[iUserCount], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllWin", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_ALL_WIN])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllLose", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_ALL_LOSE])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllNN", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_NIUNIU])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtWin", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_WIN])); auto txtAllScore = (TextAtlas*)m_pPlayNode[iUserCount]->getChildByName("txtAllScore"); // 总积分 SCORE lGameScore = pNetInfo->lAllScore[i] * cbBaseScore; if (lGameScore >= 0) { txtAllScore->setProperty(StringUtils::format(".%d", lGameScore), "Games/NiuNiu/Table/num_win.png", 38, 55, "."); } else { txtAllScore->setProperty(StringUtils::format("/%d", std::abs(lGameScore)), "Games/NiuNiu/Table/num_loss.png", 38, 55, "."); } Sprite* pCreate = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("create"); if (pCreate) pCreate->setVisible(0 == i); // 是不是大赢家; bool bMaxWinUser = false; if ((lMaxScore > 0) && (lMaxScore == pNetInfo->lAllScore[i])) { bMaxWinUser = true; } // 大赢家; auto winicon = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("win"); if (winicon) winicon->setVisible(bMaxWinUser); // 欢乐积分; auto txtUnionScore = (TextAtlas*)m_pPlayNode[iUserCount]->getChildByName("txtUnionScore"); // 总积分 ASSERT(txtUnionScore != nullptr); auto txtAllUnionScore = (Text*)m_pPlayNode[iUserCount]->getChildByName("txtAllUnionScore"); // 总积分 ASSERT(txtAllUnionScore != nullptr); if (bUnionScore) { SCORE lUnionScore = pNetInfo->lAllScore[i] * cbBaseScore; if (bMaxWinUser) { if (lUnionScore > lRevenue) { lUnionScore -= lRevenue; } else { lUnionScore = 0; } } // 总欢乐积分 SCORE lAllUnionScore = ScoreInfo.kScoreInfoArray[i] + lUnionScore; if (lUnionScore >= 0) { txtUnionScore->setProperty(StringUtils::format(".%d", lUnionScore), "Games/NiuNiu/Table/num_win.png", 38, 55, "."); } else { txtUnionScore->setProperty(StringUtils::format("/%d", std::abs(lUnionScore)), "Games/NiuNiu/Table/num_loss.png", 38, 55, "."); } txtAllUnionScore->setString(StringUtils::format("%d", lAllUnionScore)); } else { txtUnionScore->setVisible(false); txtAllUnionScore->setVisible(false); } m_pPlayNode[iUserCount]->setVisible(true); iUserCount++; } } //// 大赢家 //if (lMaxScore > 0) //{ // auto winicon = (Sprite*)m_pPlayNode[iWinPlayer]->getChildByName("win"); // if (winicon) winicon->setVisible(true); //} // 调玩家位置; if (iUserCount > 0) { // 容器宽度; float fPlanelWidth = m_PanelList->getContentSize().width; // 节点宽度; float fItemWidth = m_pPlayNode[0]->getContentSize().width; // 间隔宽度 = (容器宽度 - 节点宽度*节点个数)/(节点个数+1); float fIntervalWidth = (fPlanelWidth - fItemWidth*iUserCount) / (iUserCount + 1); // 重置位置; for (int i = 0; i < iUserCount; i++) { if ((m_pPlayNode[i] != nullptr) && m_pPlayNode[i]->isVisible()) { m_pPlayNode[i]->setPositionX(fIntervalWidth + (fItemWidth + fIntervalWidth)*i); } } } this->setVisible(false); } void NNPrivateEndNode::ShowGameResult(NN_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[NN_GAME_PLAYER], uint8 cbBaseScore) { if (pNetInfo == nullptr) return; // 当前时间; if (m_txtTime != nullptr) { std::string strSystemTime = JniFun::getDataTime(); m_txtTime->setString(strSystemTime); } //SCORE lMaxScore = 0; int iWinPlayer = 0; int iUserCount = 0; // 寻找大赢家; SCORE lMaxScore = 0; for (int i = 0; i < NN_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; // 找到大赢家; if (lMaxScore < pNetInfo->lAllScore[i]) { lMaxScore = pNetInfo->lAllScore[i]; } } for (int i = 0; i < NN_GAME_PLAYER; i++) { // 设置积分; if (pNetInfo->aryActiveStatus[i]) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; if (nullptr == m_pPlayNode[iUserCount]) continue; // 头像 Sprite* pHead = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("Head"); if (pHead) { ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID()); } SETCTRLTEXT(m_pPlayNode[iUserCount], "txtUserName", pPlayer->GetNickName()); // 名称 SETCTRLTEXT(m_pPlayNode[iUserCount], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllWin", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_ALL_WIN])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllLose", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_ALL_LOSE])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllNN", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_NIUNIU])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtWin", StringUtils::format("%d", pNetInfo->aryResultTypeCount[i][NN_RT_WIN])); SETCTRLTEXT(m_pPlayNode[iUserCount], "txtAllUnionScore", ""); auto txtAllScore = (TextAtlas*)m_pPlayNode[iUserCount]->getChildByName("txtAllScore"); // 总积分 SCORE lGameScore = pNetInfo->lAllScore[i]; if (lGameScore >= 0) { txtAllScore->setProperty(StringUtils::format(".%d", lGameScore), "Games/NiuNiu/Table/num_win.png", 38, 55, "."); } else { txtAllScore->setProperty(StringUtils::format("/%d", std::abs(lGameScore)), "Games/NiuNiu/Table/num_loss.png", 38, 55, "."); } Sprite* pCreate = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("create"); if (pCreate) pCreate->setVisible(0 == i); // 是不是大赢家; bool bMaxWinUser = false; if ((lMaxScore > 0) && (lMaxScore == pNetInfo->lAllScore[i])) { bMaxWinUser = true; } // 大赢家; auto winicon = (Sprite*)m_pPlayNode[iUserCount]->getChildByName("win"); if (winicon) winicon->setVisible(bMaxWinUser); // 欢乐积分; auto txtUnionScore = (TextAtlas*)m_pPlayNode[iUserCount]->getChildByName("txtUnionScore"); // 总积分 ASSERT(txtUnionScore != nullptr); // 总积分; SCORE lUnionScore = pNetInfo->lAllScore[i] * cbBaseScore; if (lUnionScore >= 0) { txtUnionScore->setProperty(StringUtils::format(".%d", lUnionScore), "Games/NiuNiu/Table/num_win.png", 38, 55, "."); } else { txtUnionScore->setProperty(StringUtils::format("/%d", std::abs(lUnionScore)), "Games/NiuNiu/Table/num_loss.png", 38, 55, "."); } m_pPlayNode[iUserCount]->setVisible(true); iUserCount++; } } // 调玩家位置; if (iUserCount > 0) { // 容器宽度; float fPlanelWidth = m_PanelList->getContentSize().width; // 节点宽度; float fItemWidth = m_pPlayNode[0]->getContentSize().width; // 间隔宽度 = (容器宽度 - 节点宽度*节点个数)/(节点个数+1); float fIntervalWidth = (fPlanelWidth - fItemWidth*iUserCount) / (iUserCount + 1); // 重置位置; for (int i = 0; i < iUserCount; i++) { if ((m_pPlayNode[i] != nullptr) && m_pPlayNode[i]->isVisible()) { m_pPlayNode[i]->setPositionX(fIntervalWidth + (fItemWidth + fIntervalWidth)*i); } } } this->setVisible(false); } void NNPrivateEndNode::pushScene() { this->setVisible(true); } void NNPrivateEndNode::popScene() { this->removeFromParent(); }