#include "DZ_GameEndNode.h" #include "Define.h" #include "DZ_CMD.h" #include "ActionEx.h" #include "DZ_SmallCardSprite.h" DZGameEndNode::DZGameEndNode() { //init(); } DZGameEndNode::~DZGameEndNode() { } bool DZGameEndNode::init() { if (!Node::init()) { return false; }; auto root = CSLoader::createNodeWithVisibleSize("Games/DaZha/ResultLayer.csb"); CC_ASSERT(root != nullptr); this->addChild(root); m_rootPanel = static_cast(root->getChildByName("imgResult")); CC_ASSERT(m_rootPanel != nullptr); //查看结算信息; m_btnPrivate = static_cast(m_rootPanel->getChildByName("btnPrivate")); CC_ASSERT(m_btnPrivate != nullptr); ASSERT(m_btnPrivate); m_btnPrivate->setVisible(false); m_btnPrivate->addClickEventListener([=](Ref *pSender){ Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(SHOW_PRIVATE_END); this->hide(); }); //继续按钮; m_btnContinue = static_cast(m_rootPanel->getChildByName("btnContinue")); CC_ASSERT(m_btnContinue != nullptr); m_btnContinue->addClickEventListener(CC_CALLBACK_1(DZGameEndNode::onButtonContinueClick, this)); //分享按钮; m_btnShare = static_cast(m_rootPanel->getChildByName("btnShare")); CC_ASSERT(m_btnShare != nullptr); m_btnShare->addClickEventListener([=](Ref *pSender){ Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(WEIXIN_SHOW); }); //胜利背景; m_sprTitleWin = static_cast(m_rootPanel->getChildByName("sprTitleWin")); CC_ASSERT(m_sprTitleWin != nullptr); ////胜利标志; //m_sprWin = static_cast(m_rootPanel->getChildByName("sprWin")); //CC_ASSERT(m_sprWin != nullptr); return true; } //显示; void DZGameEndNode::show(uint16 wLandChairID, bool bNobodyCall, uint16 wSelfChairID, uint16 wFriendChairID, std::string aryNickName[], DZ_CMD_S_GameConclude* pGameConclude, uint16 wTime) { //获取文本; for (int i = 0; i < DZ_GAME_PLAYER; i++) { //获取玩家面板; auto panelPlayer = static_cast(m_rootPanel->getChildByName(StringUtils::format("panelPlayer_%d", i))); CC_ASSERT(panelPlayer != nullptr); auto imgRank = static_cast(panelPlayer->getChildByName("imgRank")); CC_ASSERT(imgRank != nullptr); imgRank->setVisible(false); auto txtNickName = static_cast(panelPlayer->getChildByName("txtNickName")); CC_ASSERT(txtNickName != nullptr); txtNickName->setString(aryNickName[i]); // 地主; auto splandlord = static_cast(panelPlayer->getChildByName("landlord")); CC_ASSERT(splandlord != nullptr); if (bNobodyCall) { // 自己伙伴; if (wFriendChairID == i) { splandlord->setScale(1.5f); splandlord->setTexture(DZ_FARMER_FLAG_PNG_FILE); splandlord->setVisible(true); } else { splandlord->setVisible(false); } } else { if (i == wLandChairID) { splandlord->setScale(1.0f); splandlord->setTexture(DZ_LANDLORD_FLAG_PNG_FILE); splandlord->setVisible(true); } else { splandlord->setVisible(false); } } // 炸弹积分; auto txtBombScore = static_cast(panelPlayer->getChildByName("txtBombScore")); CC_ASSERT(txtBombScore != nullptr); if (pGameConclude->lBombScore[i] > 0) { txtBombScore->setFntFile(DZ_WIN_NUMBER_FNT_FILE); txtBombScore->setString(StringUtils::format("+%d", pGameConclude->lBombScore[i])); } else { txtBombScore->setFntFile(DZ_LOSE_NUMBER_FNT_FILE); txtBombScore->setString(StringUtils::format("%d", pGameConclude->lBombScore[i])); } // 游戏积分; auto txtGameScore = static_cast(panelPlayer->getChildByName("txtGameScore")); CC_ASSERT(txtGameScore != nullptr); if (pGameConclude->lGameScore[i] > 0) { txtGameScore->setFntFile(DZ_WIN_NUMBER_FNT_FILE); txtGameScore->setString(StringUtils::format("+%d", pGameConclude->lGameScore[i])); } else { txtGameScore->setFntFile(DZ_LOSE_NUMBER_FNT_FILE); txtGameScore->setString(StringUtils::format("%d", pGameConclude->lGameScore[i])); } // 总积分; auto txtAllScore = static_cast(panelPlayer->getChildByName("txtAllScore")); CC_ASSERT(txtAllScore != nullptr); if (pGameConclude->lAllScore[i] > 0) { txtAllScore->setFntFile(DZ_WIN_NUMBER_FNT_FILE); txtAllScore->setString(StringUtils::format("+%d", pGameConclude->lAllScore[i])); } else { txtAllScore->setFntFile(DZ_LOSE_NUMBER_FNT_FILE); txtAllScore->setString(StringUtils::format("%d", pGameConclude->lAllScore[i])); } auto panelLeftCard = static_cast(panelPlayer->getChildByName("panelLeftCard")); CC_ASSERT(panelLeftCard != nullptr); panelLeftCard->removeAllChildren(); if (pGameConclude->cbCardCount[i] > 0) { showLeftCard(panelLeftCard, pGameConclude->cbCardData[i], pGameConclude->cbCardCount[i]); } } // 名次; for (int i = 0; i < DZ_GAME_PLAYER; i++) { uint16 wRanker = pGameConclude->wWinOrder[i]; if (wRanker == INVALID_CHAIR) continue; auto panelPlayer = static_cast(m_rootPanel->getChildByName(StringUtils::format("panelPlayer_%d", wRanker))); CC_ASSERT(panelPlayer != nullptr); auto imgRank = static_cast(panelPlayer->getChildByName("imgRank")); CC_ASSERT(imgRank != nullptr); std::string strRankres = StringUtils::format("Games/DaZha/Table/imgRanking%d.png", i + 1); // 显示一二名; if (pGameConclude->iGameEndType == DZ_GAME_END_TWO_WIN && i < 2) { imgRank->loadTexture(strRankres); imgRank->setVisible(true); } // 全显示; else if (pGameConclude->iGameEndType == DZ_GAME_END_ONE_WIN) { imgRank->loadTexture(strRankres); imgRank->setVisible(true); } // 全不显示; else { imgRank->setVisible(false); } } //如果自已赢了; CC_ASSERT(wSelfChairID <= DZ_GAME_PLAYER); if (pGameConclude->iGameEndType != DZ_GAME_END_NULL) { std::string strGameEndType = ""; switch (pGameConclude->iGameEndType) { case DZ_GAME_END_NULL: break; case DZ_GAME_END_ONE_WIN: strGameEndType = "Games/DaZha/Result/endrtitle1.png"; break; case DZ_GAME_END_TWO_WIN: strGameEndType = "Games/DaZha/Result/endrtitle2.png"; break; case DZ_GAME_END_DRAW: case DZ_GAME_END_8_BOMB: case DZ_GAME_END_NO_BOMB: strGameEndType = "Games/DaZha/Result/endrtitle3.png"; break; default: break; } //StringUtils::format("Games/DaZha/Result/endrtitle%d.png", pGameConclude->iGameEndType); m_sprTitleWin->setTexture(strGameEndType); } //this->setVisible(true); } void DZGameEndNode::hide() { this->setVisible(false); } //继续按钮点击事件; void DZGameEndNode::onButtonContinueClick(Ref*) { auto dispatcher = Director::getInstance()->getEventDispatcher(); EventCustom event(CONTINUE_GAME); //派发拒绝解散房间事件至DDZGameScene dispatcher->dispatchEvent(&event); hide(); } void DZGameEndNode::onButtonShareClick(Ref*) { Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(WEIXIN_SHOW); } void DZGameEndNode::SetShowPrivate() { m_btnContinue->setVisible(false); m_btnPrivate->setVisible(true); } //显示剩余扑克; void DZGameEndNode::showLeftCard(Layout* pRootPanel, uint8 aryCardData[], uint8 cbCardCount) { CC_ASSERT(pRootPanel != nullptr); // 结束牌多行显示; uint16 nwidth = pRootPanel->getContentSize().width; uint16 nheight = pRootPanel->getContentSize().height; //创建扑克牌; for (uint8 i = 0; i < cbCardCount; i++) { DZSmallCardSprite* pCard = DZSmallCardSprite::create(aryCardData[i]); CC_ASSERT(pCard != nullptr); if (pCard) { pCard->setPositionX(i * 15); pRootPanel->addChild(pCard); } } }