#include "DDZ_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);\ } DDZPrivateEndNode::DDZPrivateEndNode() { m_ImageViewBg = nullptr; // 根节点 m_btnleave = nullptr; // 用户离开 m_btnShow = nullptr; // 分享 zeromemory(m_pPlayNode, sizeof(m_pPlayNode)); // 玩家结束信息 } DDZPrivateEndNode::~DDZPrivateEndNode() { for (int i = 0; i < DDZ_GAME_PLAYER; i++) { if (nullptr == m_pPlayNode[i]) continue; // 积分列表 auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView"); ASSERT(listScore); if (listScore) { listScore->removeAllItems(); } } } bool DDZPrivateEndNode::init() { if (!Node::init()) { return false; } auto rootNode = static_cast(CSLoader::createNodeWithVisibleSize("Games/DDZ/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); }); // 内容 for (WORD i = 0; i < DDZ_GAME_PLAYER; i++) { m_pPlayNode[i] = (Layout*)m_ImageViewBg->getChildByName(StringUtils::format("FileNode_%d", i)); ASSERT(m_pPlayNode[i]); } return true; } void DDZPrivateEndNode::SetRoomID(std::string strRoomID) { if (m_txtRoomID != nullptr) { m_txtRoomID->setString(strRoomID); } } std::string DDZPrivateEndNode::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 DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER]) void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_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; for (int i = 0; i < DDZ_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 < DDZ_GAME_PLAYER; j++) { if ((lMaxScore > 0) && (pNetInfo->lAllScore[j] == lMaxScore)) { iMaxScoreCount++; } } if (iMaxScoreCount > 0) { // 计算玩家积分; lRevenue = floor(lGameGold / iMaxScoreCount); } } //SCORE lMaxScore = 0; for (int i = 0; i < DDZ_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; if (nullptr == m_pPlayNode[i]) continue; // 头像; Sprite* pHead = (Sprite*)m_pPlayNode[i]->getChildByName("Head"); if (pHead) { ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID()); } SETCTRLTEXT(m_pPlayNode[i], "txtUserName", pPlayer->GetNickName()); // 名称; SETCTRLTEXT(m_pPlayNode[i], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID; SETCTRLTEXT(m_pPlayNode[i], "txtAllScore", utility::ScoreToString(pNetInfo->lAllScore[i])); // 总积分; Sprite* pCreate = (Sprite*)m_pPlayNode[i]->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[i]->getChildByName("win"); if (winicon) winicon->setVisible(bMaxWinUser); // 欢乐积分; if (bUnionScore) { SCORE lUnionScore = pNetInfo->lAllScore[i] * lScoreMultiple; if (bMaxWinUser) { if (lUnionScore > lRevenue) { lUnionScore -= lRevenue; } else { lUnionScore = 0; } } SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", utility::ScoreToString(lUnionScore)); // 总积分; } else { SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", ""); // 总积分; } // 积分列表; auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView"); ASSERT(listScore); if (listScore) { // 积分节点; auto ListItem = (Layout*)m_pPlayNode[i]->getChildByName("Item"); ASSERT(ListItem); for (int j = 0; j < pNetInfo->cbFinishCout; j++) { auto tmp = (Layout*)ListItem->clone(); if (tmp == nullptr)continue; auto txtTitle = (Text*)tmp->getChildByName("txtTitle"); if (txtTitle) { std::string strTitle = StringUtils::format("第%d局", j + 1); txtTitle->setString(utility::a_u8(strTitle)); } auto txtScore = (Text*)tmp->getChildByName("txtScore"); if (txtScore) { std::string strScore = utility::ScoreToString(pNetInfo->lDetails[i][j]); txtScore->setString(strScore); } listScore->pushBackCustomItem(tmp); } ListItem->setVisible(false); } } //// 大赢家; //if (lMaxScore > 0) //{ // for (int i = 0; i < DDZ_GAME_PLAYER; i++) // { // if (lMaxScore==pNetInfo->lAllScore[i]) // { // auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win"); // if (winicon) // { // winicon->setVisible(true); // } // } // } //} this->setVisible(false); } void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER], uint8 cbBaseScore) { if (pNetInfo == nullptr) return; // 当前时间; if (m_txtTime != nullptr) { std::string strSystemTime = JniFun::getDataTime(); m_txtTime->setString(strSystemTime); } // 寻找大赢家; SCORE lMaxScore = 0; for (int i = 0; i < DDZ_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; // 找到大赢家; if (lMaxScore < pNetInfo->lAllScore[i]) { lMaxScore = pNetInfo->lAllScore[i]; } } //SCORE lMaxScore = 0; for (int i = 0; i < DDZ_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; if (nullptr == m_pPlayNode[i]) continue; // 头像; Sprite* pHead = (Sprite*)m_pPlayNode[i]->getChildByName("Head"); if (pHead) { ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID()); } SETCTRLTEXT(m_pPlayNode[i], "txtUserName", pPlayer->GetNickName()); // 名称; SETCTRLTEXT(m_pPlayNode[i], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID; SETCTRLTEXT(m_pPlayNode[i], "txtAllScore", utility::ScoreToString(pNetInfo->lAllScore[i])); // 总积分; SETCTRLTEXT(m_pPlayNode[i], "txtAllUnionScore", ""); // 总积分; Sprite* pCreate = (Sprite*)m_pPlayNode[i]->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[i]->getChildByName("win"); if (winicon) winicon->setVisible(bMaxWinUser); // 总积分; SCORE lUnionScore = pNetInfo->lAllScore[i] * cbBaseScore; SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", utility::ScoreToString(lUnionScore)); // 积分列表; auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView"); ASSERT(listScore); if (listScore) { // 积分节点; auto ListItem = (Layout*)m_pPlayNode[i]->getChildByName("Item"); ASSERT(ListItem); for (int j = 0; j < pNetInfo->cbFinishCout; j++) { auto tmp = (Layout*)ListItem->clone(); if (tmp == nullptr)continue; auto txtTitle = (Text*)tmp->getChildByName("txtTitle"); if (txtTitle) { std::string strTitle = StringUtils::format("第%d局", j + 1); txtTitle->setString(utility::a_u8(strTitle)); } auto txtScore = (Text*)tmp->getChildByName("txtScore"); if (txtScore) { std::string strScore = utility::ScoreToString(pNetInfo->lDetails[i][j]); txtScore->setString(strScore); } listScore->pushBackCustomItem(tmp); } ListItem->setVisible(false); } } //// 大赢家; //if (lMaxScore > 0) //{ // for (int i = 0; i < DDZ_GAME_PLAYER; i++) // { // if (lMaxScore==pNetInfo->lAllScore[i]) // { // auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win"); // if (winicon) // { // winicon->setVisible(true); // } // } // } //} this->setVisible(false); } void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER], CMD_GF_Private_Room_Info& RoomInfo, CMD_GF_Private_Score_Info& ScoreInfo) { if (pNetInfo == nullptr) return; bool bUnionScore = (RoomInfo.cbUnionGoldOpen == 1); 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; for (int i = 0; i < DDZ_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 < DDZ_GAME_PLAYER; j++) { if ((lMaxScore > 0) && (pNetInfo->lAllScore[j] == lMaxScore)) { iMaxScoreCount++; } } if (iMaxScoreCount > 0) { // 计算玩家积分; lRevenue = floor(lGameGold / iMaxScoreCount); } } //SCORE lMaxScore = 0; for (int i = 0; i < DDZ_GAME_PLAYER; i++) { GamePlayer* pPlayer = players[i]; if (nullptr == pPlayer) continue; if (nullptr == m_pPlayNode[i]) continue; // 头像; Sprite* pHead = (Sprite*)m_pPlayNode[i]->getChildByName("Head"); if (pHead) { ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID()); } SETCTRLTEXT(m_pPlayNode[i], "txtUserName", pPlayer->GetNickName()); // 名称; SETCTRLTEXT(m_pPlayNode[i], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID; SETCTRLTEXT(m_pPlayNode[i], "txtAllScore", utility::ScoreToString(pNetInfo->lAllScore[i])); // 总积分; Sprite* pCreate = (Sprite*)m_pPlayNode[i]->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[i]->getChildByName("win"); if (winicon) winicon->setVisible(bMaxWinUser); // 欢乐积分; if (bUnionScore) { SCORE lUnionScore = pNetInfo->lAllScore[i] * cbBaseScore; if (bMaxWinUser) { if (lUnionScore > lRevenue) { lUnionScore -= lRevenue; } else { lUnionScore = 0; } } SCORE lAllUnionScore = ScoreInfo.kScoreInfoArray[i] + lUnionScore; SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", utility::ScoreToString(lUnionScore)); // 总积分; SETCTRLTEXT(m_pPlayNode[i], "txtAllUnionScore", StringUtils::format("%d", lAllUnionScore)); // 总积分; } else { SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", ""); // 总积分; SETCTRLTEXT(m_pPlayNode[i], "txtAllUnionScore", ""); // 总积分; } // 积分列表; auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView"); ASSERT(listScore); if (listScore) { // 积分节点; auto ListItem = (Layout*)m_pPlayNode[i]->getChildByName("Item"); ASSERT(ListItem); for (int j = 0; j < pNetInfo->cbFinishCout; j++) { auto tmp = (Layout*)ListItem->clone(); if (tmp == nullptr)continue; auto txtTitle = (Text*)tmp->getChildByName("txtTitle"); if (txtTitle) { std::string strTitle = StringUtils::format("第%d局", j + 1); txtTitle->setString(utility::a_u8(strTitle)); } auto txtScore = (Text*)tmp->getChildByName("txtScore"); if (txtScore) { std::string strScore = utility::ScoreToString(pNetInfo->lDetails[i][j]); txtScore->setString(strScore); } listScore->pushBackCustomItem(tmp); } ListItem->setVisible(false); } } this->setVisible(false); } void DDZPrivateEndNode::pushScene() { this->setVisible(true); } void DDZPrivateEndNode::popScene() { this->removeFromParent(); }