279 lines
7.3 KiB
C++
279 lines
7.3 KiB
C++
#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<ImageView*>(root->getChildByName("imgResult"));
|
|
CC_ASSERT(m_rootPanel != nullptr);
|
|
|
|
//查看结算信息;
|
|
m_btnPrivate = static_cast<Button*>(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<Button*>(m_rootPanel->getChildByName("btnContinue"));
|
|
CC_ASSERT(m_btnContinue != nullptr);
|
|
m_btnContinue->addClickEventListener(CC_CALLBACK_1(DZGameEndNode::onButtonContinueClick, this));
|
|
|
|
//分享按钮;
|
|
m_btnShare = static_cast<Button*>(m_rootPanel->getChildByName("btnShare"));
|
|
CC_ASSERT(m_btnShare != nullptr);
|
|
m_btnShare->addClickEventListener([=](Ref *pSender){
|
|
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(WEIXIN_SHOW);
|
|
});
|
|
|
|
//胜利背景;
|
|
m_sprTitleWin = static_cast<Sprite*>(m_rootPanel->getChildByName("sprTitleWin"));
|
|
CC_ASSERT(m_sprTitleWin != nullptr);
|
|
|
|
////胜利标志;
|
|
//m_sprWin = static_cast<Sprite*>(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<Layout*>(m_rootPanel->getChildByName(StringUtils::format("panelPlayer_%d", i)));
|
|
CC_ASSERT(panelPlayer != nullptr);
|
|
|
|
auto imgRank = static_cast<ImageView*>(panelPlayer->getChildByName("imgRank"));
|
|
CC_ASSERT(imgRank != nullptr);
|
|
imgRank->setVisible(false);
|
|
|
|
auto txtNickName = static_cast<Text*>(panelPlayer->getChildByName("txtNickName"));
|
|
CC_ASSERT(txtNickName != nullptr);
|
|
txtNickName->setString(aryNickName[i]);
|
|
|
|
// 地主;
|
|
auto splandlord = static_cast<Sprite*>(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<TextBMFont*>(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<TextBMFont*>(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<TextBMFont*>(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<Layout*>(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<Layout*>(m_rootPanel->getChildByName(StringUtils::format("panelPlayer_%d", wRanker)));
|
|
CC_ASSERT(panelPlayer != nullptr);
|
|
|
|
auto imgRank = static_cast<ImageView*>(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);
|
|
}
|
|
}
|
|
} |