#include "WN_GetCardCtrl.h" #include "cocos2d.h" #include "ui/CocosGUI.h" #include "cocostudio/CocoStudio.h" #include "WN_SparrowCard.h" using namespace WNMJ_SPACE; /////////////////////////////// 听牌 /////////////////////////////////////////// GetCardCtrl::GetCardCtrl() { } GetCardCtrl::~GetCardCtrl() { ResetAll(); } bool GetCardCtrl::init() { if (!Node::init()) { return false; } m_pRootNode = static_cast(CSLoader::createNode("Games/WNMJ/GetCardLayer.csb")); this->addChild(m_pRootNode); auto imagebg = (ImageView*)m_pRootNode->getChildByName("Image_bg"); ASSERT(imagebg != nullptr); m_pLeftCardList = (Layout*)imagebg->getChildByName("AllCard"); ASSERT(m_pLeftCardList != nullptr); m_pCheakCard = (Layout*)imagebg->getChildByName("NowCard"); ASSERT(m_pCheakCard != nullptr); auto btnClose = (Button*)imagebg->getChildByName("btnClose"); ASSERT(btnClose != nullptr); if (btnClose) { btnClose->addClickEventListener([=](Ref *pSender){ this->HideGetCtrl(); }); } return true; } void GetCardCtrl::ShowCardData(const MasterLeftCard* pLeftCard) { if (pLeftCard == nullptr) return; ResetAll(); // 当前牌; if (WN_CGameLogic::getInstance()->IsValidCard(pLeftCard->kMasterCheakCard)) { WN_SparrowCard* card = WN_SparrowCard::createWithDirection(pLeftCard->kMasterCheakCard, SP_SELFSTAND); if (card) { m_pCheakCard->addChild(card); } } // 显示列表; uint8 __ind = 0; for (int i = 0; i < MAX_INDEX; i++) { if (pLeftCard->kMasterLeftIndex[i] > 0) { uint8 cardData = WN_CGameLogic::getInstance()->SwitchToCardData(i); WN_SparrowCard* card = WN_SparrowCard::createWithDirection(cardData, SP_SELFSTAND); if (card) { // 设置坐标; Point pos = GetCardPoint(__ind); card->setPosition(pos); m_pLeftCardList->addChild(card); __ind++; // 增加点击事件; card->addClickEventListener(CC_CALLBACK_2(GetCardCtrl::onSendCardEvent, this)); } } } // 显示; this->setVisible(true); } void GetCardCtrl::ResetAll() { if (m_pLeftCardList) m_pLeftCardList->removeAllChildren(); if (m_pCheakCard) m_pCheakCard->removeAllChildren(); } void GetCardCtrl::HideGetCtrl() { ResetAll(); this->setVisible(false); } // 点击出牌 bool GetCardCtrl::onSendCardEvent(cocos2d::Ref *pSender, Vec2 pos) { if (pSender == nullptr) return false; WN_SparrowCard* pCardSprite = (WN_SparrowCard*)pSender; if (pCardSprite == nullptr) return false; if (!pCardSprite->GetTop()) { pCardSprite->SetTop(true); pCardSprite->setPositionY(pCardSprite->getPositionY() + TOP_CARD_HEIGHT); auto children = m_pLeftCardList->getChildren(); // 把其他已点击的牌落下 for (ssize_t i = 0; i < children.size(); i++) { WN_SparrowCard* childNode = static_cast(children.at(i)); //找到牌; if (childNode != pCardSprite) { if (childNode->GetTop()) { childNode->setPositionY(childNode->getPositionY() - TOP_CARD_HEIGHT); childNode->SetTop(false); } } } } else { //发送数据 CMD_C_MaterCheckCard MaterCheckCard; MaterCheckCard.cbCheakCard = pCardSprite->m_ValueData; EventCustom event(CUSTOM_EVENT_GET_CARD); event.setUserData(&MaterCheckCard); Director::getInstance()->getEventDispatcher()->dispatchEvent(&event); cocos2d::log("self out card %d", pCardSprite->m_ValueData); this->HideGetCtrl(); } return true; } // 得到手牌坐标 Point GetCardCtrl::GetCardPoint(uint8 cbIndex) { ASSERT(cbIndex <= MAX_INDEX); float width = m_pLeftCardList->getContentSize().width; int iRow = width / NCMJ_SELF_HAND_CARD_WIDHT; // 单行显示几个麻将牌; // 根据组合牌数量进行偏移 Point pos; pos.x = pos.x + NCMJ_SELF_HAND_CARD_WIDHT*(cbIndex%iRow); pos.y = pos.y + 130*(cbIndex/iRow); return pos; }