2026-02-13 14:34:15 +08:00
|
|
|
|
#include "DDZ_GameScene.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "DDZ_Player.h"
|
|
|
|
|
|
#include "DDZ_GameLogic.h"
|
|
|
|
|
|
#include "UserInfo.h"
|
|
|
|
|
|
#include "MainScene.h"
|
|
|
|
|
|
#include "MissionWeiXin.h"
|
|
|
|
|
|
#include "DismissScene.h"
|
|
|
|
|
|
#include "DDZ_SmallCardSprite.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "PopScene.h"
|
|
|
|
|
|
#include "ActionEx.h"
|
|
|
|
|
|
#include "JniFun.h"
|
|
|
|
|
|
#include "SetScene.h"
|
|
|
|
|
|
#include "ChatScene.h"
|
|
|
|
|
|
#include "PlayerScene.h"
|
|
|
|
|
|
#include "IpTipScene.h"
|
|
|
|
|
|
#include "SimpleAudioEngine.h"
|
|
|
|
|
|
|
|
|
|
|
|
using namespace DDZ_SPACE;
|
|
|
|
|
|
|
|
|
|
|
|
bool DDZGameScene::init()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!GameFrameBase::init())
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_cbTimeOutCard = 0;
|
|
|
|
|
|
m_cbTimeCallScore = 0;
|
|
|
|
|
|
m_cbTimeStartGame = 0;
|
|
|
|
|
|
m_cbTimeHeadOutCard = 0;
|
|
|
|
|
|
|
|
|
|
|
|
m_nCellScore = 0;
|
|
|
|
|
|
m_pVoiceNode = nullptr;
|
|
|
|
|
|
m_strGameRuleInfo = "";
|
|
|
|
|
|
|
|
|
|
|
|
zeromemory(&m_PrivateRoomInfo, sizeof(CMD_GF_Private_Room_Info));
|
|
|
|
|
|
|
|
|
|
|
|
initNet();
|
|
|
|
|
|
initScene();
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻص<C9BB>;
|
|
|
|
|
|
void DDZGameScene::onEnterTransitionDidFinish()
|
|
|
|
|
|
{
|
|
|
|
|
|
GameFrameBase::onEnterTransitionDidFinish();
|
|
|
|
|
|
|
|
|
|
|
|
if (true == GAME_MUISCBG)
|
|
|
|
|
|
{
|
|
|
|
|
|
CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("Games/DDZ/Sound/backmusic.mp3", true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʱͣ<CAB1>˲<EFBFBD><CBB2><EFBFBD>;
|
|
|
|
|
|
#if CC_PLATFORM_WIN32 == CC_TARGET_PLATFORM
|
|
|
|
|
|
CocosDenshion::SimpleAudioEngine* pAudio = CocosDenshion::SimpleAudioEngine::getInstance();
|
|
|
|
|
|
pAudio->stopBackgroundMusic(true);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
// ¼<><C2BC>ģʽ;
|
|
|
|
|
|
if (m_IsGameRecord)
|
|
|
|
|
|
{
|
|
|
|
|
|
StartRecord(DDZ_GAME_PLAYER);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
|
|
|
|
|
dispatcher->addCustomEventListener(SHOW_PRIVATE_END, CC_CALLBACK_1(DDZGameScene::onEventShowPrivate, this));
|
|
|
|
|
|
|
|
|
|
|
|
CGameServerItem* pGameServerItem = GameMission::g_pGameServerItem;
|
|
|
|
|
|
CC_ASSERT(pGameServerItem != nullptr);
|
|
|
|
|
|
if (pGameServerItem != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_kGameMission.SetServerItem(pGameServerItem);
|
|
|
|
|
|
m_kGameMission.start();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onExit()
|
|
|
|
|
|
{
|
|
|
|
|
|
GameFrameBase::onExit();
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
SafeDelete(m_aryPlayer[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
|
|
|
|
|
dispatcher->removeCustomEventListeners(SHOW_PRIVATE_END);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>;
|
|
|
|
|
|
void DDZGameScene::initScene()
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD>ڵ<EFBFBD>;
|
|
|
|
|
|
m_rootNode = CSLoader::createNodeWithVisibleSize("Games/DDZ/GameScene.csb");
|
|
|
|
|
|
CC_ASSERT(m_rootNode != nullptr);
|
|
|
|
|
|
this->addChild(m_rootNode, ZO_DEFAULT);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
auto ImageSytem = (ImageView*)m_rootNode->getChildByName("ImgRoll");
|
|
|
|
|
|
ASSERT(ImageSytem!=nullptr);
|
|
|
|
|
|
SetSystemNode(ImageSytem);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ӽڵ<D3BD>;
|
|
|
|
|
|
auto tablePanel = static_cast<Layout*>(m_rootNode->getChildByName("panelRoomBg"));
|
|
|
|
|
|
CC_ASSERT(tablePanel != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
const char* lpcStr = __String::createWithFormat("panelChair_%d", i)->getCString();
|
|
|
|
|
|
Layout* layout = static_cast<Layout*>(m_rootNode->getChildByName(lpcStr));
|
|
|
|
|
|
m_aryPlayer[i] = new DDZPlayer(i, layout);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD>;
|
|
|
|
|
|
if (i != DDZ_SELF_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
layout->addClickEventListener([i, this](Ref* pSender){
|
|
|
|
|
|
CC_ASSERT(pSender != nullptr);
|
|
|
|
|
|
if (nullptr == pSender) return;
|
|
|
|
|
|
|
|
|
|
|
|
if ((m_aryPlayer[i] != nullptr) && m_aryPlayer[i]->getUserItem(false)!=nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
PlayerScene* playerScene = PlayerScene::create();
|
|
|
|
|
|
playerScene->showPlayerInfo(m_aryPlayer[i]);
|
|
|
|
|
|
this->addChild(playerScene, ZO_TRUSTEE);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pLocalPlayer = m_aryPlayer[DDZ_SELF_VIEW_ID];
|
|
|
|
|
|
|
|
|
|
|
|
auto exitCallFunc = [=](Ref*){
|
|
|
|
|
|
auto callback = [=](){
|
|
|
|
|
|
|
|
|
|
|
|
onClickExitGameButton(nullptr);
|
|
|
|
|
|
this->runAction(Sequence::createWithTwoActions(DelayTime::create(0.2f), CallFunc::create([=]{
|
|
|
|
|
|
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(LEAVE_GAME);
|
|
|
|
|
|
})));
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), callback, nullptr);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>˳<EFBFBD><CBB3><EFBFBD>ť;
|
|
|
|
|
|
m_pBtnLeave = static_cast<Button*>(tablePanel->getChildByName("btnExit"));
|
|
|
|
|
|
CC_ASSERT(m_pBtnLeave != nullptr);
|
|
|
|
|
|
m_pBtnLeave->addClickEventListener(exitCallFunc);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ð<EFBFBD>ť;
|
|
|
|
|
|
auto btnSetting = static_cast<Button*>(tablePanel->getChildByName("btnSetting"));
|
|
|
|
|
|
CC_ASSERT(btnSetting != nullptr);
|
|
|
|
|
|
btnSetting->addClickEventListener([this](Ref*){
|
|
|
|
|
|
YSAudioEngine::Instance().playBtnClickEffect();
|
|
|
|
|
|
|
|
|
|
|
|
TipNode* pNode = SetScene::create();
|
|
|
|
|
|
CC_ASSERT(pNode != nullptr);
|
|
|
|
|
|
this->addChild(pNode, ZO_ANI);
|
|
|
|
|
|
pNode->pushScene();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>찴ť;
|
|
|
|
|
|
auto btnChat = static_cast<Button*>(tablePanel->getChildByName("btnChat"));
|
|
|
|
|
|
CC_ASSERT(btnChat != nullptr);
|
|
|
|
|
|
btnChat->addClickEventListener([this](Ref*){
|
|
|
|
|
|
YSAudioEngine::Instance().playBtnClickEffect();
|
|
|
|
|
|
|
|
|
|
|
|
const std::vector<std::string>& chatList = getShortChatList();
|
|
|
|
|
|
auto chatLayer = ChatLayer::create(chatList);
|
|
|
|
|
|
CC_ASSERT(chatLayer != nullptr);
|
|
|
|
|
|
this->addChild(chatLayer, ZO_ANI);
|
|
|
|
|
|
chatLayer->pushScene();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
auto btnTrustee = static_cast<Button*>(tablePanel->getChildByName("btnTrust"));
|
|
|
|
|
|
CC_ASSERT(btnTrustee != nullptr);
|
|
|
|
|
|
btnTrustee->addClickEventListener([=](Ref*){
|
|
|
|
|
|
if (!m_bGameStart) return;
|
|
|
|
|
|
|
|
|
|
|
|
DDZ_CMD_C_Trustee mData;
|
|
|
|
|
|
mData.bTrustee = !m_aryTrustee[DDZ_SELF_VIEW_ID];
|
|
|
|
|
|
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_TRUSTEE, &mData, sizeof(DDZ_CMD_C_Trustee));
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
auto imgTop = static_cast<ImageView*>(tablePanel->getChildByName("imgTop"));
|
|
|
|
|
|
CC_ASSERT(imgTop != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtBaseScore = static_cast<TextAtlas*>(imgTop->getChildByName("baseScore"));
|
|
|
|
|
|
CC_ASSERT(m_pTxtBaseScore != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtMultiple = static_cast<TextAtlas*>(imgTop->getChildByName("multiple"));
|
|
|
|
|
|
CC_ASSERT(m_pTxtMultiple != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
auto sprRoomID = static_cast<Sprite*>(tablePanel->getChildByName("sprRoomID"));
|
|
|
|
|
|
CC_ASSERT(sprRoomID != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_txtPrivateRoomID = static_cast<Text*>(sprRoomID->getChildByName("txtPrivateRoomID"));
|
|
|
|
|
|
CC_ASSERT(m_txtPrivateRoomID != nullptr);
|
|
|
|
|
|
m_txtPrivateRoomID->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
auto imgRule = static_cast<ImageView*>(tablePanel->getChildByName("imgRule"));
|
|
|
|
|
|
CC_ASSERT(imgRule != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_txtPrivatePlayCount = static_cast<Text*>(imgRule->getChildByName("txtPrivatePlayCount"));
|
|
|
|
|
|
CC_ASSERT(m_txtPrivatePlayCount != nullptr);
|
|
|
|
|
|
m_txtPrivatePlayCount->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
//m_txtPrivateMultiple = static_cast<Text*>(imgRule->getChildByName("txtPrivateMultiple"));
|
|
|
|
|
|
//CC_ASSERT(m_txtPrivateMultiple != nullptr);
|
|
|
|
|
|
//m_txtPrivateMultiple->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pPanelBackCard = static_cast<Layout*>(tablePanel->getChildByName("panelBackCard"));
|
|
|
|
|
|
CC_ASSERT(m_pPanelBackCard != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<><D7BC><EFBFBD><EFBFBD>ť;
|
|
|
|
|
|
m_pBtnReady = static_cast<Button*>(m_rootNode->getChildByName("btnReady"));
|
|
|
|
|
|
CC_ASSERT(m_pBtnReady != nullptr);
|
|
|
|
|
|
m_pBtnReady->addClickEventListener([=](Ref*){
|
|
|
|
|
|
SendUserReady();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>зְ<D0B7>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>;
|
|
|
|
|
|
auto panelCallScore = static_cast<Layout*>(m_rootNode->getChildByName("panelCallScore"));
|
|
|
|
|
|
CC_ASSERT(panelCallScore != nullptr);
|
|
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pAryBtnCall[i] = static_cast<Button*>(panelCallScore->getChildByName(StringUtils::format("btnCall%d", (i+1))));
|
|
|
|
|
|
CC_ASSERT(m_pAryBtnCall[i] != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
m_pAryBtnCall[i]->addClickEventListener([=](Ref*){
|
|
|
|
|
|
DDZ_CMD_C_CallScore call;
|
|
|
|
|
|
call.cbCallScore = i+1;
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_CALL_SCORE, &call, sizeof(DDZ_CMD_C_CallScore));
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>а<EFBFBD>ť;
|
|
|
|
|
|
m_pBtnNoCall = static_cast<Button*>(panelCallScore->getChildByName("btnPass"));
|
|
|
|
|
|
CC_ASSERT(m_pBtnNoCall != nullptr);
|
|
|
|
|
|
m_pBtnNoCall->addClickEventListener([=](Ref*){
|
|
|
|
|
|
SendPassCall();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ư<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>;
|
|
|
|
|
|
auto panelOutCard = static_cast<Layout*>(m_rootNode->getChildByName("panelOutCard"));
|
|
|
|
|
|
CC_ASSERT(panelOutCard != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť;
|
|
|
|
|
|
m_pBtnPass = static_cast<Button*>(panelOutCard->getChildByName("btnPass"));
|
|
|
|
|
|
CC_ASSERT(m_pBtnPass != nullptr);
|
|
|
|
|
|
m_pBtnPass->addClickEventListener([this](Ref*){
|
|
|
|
|
|
if (getSelfChairID() == m_wCurChairID)
|
|
|
|
|
|
{
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_PASS_CARD);
|
|
|
|
|
|
|
|
|
|
|
|
m_pHandCardLayer->downAllCard();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE>ť;
|
|
|
|
|
|
m_pBtnTips = static_cast<Button*>(panelOutCard->getChildByName("btnTips"));
|
|
|
|
|
|
CC_ASSERT(m_pBtnTips != nullptr);
|
|
|
|
|
|
m_pBtnTips->addClickEventListener(CC_CALLBACK_1(DDZGameScene::onButtonTipClick, this));
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ư<EFBFBD>ť;
|
|
|
|
|
|
m_pBtnOutCard = static_cast<Button*>(panelOutCard->getChildByName("btnOutCard"));
|
|
|
|
|
|
CC_ASSERT(m_pBtnOutCard != nullptr);
|
|
|
|
|
|
m_pBtnOutCard->addClickEventListener([this](Ref*){
|
|
|
|
|
|
//<2F><><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD>Ч;
|
|
|
|
|
|
playSoundEffect(DDZ_ST_OUT_CARD);
|
|
|
|
|
|
|
|
|
|
|
|
DDZ_CMD_C_OutCard OutCard;
|
|
|
|
|
|
zeromemory(&OutCard, sizeof(DDZ_CMD_C_OutCard));
|
|
|
|
|
|
m_pHandCardLayer->getShootCardData(OutCard.cbCardData, OutCard.cbCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
uint16 wHeadSize = sizeof(DDZ_CMD_C_OutCard) - sizeof(OutCard.cbCardData);
|
|
|
|
|
|
uint16 wSendSize = wHeadSize + sizeof(uint8)*OutCard.cbCardCount;
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_OUT_CARD, &OutCard, wSendSize);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pPanelTrustee = static_cast<Layout*>(m_rootNode->getChildByName("panelTrustee"));
|
|
|
|
|
|
CC_ASSERT(m_pPanelTrustee != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//ȡ<><C8A1><EFBFBD>йܰ<D0B9>ť;
|
|
|
|
|
|
auto btnCancelTrustee = static_cast<Button*>(m_pPanelTrustee->getChildByName("btnTrustee"));
|
|
|
|
|
|
CC_ASSERT(btnCancelTrustee != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
btnCancelTrustee->addClickEventListener([=](Ref*){
|
|
|
|
|
|
if (!m_bGameStart || !m_aryTrustee[DDZ_SELF_VIEW_ID]) return;
|
|
|
|
|
|
|
|
|
|
|
|
DDZ_CMD_C_Trustee mData;
|
|
|
|
|
|
mData.bTrustee = false;
|
|
|
|
|
|
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_TRUSTEE, &mData, sizeof(DDZ_CMD_C_Trustee));
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pSprTips = static_cast<Sprite*>(m_rootNode->getChildByName("sprTips"));
|
|
|
|
|
|
CC_ASSERT(m_pSprTips != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ƽڵ<C6BD>;
|
|
|
|
|
|
auto panelHandCard = static_cast<Layout*>(m_rootNode->getChildByName("panelHandCard"));
|
|
|
|
|
|
|
|
|
|
|
|
auto func = CC_CALLBACK_2(DDZGameScene::selectCardCallback, this);
|
|
|
|
|
|
m_pHandCardLayer = DDZHandCardLayer::create(panelHandCard->getContentSize(), func);
|
|
|
|
|
|
panelHandCard->addChild(m_pHandCardLayer);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>ƻ<EFBFBD><C6BB><EFBFBD>;
|
|
|
|
|
|
SpriteFrameCache* pSpriteFrameCache = SpriteFrameCache::getInstance();
|
|
|
|
|
|
pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Table/PinCard.plist");
|
|
|
|
|
|
|
|
|
|
|
|
//<>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>ť;
|
|
|
|
|
|
m_btnWeiXin = (Button*)tablePanel->getChildByName("btnWeiXin");
|
|
|
|
|
|
CC_ASSERT(m_btnWeiXin != nullptr);
|
|
|
|
|
|
m_btnWeiXin->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_btnWeiXin->addClickEventListener([=](Ref*){
|
|
|
|
|
|
//std::string strText = StringUtils::format("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [%u] %d <20><>, <20><><EFBFBD><EFBFBD>AA, %s<><73>", m_PrivateRoomInfo.dwRoomNum, m_PrivateRoomInfo.dwPlayTotal, m_strGameRuleInfo.c_str());
|
|
|
|
|
|
std::string strText = StringUtils::format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%u), %d <20>֡<EFBFBD>", m_PrivateRoomInfo.dwRoomNum, m_PrivateRoomInfo.dwPlayTotal);
|
|
|
|
|
|
|
|
|
|
|
|
std::string strUrl = GlobalJosn::getInstance()->getShareInfoByKind(SH_KIND_WEIXIN_URL);
|
|
|
|
|
|
std::string strUrlAll = StringUtils::format("%s?param=%d", strUrl.c_str(), m_PrivateRoomInfo.dwRoomNum);
|
|
|
|
|
|
|
2026-03-01 13:48:24 +08:00
|
|
|
|
MissionWeiXin::Instance().shareUrlWeiXin(strUrlAll, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strText);
|
2026-02-13 14:34:15 +08:00
|
|
|
|
//SelectShareScene::Instance().shareRoomInfo(strUrlAll, utility::a_u8("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), strText, 0);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־;
|
|
|
|
|
|
m_pVoiceNode = (Node*)m_rootNode->getChildByName("VoiceNode");
|
|
|
|
|
|
CC_ASSERT(m_pVoiceNode != nullptr);
|
|
|
|
|
|
m_pVoiceNode->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť;
|
|
|
|
|
|
auto btnVoice = (Button*)tablePanel->getChildByName("btnVoice");
|
|
|
|
|
|
CC_ASSERT(btnVoice != nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
//ע<>ᴥ<EFBFBD><E1B4A5><EFBFBD>¼<EFBFBD>;
|
|
|
|
|
|
btnVoice->addTouchEventListener(CC_CALLBACK_2(DDZGameScene::OnButtonVoiceTouched, this));
|
|
|
|
|
|
//btnVoice->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ɢ<EFBFBD><C9A2><EFBFBD>亯<EFBFBD><E4BAAF>;
|
|
|
|
|
|
auto callback = [this](){
|
|
|
|
|
|
onEventAgreeDismissRoom(true);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// <20>뿪<EFBFBD><EBBFAA>ť;
|
|
|
|
|
|
m_btnDismissRoom = (Button*)tablePanel->getChildByName("btnDismiss");
|
|
|
|
|
|
CC_ASSERT(m_btnDismissRoom != nullptr);
|
|
|
|
|
|
m_btnDismissRoom->setVisible(false);
|
|
|
|
|
|
m_btnDismissRoom->addClickEventListener([=](Ref *pSender){
|
|
|
|
|
|
std::string strTip;
|
|
|
|
|
|
if (0 == m_PrivateRoomInfo.dwPlayCout && false == m_PrivateRoomInfo.bStartGame)
|
|
|
|
|
|
{
|
|
|
|
|
|
strTip = "<EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD><EFBFBD>䲻<EFBFBD>۷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD>";
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
strTip = "<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
PopScene::Instance().show(utility::a_u8(strTip.c_str()), callback, nullptr);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pResultLayer = DDZGameEndNode::create();
|
|
|
|
|
|
m_pResultLayer->setVisible(false);
|
|
|
|
|
|
this->addChild(m_pResultLayer, ZO_END);
|
|
|
|
|
|
|
|
|
|
|
|
// ˽<>˳<EFBFBD><CBB3><EFBFBD>Ƥ;
|
|
|
|
|
|
m_pPrivateScene = DDZPrivateEndNode::create();
|
|
|
|
|
|
m_pPrivateScene->setVisible(false);
|
|
|
|
|
|
this->addChild(m_pPrivateScene, ZO_PRIVATE);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>ļ<EFBFBD><C4BC><EFBFBD>;
|
|
|
|
|
|
auto keyListener = EventListenerKeyboard::create();
|
|
|
|
|
|
//<2F>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
keyListener->onKeyReleased = [=](EventKeyboard::KeyCode keyCode, Event * pEvent){
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (keyCode == EventKeyboard::KeyCode::KEY_ESCAPE)
|
|
|
|
|
|
{
|
|
|
|
|
|
exitCallFunc(nullptr);
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5>¼<EFBFBD><C2BC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
_eventDispatcher->addEventListenerWithSceneGraphPriority(keyListener, this);
|
|
|
|
|
|
|
|
|
|
|
|
loadShortChat("Games/DDZ/ShortChat/ChatInfo.json");
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>;
|
|
|
|
|
|
resetScene();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
ResetAllData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::resetScene(bool bAll/* = false*/)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UI
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[i]->resetUI(bAll);
|
|
|
|
|
|
|
|
|
|
|
|
m_pAryBtnCall[i]->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>;
|
|
|
|
|
|
//m_pTxtBaseScore->setString("");
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtMultiple->setString("");
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>ť;
|
|
|
|
|
|
m_pBtnNoCall->setVisible(false);
|
|
|
|
|
|
m_pBtnPass->setVisible(false);
|
|
|
|
|
|
m_pBtnTips->setVisible(false);
|
|
|
|
|
|
m_pBtnOutCard->setVisible(false);
|
|
|
|
|
|
m_pBtnReady->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pSprTips->setVisible(false);
|
|
|
|
|
|
m_pPanelTrustee->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>;
|
|
|
|
|
|
m_pPanelBackCard->removeAllChildren();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pHandCardLayer->setLordMode(false);
|
|
|
|
|
|
m_pHandCardLayer->initUIData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::resetData()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bGameStart = false;
|
|
|
|
|
|
|
|
|
|
|
|
m_wLandChairID = INVALID_CHAIR;
|
|
|
|
|
|
m_wCurChairID = INVALID_CHAIR;
|
|
|
|
|
|
|
|
|
|
|
|
m_wTurnWiner = INVALID_CHAIR;
|
|
|
|
|
|
m_cbTurnCardCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
m_cbBombCount = 0;
|
|
|
|
|
|
m_cbCallScore = 0;
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryTrustee[i] = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
zeromemory(m_cbTurnCardData, sizeof(m_cbTurnCardData));
|
|
|
|
|
|
zeromemory(m_aryHandCardData, sizeof(m_aryHandCardData));
|
|
|
|
|
|
zeromemory(m_aryHandCardCount, sizeof(m_aryHandCardCount));
|
|
|
|
|
|
zeromemory(m_aryAllHandCardData, sizeof(m_aryAllHandCardData));
|
|
|
|
|
|
zeromemory(m_aryBackCardData, sizeof(m_aryBackCardData));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>൱<EFBFBD><E0B5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뿪);
|
|
|
|
|
|
void DDZGameScene::ResetAllData()
|
|
|
|
|
|
{
|
|
|
|
|
|
resetScene();
|
|
|
|
|
|
|
|
|
|
|
|
resetData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::ResetTable()
|
|
|
|
|
|
{
|
|
|
|
|
|
resetScene(true);
|
|
|
|
|
|
|
|
|
|
|
|
resetData();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>;
|
|
|
|
|
|
const std::string DDZGameScene::getShortChatSoundPath(uint8 cbGender, int nIndex)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
std::string strFilePath = "Games/DDZ/ShortChat/";
|
|
|
|
|
|
if (cbGender == enMan)
|
|
|
|
|
|
{
|
|
|
|
|
|
strFilePath += StringUtils::format("man/%d.mp3", nIndex);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
strFilePath += StringUtils::format("woman/%d.mp3", nIndex);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return strFilePath;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
|
|
|
|
|
|
void DDZGameScene::initNet()
|
|
|
|
|
|
{
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_GAME_START, this, DDZGameScene::onSubGameStart);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_CALL_SCORE, this, DDZGameScene::onSubGameCallScore);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_BANKER_INFO, this, DDZGameScene::onSubGameBankerInfo);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_OUT_CARD, this, DDZGameScene::onSubGameOutCard);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_PASS_CARD, this, DDZGameScene::onSubGamePassCard);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_SET_BASESCORE, this, DDZGameScene::onSubGameSetBaseScore);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_GAME_CONCLUDE, this, DDZGameScene::onSubGameEnd);
|
|
|
|
|
|
addNetCBDefine(DDZ_SUB_S_TRUSTEE, this, DDZGameScene::onSubGameTrustee);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onButtonTipClick(Ref*)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (getSelfChairID() != m_wCurChairID)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
tagSearchCardResult mCardResult;
|
|
|
|
|
|
uint8 cbResultCount = m_GameLogic.SearchOutCard(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID],
|
|
|
|
|
|
m_cbTurnCardData, m_cbTurnCardCount, &mCardResult);
|
|
|
|
|
|
|
|
|
|
|
|
if (cbResultCount > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pHandCardLayer->shootCardData(mCardResult.cbResultCard[0], mCardResult.cbCardCount[0]);
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_PASS_CARD);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool DDZGameScene::OnEventSceneMessage(uint8 cbGameStatus, bool bLookonUser, void* pData, int nDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (cbGameStatus)
|
|
|
|
|
|
{
|
|
|
|
|
|
case GAME_SCENE_FREE:
|
|
|
|
|
|
{
|
|
|
|
|
|
return onGameSceneFree(pData, nDataSize);
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAME_SCENE_CALL:
|
|
|
|
|
|
{
|
|
|
|
|
|
return onGameSceneCall(pData, nDataSize);
|
|
|
|
|
|
}
|
|
|
|
|
|
case GAME_SCENE_PLAY:
|
|
|
|
|
|
{
|
|
|
|
|
|
return onGameScenePlay(pData, nDataSize);
|
|
|
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ָ<EFBFBD><D6B8>ձճ<D5B1><D5B3><EFBFBD>;
|
|
|
|
|
|
bool DDZGameScene::onGameSceneFree(void* pData, int nDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(nDataSize == sizeof(DDZ_CMD_S_StatusFree));
|
|
|
|
|
|
DDZ_CMD_S_StatusFree* pStatusFree = (DDZ_CMD_S_StatusFree*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
m_cbTimeOutCard = pStatusFree->cbTimeOutCard;
|
|
|
|
|
|
m_cbTimeCallScore = pStatusFree->cbTimeCallScore;
|
|
|
|
|
|
m_cbTimeStartGame = pStatusFree->cbTimeStartGame;
|
|
|
|
|
|
m_cbTimeHeadOutCard = pStatusFree->cbTimeHeadOutCard;
|
|
|
|
|
|
|
|
|
|
|
|
m_nCellScore = pStatusFree->lCellScore;
|
|
|
|
|
|
|
|
|
|
|
|
m_pTxtBaseScore->setString(utility::toString(pStatusFree->lCellScore));
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnReady->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ָ<EFBFBD><D6B8>зֳ<D0B7><D6B3><EFBFBD>;
|
|
|
|
|
|
bool DDZGameScene::onGameSceneCall(void* pData, int nDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(nDataSize == sizeof(DDZ_CMD_S_StatusCall));
|
|
|
|
|
|
DDZ_CMD_S_StatusCall* pStatusCall = (DDZ_CMD_S_StatusCall*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
m_bGameStart = true;
|
|
|
|
|
|
|
|
|
|
|
|
m_cbTimeOutCard = pStatusCall->cbTimeOutCard;
|
|
|
|
|
|
m_cbTimeCallScore = pStatusCall->cbTimeCallScore;
|
|
|
|
|
|
m_cbTimeStartGame = pStatusCall->cbTimeStartGame;
|
|
|
|
|
|
m_cbTimeHeadOutCard = pStatusCall->cbTimeHeadOutCard;
|
|
|
|
|
|
|
|
|
|
|
|
m_nCellScore = pStatusCall->lCellScore;
|
|
|
|
|
|
m_cbCallScore = pStatusCall->cbBankerScore;
|
|
|
|
|
|
|
|
|
|
|
|
m_pTxtBaseScore->setString(utility::toString(pStatusCall->lCellScore));
|
|
|
|
|
|
m_pTxtMultiple->setString(utility::toString(pStatusCall->cbBankerScore));
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
memcpy(m_aryHandCardData, pStatusCall->cbHandCardData, sizeof(pStatusCall->cbHandCardData));
|
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(i);
|
|
|
|
|
|
|
|
|
|
|
|
m_aryHandCardCount[wViewID] = DDZ_NORMAL_COUNT;
|
|
|
|
|
|
m_aryTrustee[wViewID] = pStatusCall->bUserTrustee[i];
|
|
|
|
|
|
|
|
|
|
|
|
m_aryPlayer[wViewID]->setHandCardCount(DDZ_NORMAL_COUNT);
|
|
|
|
|
|
if (pStatusCall->cbScoreInfo[i] > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[wViewID]->setCallVisible(true, pStatusCall->cbScoreInfo[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryHandCardData, DDZ_NORMAL_COUNT, DDZ_ST_ORDER);
|
|
|
|
|
|
m_pHandCardLayer->redrawHandCard(m_aryHandCardData, DDZ_NORMAL_COUNT);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>³<EFBFBD><C2B3>ư<EFBFBD>ť;
|
|
|
|
|
|
updateCallButtons(pStatusCall->wCurrentUser, pStatusCall->cbBankerScore);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
drawBackCardData();
|
|
|
|
|
|
|
|
|
|
|
|
m_wCurChairID = pStatusCall->wCurrentUser;
|
|
|
|
|
|
|
|
|
|
|
|
//// ͬIP<49>ж<EFBFBD>
|
|
|
|
|
|
//IsSameIp();
|
|
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD><EFBFBD>ͬIP<49><50>ʾ;
|
|
|
|
|
|
//IpTipScene::Instance().hide();
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ָ<EFBFBD><D6B8><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
|
|
|
|
|
|
bool DDZGameScene::onGameScenePlay(void* pData, int nDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(nDataSize == sizeof(DDZ_CMD_S_StatusPlay));
|
|
|
|
|
|
DDZ_CMD_S_StatusPlay* pStatusPlay = (DDZ_CMD_S_StatusPlay*)pData;
|
|
|
|
|
|
|
|
|
|
|
|
m_bGameStart = true;
|
|
|
|
|
|
|
|
|
|
|
|
m_cbTimeOutCard = pStatusPlay->cbTimeOutCard;
|
|
|
|
|
|
m_cbTimeCallScore = pStatusPlay->cbTimeCallScore;
|
|
|
|
|
|
m_cbTimeStartGame = pStatusPlay->cbTimeStartGame;
|
|
|
|
|
|
m_cbTimeHeadOutCard = pStatusPlay->cbTimeHeadOutCard;
|
|
|
|
|
|
|
|
|
|
|
|
m_cbCallScore = pStatusPlay->cbBankerScore;
|
|
|
|
|
|
m_cbBombCount = pStatusPlay->cbBombCount;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtBaseScore->setString(utility::toString(pStatusPlay->lCellScore));
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD>;
|
|
|
|
|
|
updateMultipleText();
|
|
|
|
|
|
|
|
|
|
|
|
m_wTurnWiner = pStatusPlay->wTurnWiner;
|
|
|
|
|
|
m_cbTurnCardCount = pStatusPlay->cbTurnCardCount;
|
|
|
|
|
|
memcpy(m_cbTurnCardData, pStatusPlay->cbTurnCardData, m_cbTurnCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
m_wLandChairID = pStatusPlay->wBankerUser;
|
|
|
|
|
|
m_wCurChairID = pStatusPlay->wCurrentUser;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(i);
|
|
|
|
|
|
|
|
|
|
|
|
m_aryTrustee[wViewID] = pStatusPlay->bUserTrustee[i];
|
|
|
|
|
|
|
|
|
|
|
|
uint8 cbCardCount = pStatusPlay->cbHandCardCount[i];
|
|
|
|
|
|
m_aryHandCardCount[wViewID] = cbCardCount;
|
|
|
|
|
|
m_aryPlayer[wViewID]->setHandCardCount(cbCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
if (i == m_wTurnWiner)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[wViewID]->setOutCardData(pStatusPlay->cbTurnCardData, m_cbTurnCardCount);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (DDZ_SELF_VIEW_ID == wViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
memcpy(m_aryHandCardData, pStatusPlay->cbHandCardData, cbCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryHandCardData, cbCardCount, DDZ_ST_ORDER);
|
|
|
|
|
|
m_pHandCardLayer->redrawHandCard(m_aryHandCardData, cbCardCount);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool bLandlord = (i == pStatusPlay->wBankerUser);
|
|
|
|
|
|
m_aryPlayer[wViewID]->setLand(bLandlord);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
memcpy(m_aryBackCardData, pStatusPlay->cbBankerCard, sizeof(pStatusPlay->cbBankerCard));
|
|
|
|
|
|
|
|
|
|
|
|
if (m_wLandChairID==getSelfChairID())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pHandCardLayer->setLordMode(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
drawBackCardData();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>;
|
|
|
|
|
|
flipBackCard();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>°<EFBFBD>ť״̬;
|
|
|
|
|
|
updateButtonsStatus(pStatusPlay->wCurrentUser, m_cbTimeOutCard, (0 == pStatusPlay->cbTurnCardCount));
|
|
|
|
|
|
|
|
|
|
|
|
if (m_aryTrustee[DDZ_SELF_VIEW_ID])
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pPanelTrustee->setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//// ͬIP<49>ж<EFBFBD>;
|
|
|
|
|
|
//IsSameIp();
|
|
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD><EFBFBD>ͬIP<49><50>ʾ;
|
|
|
|
|
|
//IpTipScene::Instance().hide();
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DDZGameScene::onSubGameStart(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(wDataSize == sizeof(DDZ_CMD_S_GameStart));
|
|
|
|
|
|
DDZ_CMD_S_GameStart* pGameStart = (DDZ_CMD_S_GameStart*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
m_bGameStart = true;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><D7BC>״̬;
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[i]->setReadyVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_wCurChairID = pGameStart->wCurrentUser;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
memcpy(m_aryHandCardData, pGameStart->cbCardData, sizeof(pGameStart->cbCardData));
|
|
|
|
|
|
|
|
|
|
|
|
if (m_IsGameRecord)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryHandCardCount[i] = DDZ_NORMAL_COUNT;
|
|
|
|
|
|
m_aryPlayer[i]->setHandCardCount(DDZ_NORMAL_COUNT);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID], DDZ_ST_ORDER);
|
|
|
|
|
|
m_pHandCardLayer->redrawHandCard(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID]);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>½зְ<D0B7>ť;
|
|
|
|
|
|
updateCallButtons(m_wCurChairID, 255);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryAllHandCardData[DDZ_LEFT_VIEW_ID], m_aryHandCardCount[DDZ_LEFT_VIEW_ID], DDZ_ST_ORDER);
|
|
|
|
|
|
m_aryPlayer[DDZ_LEFT_VIEW_ID]->setHandCardData(m_aryAllHandCardData[DDZ_LEFT_VIEW_ID], m_aryHandCardCount[DDZ_LEFT_VIEW_ID]);
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryAllHandCardData[DDZ_RIGHT_VIEW_ID], m_aryHandCardCount[DDZ_RIGHT_VIEW_ID], DDZ_ST_ORDER);
|
|
|
|
|
|
m_aryPlayer[DDZ_RIGHT_VIEW_ID]->setHandCardData(m_aryAllHandCardData[DDZ_RIGHT_VIEW_ID], m_aryHandCardCount[DDZ_RIGHT_VIEW_ID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
playSoundEffect(DDZ_ST_DEAL_CARD);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>;
|
|
|
|
|
|
float fDelaySendTime = 0.01f;
|
|
|
|
|
|
SpriteFrameCache* pSpriteFrameCache = SpriteFrameCache::getInstance();
|
|
|
|
|
|
//Vec2 ptInitCard = m_rootNode->getChildByName("imgGameLogo")->getPosition();
|
|
|
|
|
|
Size sizeWin = Director::getInstance()->getWinSize();
|
|
|
|
|
|
Vec2 ptInitCard;
|
|
|
|
|
|
ptInitCard.x = sizeWin.width / 2;
|
|
|
|
|
|
ptInitCard.y = sizeWin.height / 2;
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8 i = 1; i <= (DDZ_FULL_COUNT - DDZ_BACK_COUNT); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
Sprite* pCardSprite = Sprite::createWithSpriteFrameName("bCardBack.png");
|
|
|
|
|
|
pCardSprite->setTag(i);
|
|
|
|
|
|
pCardSprite->setScale(0.5f);
|
|
|
|
|
|
//pCardSprite->setName(StringUtils::format("SendCardSprite%d", i));
|
|
|
|
|
|
pCardSprite->setPosition(ptInitCard);
|
|
|
|
|
|
m_rootNode->addChild(pCardSprite);
|
|
|
|
|
|
|
|
|
|
|
|
moveSendCardSprite(pCardSprite, i%DDZ_GAME_PLAYER, fDelaySendTime);
|
|
|
|
|
|
fDelaySendTime = fDelaySendTime + 0.03;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
//for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// m_aryHandCardCount[i] = DDZ_NORMAL_COUNT;
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><><EFBFBD>½зְ<D0B7>ť;
|
|
|
|
|
|
//updateCallButtons(pGameStart->wCurrentUser, 255);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>;
|
|
|
|
|
|
drawBackCardData();
|
|
|
|
|
|
|
|
|
|
|
|
//// <20><><EFBFBD><EFBFBD>ͬIP<49><50>ʾ;
|
|
|
|
|
|
//IpTipScene::Instance().hide();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ҽз<D2BD>
|
|
|
|
|
|
void DDZGameScene::onSubGameCallScore(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(wDataSize == sizeof(DDZ_CMD_S_CallScore));
|
|
|
|
|
|
DDZ_CMD_S_CallScore* pCallScore = (DDZ_CMD_S_CallScore*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
if (pCallScore->cbUserCallScore != 255 && pCallScore->cbUserCallScore>m_cbCallScore)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_cbCallScore = pCallScore->cbUserCallScore;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(pCallScore->wCallScoreUser);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Žз<C5BD><D0B7><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
playSoundEffect(DDZ_ST_CALL, m_aryPlayer[wViewID]->GetGender(), pCallScore->cbUserCallScore);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ʱ;
|
|
|
|
|
|
m_aryPlayer[wViewID]->killClock();
|
|
|
|
|
|
m_aryPlayer[wViewID]->setCallVisible(true, pCallScore->cbUserCallScore);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѽз<D1BD><D0B7><EFBFBD><EFBFBD>ؽзְ<D0B7>ť;
|
|
|
|
|
|
if (DDZ_SELF_VIEW_ID==wViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (uint8 i = 0; i < 3; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pAryBtnCall[i]->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pBtnNoCall->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (pCallScore->cbUserCallScore <= 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtMultiple->setString(utility::toString<short>(pCallScore->cbUserCallScore));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>3<EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ΪINVALID_CHAIR;
|
|
|
|
|
|
if (INVALID_CHAIR!=pCallScore->wCurrentUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
updateCallButtons(pCallScore->wCurrentUser, m_cbCallScore);
|
|
|
|
|
|
|
|
|
|
|
|
m_wCurChairID = pCallScore->wCurrentUser;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
|
|
|
|
|
|
void DDZGameScene::onSubGameBankerInfo(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(wDataSize == sizeof(DDZ_CMD_S_BankerInfo));
|
|
|
|
|
|
DDZ_CMD_S_BankerInfo* pBankerInfo = (DDZ_CMD_S_BankerInfo*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
m_wLandChairID = pBankerInfo->wBankerUser;
|
|
|
|
|
|
m_cbCallScore = pBankerInfo->cbBankerScore;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҽз<D2BD><D0B7><EFBFBD>Ϣ;
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[i]->setCallVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtMultiple->setString(utility::toString<short>(pBankerInfo->cbBankerScore));
|
|
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
uint16 wBankerViewID = SwitchViewChairID(pBankerInfo->wBankerUser);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_aryHandCardCount[wBankerViewID] += DDZ_BACK_COUNT;
|
|
|
|
|
|
|
|
|
|
|
|
m_aryPlayer[wBankerViewID]->setHandCardCount(m_aryHandCardCount[wBankerViewID]);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>־;
|
|
|
|
|
|
m_aryPlayer[wBankerViewID]->setLand(true);
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i != wBankerViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[i]->setLand(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_wCurChairID = pBankerInfo->wCurrentUser;
|
|
|
|
|
|
m_wTurnWiner = m_wCurChairID;
|
|
|
|
|
|
m_cbTurnCardCount = 0;
|
|
|
|
|
|
zeromemory(m_cbTurnCardData, sizeof(m_cbTurnCardData));
|
|
|
|
|
|
|
|
|
|
|
|
if (DDZ_SELF_VIEW_ID==wBankerViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
memcpy(m_aryHandCardData + DDZ_NORMAL_COUNT, pBankerInfo->cbBankerCard, sizeof(pBankerInfo->cbBankerCard));
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID], DDZ_ST_ORDER);
|
|
|
|
|
|
|
|
|
|
|
|
m_pHandCardLayer->setLordMode(true);
|
|
|
|
|
|
m_pHandCardLayer->redrawHandCard(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID]);
|
|
|
|
|
|
|
|
|
|
|
|
updateButtonsStatus(pBankerInfo->wCurrentUser, m_cbTimeHeadOutCard, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (m_IsGameRecord)
|
|
|
|
|
|
{
|
|
|
|
|
|
memcpy(m_aryAllHandCardData[wBankerViewID] + DDZ_NORMAL_COUNT, pBankerInfo->cbBankerCard, sizeof(pBankerInfo->cbBankerCard));
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryAllHandCardData[wBankerViewID], m_aryHandCardCount[wBankerViewID], DDZ_ST_ORDER);
|
|
|
|
|
|
m_aryPlayer[wBankerViewID]->setHandCardData(m_aryAllHandCardData[wBankerViewID], m_aryHandCardCount[wBankerViewID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
memcpy(m_aryBackCardData, pBankerInfo->cbBankerCard, sizeof(pBankerInfo->cbBankerCard));
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>;
|
|
|
|
|
|
flipBackCard();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onSubGameOutCard(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
DDZ_CMD_S_OutCard* pOutCard = (DDZ_CMD_S_OutCard*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
uint16 wHeadSize = sizeof(DDZ_CMD_S_OutCard) - sizeof(pOutCard->cbCardData);
|
|
|
|
|
|
|
|
|
|
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT((wDataSize >= wHeadSize) && (wDataSize == (wHeadSize + pOutCard->cbCardCount*sizeof(uint8))));
|
|
|
|
|
|
if ((wDataSize < wHeadSize) || (wDataSize != (wHeadSize + pOutCard->cbCardCount*sizeof(uint8)))) return ;
|
|
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(pOutCard->wOutCardUser);
|
|
|
|
|
|
m_aryPlayer[wViewID]->setPassVisible(false);
|
|
|
|
|
|
m_aryPlayer[wViewID]->setOutCardData(pOutCard->cbCardData, pOutCard->cbCardCount);
|
|
|
|
|
|
m_aryPlayer[wViewID]->killClock();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
uint8 cbCardType = m_GameLogic.GetCardType(pOutCard->cbCardData, pOutCard->cbCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ը<EFBFBD><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (DDZ_CT_BOMB_CARD == cbCardType || DDZ_CT_MISSILE_CARD == cbCardType)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_cbBombCount++;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD>;
|
|
|
|
|
|
updateMultipleText();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
playAnimate(cbCardType, pOutCard->wOutCardUser, m_wTurnWiner);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
playSoundEffect(cbCardType, m_aryPlayer[wViewID]->GetGender(), pOutCard->cbCardData[0]);
|
|
|
|
|
|
|
|
|
|
|
|
if (wViewID == DDZ_SELF_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
hideOutCardButtons();
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.RemoveCard(pOutCard->cbCardData, pOutCard->cbCardCount, m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID]);
|
|
|
|
|
|
m_aryHandCardCount[DDZ_SELF_VIEW_ID] -= pOutCard->cbCardCount;
|
|
|
|
|
|
|
|
|
|
|
|
//ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (m_aryHandCardCount[DDZ_SELF_VIEW_ID]>1)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID], DDZ_ST_ORDER);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pHandCardLayer->redrawHandCard(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryHandCardCount[wViewID] -= pOutCard->cbCardCount;
|
|
|
|
|
|
|
|
|
|
|
|
if (m_IsGameRecord)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_GameLogic.RemoveCard(pOutCard->cbCardData, pOutCard->cbCardCount, m_aryAllHandCardData[wViewID], m_aryHandCardCount[wViewID] + pOutCard->cbCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryAllHandCardData[wViewID], m_aryHandCardCount[wViewID], DDZ_ST_ORDER);
|
|
|
|
|
|
m_aryPlayer[wViewID]->setHandCardData(m_aryAllHandCardData[wViewID], m_aryHandCardCount[wViewID]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_aryPlayer[wViewID]->setHandCardCount(m_aryHandCardCount[wViewID]);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʱ<EFBFBD><CAB1>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (INVALID_CHAIR == pOutCard->wCurrentUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_wCurChairID = pOutCard->wCurrentUser;
|
|
|
|
|
|
m_wTurnWiner = pOutCard->wOutCardUser;
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i != wViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[i]->setPassVisible(false);
|
|
|
|
|
|
m_aryPlayer[i]->setOutCardData(nullptr, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (pOutCard->wOutCardUser == pOutCard->wCurrentUser)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_cbTurnCardCount = 0;
|
|
|
|
|
|
zeromemory(m_cbTurnCardData, sizeof(m_cbTurnCardData));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_cbTurnCardCount = pOutCard->cbCardCount;
|
|
|
|
|
|
memcpy(m_cbTurnCardData, pOutCard->cbCardData, pOutCard->cbCardCount);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>³<EFBFBD><C2B3>ư<EFBFBD>ť״̬;
|
|
|
|
|
|
updateButtonsStatus(pOutCard->wCurrentUser, m_cbTimeOutCard);
|
|
|
|
|
|
|
|
|
|
|
|
//ֻʣһ<CAA3><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч;
|
|
|
|
|
|
if (1==m_aryHandCardCount[wViewID])
|
|
|
|
|
|
{
|
|
|
|
|
|
playSoundEffect(DDZ_ST_LEFT_ONE_CARD, m_aryPlayer[wViewID]->GetGender());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onSubGamePassCard(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(wDataSize == sizeof(DDZ_CMD_S_PassCard));
|
|
|
|
|
|
DDZ_CMD_S_PassCard* pPassCard = (DDZ_CMD_S_PassCard*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(pPassCard->wPassCardUser);
|
|
|
|
|
|
m_aryPlayer[wViewID]->setPassVisible(true);
|
|
|
|
|
|
m_aryPlayer[wViewID]->setOutCardData(nullptr, 0);
|
|
|
|
|
|
m_aryPlayer[wViewID]->killClock();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
playSoundEffect(DDZ_ST_PASS, m_aryPlayer[wViewID]->GetGender());
|
|
|
|
|
|
|
|
|
|
|
|
m_wCurChairID = pPassCard->wCurrentUser;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD><D5B1>ֳ<EFBFBD><D6B3><EFBFBD>;
|
|
|
|
|
|
if (pPassCard->cbTurnOver)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_wTurnWiner = m_wCurChairID;
|
|
|
|
|
|
m_cbTurnCardCount = 0;
|
|
|
|
|
|
zeromemory(m_cbTurnCardData, sizeof(m_cbTurnCardData));
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[i]->setPassVisible(false);
|
|
|
|
|
|
m_aryPlayer[i]->setOutCardData(nullptr, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѳ<EFBFBD><D1B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3>ư<EFBFBD>ť;
|
|
|
|
|
|
if (wViewID == DDZ_SELF_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
hideOutCardButtons();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>³<EFBFBD><C2B3>ư<EFBFBD>ť״̬;
|
|
|
|
|
|
updateButtonsStatus(pPassCard->wCurrentUser, m_cbTimeOutCard, pPassCard->cbTurnOver>0);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>½зְ<D0B7>ť;
|
|
|
|
|
|
void DDZGameScene::updateCallButtons(uint16 wCurChairID, uint8 cbLastCallScore)
|
|
|
|
|
|
{
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
uint16 wCurViewID = SwitchViewChairID(wCurChairID);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>зְ<D0B7>ť;
|
|
|
|
|
|
if (DDZ_SELF_VIEW_ID == wCurViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (cbLastCallScore < 3 || 255 == cbLastCallScore)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (uint8 i = 0; i < 3; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE>ť;
|
|
|
|
|
|
m_pAryBtnCall[i]->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
//С<>ڵ<EFBFBD>ǰ<EFBFBD>Ľз<C4BD><D0B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (i < cbLastCallScore && 255 != cbLastCallScore)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pAryBtnCall[i]->setEnabled(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pAryBtnCall[i]->setEnabled(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pBtnNoCall->setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ʱ;
|
|
|
|
|
|
m_aryPlayer[wCurViewID]->showClock(m_cbTimeCallScore, [=](void){
|
|
|
|
|
|
//SendPassCall();
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[wCurViewID]->showClock(m_cbTimeCallScore);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>°<EFBFBD>ť״̬;
|
|
|
|
|
|
void DDZGameScene::updateButtonsStatus(uint16 wCurChairID, uint8 cbLeftSeconds, bool bTurnOver/* = false*/)
|
|
|
|
|
|
{
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ;
|
|
|
|
|
|
uint16 wCurViewID = SwitchViewChairID(wCurChairID);
|
|
|
|
|
|
CC_ASSERT(wCurViewID < DDZ_GAME_PLAYER);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (DDZ_SELF_VIEW_ID == wCurViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryPlayer[wCurViewID]->setPassVisible(false);
|
|
|
|
|
|
m_aryPlayer[wCurViewID]->setOutCardData(nullptr, 0);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnPass->setVisible(true);
|
|
|
|
|
|
m_pBtnPass->setEnabled(!bTurnOver);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnTips->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnOutCard->setVisible(true);
|
|
|
|
|
|
//m_pBtnOutCard->setEnabled(false);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
tagSearchCardResult mCardResult;
|
|
|
|
|
|
uint8 cbResultCount = m_GameLogic.SearchOutCard(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID],
|
|
|
|
|
|
m_cbTurnCardData, m_cbTurnCardCount, &mCardResult);
|
|
|
|
|
|
|
|
|
|
|
|
if (cbResultCount==0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pSprTips->setVisible(true);
|
|
|
|
|
|
m_pSprTips->setTexture(DDZ_TIPS_ONLY_PASS_PNG_FILE);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnTips->setEnabled(false);
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pBtnTips->setEnabled(true);
|
|
|
|
|
|
|
|
|
|
|
|
checkOutCardButton();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
auto callback = [=](){
|
|
|
|
|
|
if (getSelfChairID() != m_wCurChairID)
|
|
|
|
|
|
{
|
|
|
|
|
|
CC_ASSERT(false);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѳ<EFBFBD><D1B3><EFBFBD>
|
|
|
|
|
|
//if (m_wTurnWiner == m_wCurChairID && 0 == m_cbTurnCardCount)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// uint8 cbLeftCard = m_aryHandCardCount[DDZ_SELF_VIEW_ID];
|
|
|
|
|
|
// CC_ASSERT(cbLeftCard > 0 && cbLeftCard <= DDZ_MAX_COUNT);
|
|
|
|
|
|
|
|
|
|
|
|
// DDZ_CMD_C_OutCard OutCard;
|
|
|
|
|
|
// zeromemory(&OutCard, sizeof(DDZ_CMD_C_OutCard));
|
|
|
|
|
|
// OutCard.cbCardCount = 1;
|
|
|
|
|
|
// OutCard.cbCardData[0] = m_aryHandCardData[cbLeftCard - 1];
|
|
|
|
|
|
|
|
|
|
|
|
// uint16 wHeadSize = sizeof(DDZ_CMD_C_OutCard) - sizeof(OutCard.cbCardData);
|
|
|
|
|
|
// uint16 wSendSize = wHeadSize + sizeof(uint8)*OutCard.cbCardCount;
|
|
|
|
|
|
// SendSocketData(DDZ_SUB_C_OUT_CARD, &OutCard, wSendSize);
|
|
|
|
|
|
//}
|
|
|
|
|
|
//else
|
|
|
|
|
|
//{
|
|
|
|
|
|
// SendSocketData(DDZ_SUB_C_PASS_CARD);
|
|
|
|
|
|
//}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD>ʱ;
|
|
|
|
|
|
m_aryPlayer[wCurViewID]->showClock(cbLeftSeconds, callback);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>ʱ;
|
|
|
|
|
|
m_aryPlayer[wCurViewID]->showClock(cbLeftSeconds);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>س<EFBFBD><D8B3>ư<EFBFBD>ť;
|
|
|
|
|
|
void DDZGameScene::hideOutCardButtons()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pSprTips->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnPass->setVisible(false);
|
|
|
|
|
|
m_pBtnTips->setVisible(false);
|
|
|
|
|
|
m_pBtnOutCard->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>س<EFBFBD><D8B3>ư<EFBFBD>ť;
|
|
|
|
|
|
void DDZGameScene::checkOutCardButton()
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8 aryShootCardData[DDZ_MAX_COUNT] = { 0 };
|
|
|
|
|
|
uint8 cbShootCardCount = 0;
|
|
|
|
|
|
m_pHandCardLayer->getShootCardData(aryShootCardData, cbShootCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
if (cbShootCardCount==0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pSprTips->setVisible(true);
|
|
|
|
|
|
m_pSprTips->setTexture(DDZ_TIPS_CHOOSECARD_PNG_FILE);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(false);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8 cbCardType = m_GameLogic.GetCardType(aryShootCardData, cbShootCardCount);
|
|
|
|
|
|
if (cbCardType == DDZ_CT_ERROR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pSprTips->setVisible(true);
|
|
|
|
|
|
m_pSprTips->setTexture(DDZ_TIPS_OUT_ERROR_PNG_FILE);
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(false);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pSprTips->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_cbTurnCardCount > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
bool bRet = m_GameLogic.CompareCard(m_cbTurnCardData, aryShootCardData, m_cbTurnCardCount, cbShootCardCount);
|
|
|
|
|
|
if (bRet)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pBtnOutCard->setEnabled(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>±<EFBFBD><C2B1><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::updateMultipleText()
|
|
|
|
|
|
{
|
|
|
|
|
|
int nScoreTimes = 1;
|
|
|
|
|
|
for (uint8 i = 0; i < m_cbBombCount; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
nScoreTimes *= 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_PrivateRoomInfo.bGameRuleIdex&eDDZRuleEnum_LimitMultiple8)
|
|
|
|
|
|
{
|
|
|
|
|
|
nScoreTimes = __min(nScoreTimes, 8);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
m_pTxtMultiple->setString(utility::toString<int>(m_cbCallScore*nScoreTimes));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onSubGameSetBaseScore(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
LONG lBaseScore = *(LONG*)pBuffer;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onSubGameEnd(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(wDataSize == sizeof(DDZ_CMD_S_GameConclude));
|
|
|
|
|
|
DDZ_CMD_S_GameConclude* pGameEnd = (DDZ_CMD_S_GameConclude*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
m_bGameStart = false;
|
|
|
|
|
|
|
|
|
|
|
|
m_pBtnReady->setEnabled(true);
|
|
|
|
|
|
m_pBtnReady->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
std::string aryNickName[DDZ_GAME_PLAYER];
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(i);
|
|
|
|
|
|
aryNickName[i] = m_aryPlayer[wViewID]->GetNickName();
|
|
|
|
|
|
|
|
|
|
|
|
m_aryPlayer[wViewID]->killClock();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//if (m_wLandChairID != INVALID_CHAIR)
|
|
|
|
|
|
{
|
|
|
|
|
|
// bool bLandWin = false;
|
|
|
|
|
|
// if (m_wLandChairID != INVALID_CHAIR)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// bLandWin = (pGameEnd->lGameScore[m_wLandChairID]>0);
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
uint16 wMyChairID = getSelfChairID();
|
|
|
|
|
|
if (pGameEnd->lGameScore[wMyChairID] > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
playSoundEffect(DDZ_ST_WIN);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
playSoundEffect(DDZ_ST_LOSE);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int nScoreTimes = 1;
|
|
|
|
|
|
for (uint8 i = 0; i < m_cbBombCount; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
nScoreTimes *= 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_PrivateRoomInfo.bGameRuleIdex&eDDZRuleEnum_LimitMultiple8)
|
|
|
|
|
|
{
|
|
|
|
|
|
nScoreTimes = __min(nScoreTimes, 8);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//m_pResultLayer->show(m_wLandChairID, wMyChairID, aryNickName, pGameEnd->lGameScore, m_cbCallScore, nScoreTimes, m_cbTimeStartGame);
|
|
|
|
|
|
m_pResultLayer->show(m_wLandChairID, wMyChairID, aryNickName, pGameEnd, m_cbTimeStartGame);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::onSubGameTrustee(const void * pBuffer, uint16 wDataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(wDataSize == sizeof(DDZ_CMD_S_Trustee));
|
|
|
|
|
|
DDZ_CMD_S_Trustee* pTrustee = (DDZ_CMD_S_Trustee*)pBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(pTrustee->wTrusteeUser);
|
|
|
|
|
|
m_aryTrustee[wViewID] = (pTrustee->bTrustee>0);
|
|
|
|
|
|
|
|
|
|
|
|
if (DDZ_SELF_VIEW_ID == wViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_aryTrustee[wViewID])
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pPanelTrustee->setVisible(true);
|
|
|
|
|
|
m_pHandCardLayer->downAllCard();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pPanelTrustee->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>״̬<D7B4>ı<EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::OnEventUserStatus(GamePlayer * pPlayer)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ( pPlayer->GetChairID() == getSelfChairID() )
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>ť״̬;
|
|
|
|
|
|
if (pPlayer->GetUserStatus() >= US_READY)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pBtnReady->setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//std::string strIps[DDZ_GAME_PLAYER] = {};
|
|
|
|
|
|
//std::string strNickNames[DDZ_GAME_PLAYER] = {};
|
|
|
|
|
|
//
|
|
|
|
|
|
//// ͬIP<49>ж<EFBFBD>;
|
|
|
|
|
|
//if ((m_PrivateRoomInfo.dwPlayCout <= 0) && !m_PrivateRoomInfo.bStartGame)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// IsSameIp();
|
|
|
|
|
|
//}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ͬIP<49>ж<EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::IsSameIp()
|
|
|
|
|
|
{
|
|
|
|
|
|
std::string strIps[DDZ_GAME_PLAYER] = {};
|
|
|
|
|
|
std::string strNickNames[DDZ_GAME_PLAYER] = {};
|
|
|
|
|
|
|
|
|
|
|
|
// ͬIP<49>ж<EFBFBD>;
|
|
|
|
|
|
for (WORD i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
GamePlayer* pPlayer = getPlayerByChairID(i);
|
|
|
|
|
|
if (pPlayer)
|
|
|
|
|
|
{
|
|
|
|
|
|
strIps[i] = pPlayer->GetLogonIp();
|
|
|
|
|
|
strNickNames[i] = pPlayer->GetNickName();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool bSameIp = false;
|
|
|
|
|
|
for (WORD i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
WORD wNext = (i + 1) % DDZ_GAME_PLAYER;
|
|
|
|
|
|
if ((strIps[i] != "") && (strIps[i] == strIps[wNext]))
|
|
|
|
|
|
{
|
|
|
|
|
|
bSameIp = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (bSameIp)
|
|
|
|
|
|
{
|
|
|
|
|
|
IpTipScene::Instance().show(strNickNames, strIps, DDZ_GAME_PLAYER);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (IpTipScene::Instance().isVisible())
|
|
|
|
|
|
{
|
|
|
|
|
|
IpTipScene::Instance().setVisible(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ҽ<EFBFBD><D2BD>Ҹı<D2B8>;
|
|
|
|
|
|
void DDZGameScene::OnUserScore(GamePlayer* pPlayer)
|
|
|
|
|
|
{
|
|
|
|
|
|
CC_ASSERT(pPlayer!=nullptr);
|
|
|
|
|
|
if (pPlayer == nullptr) return;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(pPlayer->GetTableID() != INVALID_TABLE && pPlayer->GetChairID() != INVALID_CHAIR);
|
|
|
|
|
|
if (pPlayer->GetTableID() == INVALID_TABLE || pPlayer->GetChairID() == INVALID_CHAIR) return;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CC_ASSERT(pPlayer->GetTableID() == getSelfGamePlayer()->GetTableID());
|
|
|
|
|
|
if (pPlayer->GetTableID() != getSelfGamePlayer()->GetTableID()) return;
|
|
|
|
|
|
|
|
|
|
|
|
cocos2d::log(a_u8c("<EFBFBD>û<EFBFBD>%s<><73>score = %d"), pPlayer->GetNickName().c_str(), pPlayer->GetUserScore());
|
|
|
|
|
|
|
|
|
|
|
|
((DDZPlayer*)pPlayer)->updateScore();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
Vec2 DDZGameScene::GetPlayerPosByUserID(uint32 dwUserID)
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZPlayer* pPlayer = (DDZPlayer*)getPlayerByUserID(dwUserID);
|
|
|
|
|
|
|
|
|
|
|
|
if (pPlayer == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Vec2();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const Vec2& ptHeadPos = pPlayer->getHeadPos();
|
|
|
|
|
|
Vec2 ptWorldPos = pPlayer->convertToWorldSpace(ptHeadPos);
|
|
|
|
|
|
|
|
|
|
|
|
return Vec2(ptWorldPos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
GamePlayer* DDZGameScene::CreatePlayer(IClientUserItem * pIClientUserItem)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pIClientUserItem->GetChairID() == INVALID_CHAIR)
|
|
|
|
|
|
{
|
|
|
|
|
|
return NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (pIClientUserItem->GetUserID() == UserInfo::Instance().getUserID())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pLocalPlayer->setUserItem(pIClientUserItem);
|
|
|
|
|
|
return m_pLocalPlayer;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
WORD wViewID = SwitchViewChairID(pIClientUserItem->GetChairID());
|
|
|
|
|
|
CC_ASSERT(wViewID!=INVALID_CHAIR);
|
|
|
|
|
|
DDZPlayer* pPlayer = m_aryPlayer[wViewID];
|
|
|
|
|
|
pPlayer->setUserItem(pIClientUserItem);
|
|
|
|
|
|
return pPlayer;
|
|
|
|
|
|
}
|
|
|
|
|
|
return NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ͼת<CDBC><D7AA>;
|
|
|
|
|
|
WORD DDZGameScene::SwitchViewChairID(WORD wChairID)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>;
|
|
|
|
|
|
if (wChairID == INVALID_CHAIR) return INVALID_CHAIR;
|
|
|
|
|
|
|
|
|
|
|
|
WORD wSelfChairID = getSelfChairID();
|
|
|
|
|
|
if (wSelfChairID == INVALID_CHAIR) return INVALID_CHAIR;
|
|
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
WORD wChairCount = DDZ_GAME_PLAYER;
|
|
|
|
|
|
WORD wViewChairID = (wChairID + wChairCount * 3 / 2 - wSelfChairID) % wChairCount;
|
|
|
|
|
|
|
|
|
|
|
|
return wViewChairID;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD>Ϸ GameFrameBase.cpp<70><70><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::upSelfPlayerInfo()
|
|
|
|
|
|
{
|
|
|
|
|
|
log("Self Enter!!");
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
|
|
|
|
|
|
void DDZGameScene::SendPassCall()
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZ_CMD_C_CallScore call;
|
|
|
|
|
|
call.cbCallScore = 0xFF;
|
|
|
|
|
|
SendSocketData(DDZ_SUB_C_CALL_SCORE, &call, sizeof(DDZ_CMD_C_CallScore));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::moveSendCardSprite(Sprite* pCardSprite, uint16 wViewID, float fDelayTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
float fEndPosX = 0.f, fEndPosY = 0.f;
|
|
|
|
|
|
|
|
|
|
|
|
if (wViewID == DDZ_SELF_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
Node* pHandCardPanel = m_pHandCardLayer->getParent();
|
|
|
|
|
|
CC_ASSERT(pHandCardPanel!=nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
int iHandCardSpace = m_pHandCardLayer->getHandCardSpace(DDZ_NORMAL_COUNT);
|
|
|
|
|
|
int iStartPosX = pHandCardPanel->getPositionX();// -(iHandCardWidth / 2);
|
|
|
|
|
|
|
|
|
|
|
|
fEndPosX = iStartPosX + pCardSprite->getContentSize().width*0.35f + pCardSprite->getTag() / 3 * iHandCardSpace;
|
|
|
|
|
|
fEndPosY = pHandCardPanel->getPositionY() + pHandCardPanel->getContentSize().height / 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
fEndPosX = m_aryPlayer[wViewID]->getCardPos().x;
|
|
|
|
|
|
fEndPosY = m_aryPlayer[wViewID]->getCardPos().y;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//auto pAction = Spawn::create(MoveTo::create(0.2f, Vec2(fEndPosX, fEndPosY)), RotateBy::create(0.2f, 180), nullptr);
|
|
|
|
|
|
auto pAction = MoveTo::create(0.2f, Vec2(fEndPosX, fEndPosY));
|
|
|
|
|
|
|
|
|
|
|
|
auto fnShowAllCard = [=](Node * pNode)
|
|
|
|
|
|
{
|
|
|
|
|
|
pNode->stopAllActions();
|
|
|
|
|
|
|
|
|
|
|
|
m_GameLogic.SortCardList(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID], DDZ_ST_ORDER);
|
|
|
|
|
|
m_pHandCardLayer->redrawHandCard(m_aryHandCardData, m_aryHandCardCount[DDZ_SELF_VIEW_ID]);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>½зְ<D0B7>ť;
|
|
|
|
|
|
updateCallButtons(m_wCurChairID, 255);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
auto callback = [=](Node* pNode)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryHandCardCount[wViewID]++;
|
|
|
|
|
|
m_aryPlayer[wViewID]->setHandCardCount(m_aryHandCardCount[wViewID]);
|
|
|
|
|
|
|
|
|
|
|
|
pNode->removeFromParent();
|
|
|
|
|
|
if (wViewID == DDZ_SELF_VIEW_ID) //<2F><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pHandCardLayer->addSendCard2Panel();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD>ʱ0.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (m_aryHandCardCount[wViewID] == DDZ_NORMAL_COUNT)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->runAction(Sequence::create(DelayTime::create(0.2f), CallFuncN::create(fnShowAllCard), nullptr));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Action* pCardAction = Sequence::create(DelayTime::create(fDelayTime), pAction, CallFuncN::create(callback), nullptr);
|
|
|
|
|
|
pCardSprite->runAction(pCardAction);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ѡ<>ƻص<C6BB>;
|
|
|
|
|
|
void DDZGameScene::selectCardCallback(uint8* arySelCardData, uint8 cbSelCardCount)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>Ч;
|
|
|
|
|
|
playSoundEffect(DDZ_ST_CLICK_CARD);
|
|
|
|
|
|
|
|
|
|
|
|
if ( getSelfChairID()!=m_wCurChairID )
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
checkOutCardButton();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::drawBackCardData()
|
|
|
|
|
|
{
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_BACK_COUNT; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8 cbCardData = m_aryBackCardData[i];
|
|
|
|
|
|
DDZSmallCardSprite* pCardSprite = DDZSmallCardSprite::create(cbCardData);
|
|
|
|
|
|
pCardSprite->ignoreAnchorPointForPosition(false);
|
|
|
|
|
|
pCardSprite->setAnchorPoint(Vec2(0.5f, 0.5f));
|
|
|
|
|
|
pCardSprite->setPosition(29, 33);
|
|
|
|
|
|
pCardSprite->setName(StringUtils::format("BackCardSprite%d", i));
|
|
|
|
|
|
m_pPanelBackCard->addChild(pCardSprite);
|
|
|
|
|
|
pCardSprite->runAction(MoveBy::create(0.4f, Vec2(i * 59, 0)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>;
|
|
|
|
|
|
void DDZGameScene::flipBackCard()
|
|
|
|
|
|
{
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_BACK_COUNT; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
CallFuncN* callback = CallFuncN::create([=](Node* pNode){
|
|
|
|
|
|
DDZSmallCardSprite* pCardSprite = static_cast<DDZSmallCardSprite*>(pNode);
|
|
|
|
|
|
pCardSprite->updateUIData(m_aryBackCardData[i]);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
Node* pBackCard = m_pPanelBackCard->getChildByName(StringUtils::format("BackCardSprite%d", i));
|
|
|
|
|
|
CC_ASSERT(pBackCard!=nullptr);
|
|
|
|
|
|
Action* pAction = Sequence::create(OrbitCamera::create(0.25f, 1, 0, 0, 90, 0, 0), callback, OrbitCamera::create(0.25f, 1, 0, 270, 90, 0, 0), nullptr);
|
|
|
|
|
|
pBackCard->runAction(pAction);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
|
|
|
|
|
|
void DDZGameScene::playAnimate(uint8 cbCardType, uint16 wFromChair, uint16 wToChair)
|
|
|
|
|
|
{
|
|
|
|
|
|
SpriteFrameCache* pSpriteFrameCache = SpriteFrameCache::getInstance();
|
|
|
|
|
|
uint16 wFromViewID = SwitchViewChairID(wFromChair);
|
|
|
|
|
|
uint16 wToViewID = SwitchViewChairID(wToChair);
|
|
|
|
|
|
DDZPlayer* pFromUserItem = (wFromViewID != INVALID_CHAIR)?m_aryPlayer[wFromViewID]:nullptr;
|
|
|
|
|
|
DDZPlayer* pToUserItem = (wToViewID != INVALID_CHAIR) ? m_aryPlayer[wToViewID] : nullptr;
|
|
|
|
|
|
|
|
|
|
|
|
const Size& winSize = Director::getInstance()->getWinSize();
|
|
|
|
|
|
|
|
|
|
|
|
//˳<><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
if (cbCardType == DDZ_CT_SINGLE_LINE)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pFromUserItem!=nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Ani/AniLine.plist");
|
|
|
|
|
|
Sprite* pImgLineAni = Sprite::createWithSpriteFrameName("imgAniLine1.png");
|
|
|
|
|
|
if (wFromViewID == DDZ_LEFT_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgLineAni->setAnchorPoint(Vec2(0.0f, 0.5f));
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (wFromViewID == DDZ_SELF_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgLineAni->setAnchorPoint(Vec2(0.5f, 0.5f));
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (wFromViewID == DDZ_RIGHT_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgLineAni->setAnchorPoint(Vec2(1.0f, 0.5f));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pImgLineAni->setPosition(pFromUserItem->getOutCardPos());
|
|
|
|
|
|
pFromUserItem->addChild(pImgLineAni);
|
|
|
|
|
|
auto pLineAni = Animation::create();
|
|
|
|
|
|
pLineAni->setDelayPerUnit(0.1f);
|
|
|
|
|
|
for (uint8 i = 1; i <= 10; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
SpriteFrame* pSpriteFrame = pSpriteFrameCache->getSpriteFrameByName(StringUtils::format("imgAniLine%d.png", i));
|
|
|
|
|
|
pLineAni->addSpriteFrame(pSpriteFrame);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pImgLineAni->runAction(Sequence::create(Animate::create(pLineAni), RemoveSelf::create(), nullptr));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (cbCardType == DDZ_CT_DOUBLE_LINE) //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pFromUserItem != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Ani/AniDouble.plist");
|
|
|
|
|
|
auto pImgDoubleAni = Sprite::createWithSpriteFrameName("imgAniDouble1.png");
|
|
|
|
|
|
if (wFromViewID == DDZ_LEFT_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgDoubleAni->setAnchorPoint(Vec2(0, 0.5f));
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (wFromViewID == DDZ_SELF_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgDoubleAni->setAnchorPoint(Vec2(0.5f, 0.5f));
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (wFromViewID == DDZ_RIGHT_VIEW_ID)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgDoubleAni->setAnchorPoint(Vec2(1.0f, 0.5f));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pImgDoubleAni->setPosition(pFromUserItem->getOutCardPos());
|
|
|
|
|
|
pFromUserItem->addChild(pImgDoubleAni);
|
|
|
|
|
|
auto pDoubleAni = Animation::create();
|
|
|
|
|
|
pDoubleAni->setDelayPerUnit(0.15f);
|
|
|
|
|
|
for (uint8 i = 1; i <= 9; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
SpriteFrame* pSpriteFrame = pSpriteFrameCache->getSpriteFrameByName(StringUtils::format("imgAniDouble%d.png", i));
|
|
|
|
|
|
pDoubleAni->addSpriteFrame(pSpriteFrame);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pImgDoubleAni->runAction(Sequence::create(Animate::create(pDoubleAni), RemoveSelf::create(), nullptr));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (cbCardType == DDZ_CT_THREE_LINE) //<2F>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Ani/AniPlane.plist");
|
|
|
|
|
|
auto pImgPlaneSprite = Sprite::createWithSpriteFrameName("imgAniPlane1.png");
|
|
|
|
|
|
pImgPlaneSprite->setAnchorPoint(Vec2(1.0f, 0.5f));
|
|
|
|
|
|
pImgPlaneSprite->setPosition(0.0f, winSize.height/2);
|
|
|
|
|
|
m_rootNode->addChild(pImgPlaneSprite);
|
|
|
|
|
|
|
|
|
|
|
|
auto pImgPlaneAni1 = Sprite::createWithSpriteFrameName("imgAniPlane2.png");
|
|
|
|
|
|
pImgPlaneAni1->setPosition(390, 130);
|
|
|
|
|
|
pImgPlaneSprite->addChild(pImgPlaneAni1);
|
|
|
|
|
|
|
|
|
|
|
|
auto pPlaneAni1 = Animation::create();
|
|
|
|
|
|
pPlaneAni1->setDelayPerUnit(0.1f);
|
|
|
|
|
|
pPlaneAni1->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniPlane2.png"));
|
|
|
|
|
|
pPlaneAni1->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniPlane3.png"));
|
|
|
|
|
|
pImgPlaneAni1->runAction(RepeatForever::create(Animate::create(pPlaneAni1)));
|
|
|
|
|
|
|
|
|
|
|
|
auto pImgPlaneAni2 = Sprite::createWithSpriteFrameName("imgAniPlane4.png");
|
|
|
|
|
|
pImgPlaneAni2->setPosition(-55, 150);
|
|
|
|
|
|
pImgPlaneSprite->addChild(pImgPlaneAni2);
|
|
|
|
|
|
|
|
|
|
|
|
auto pPlaneAni2 = Animation::create();
|
|
|
|
|
|
pPlaneAni2->setDelayPerUnit(0.1f);
|
|
|
|
|
|
pPlaneAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniPlane4.png"));
|
|
|
|
|
|
pPlaneAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniPlane5.png"));
|
|
|
|
|
|
pPlaneAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniPlane6.png"));
|
|
|
|
|
|
pImgPlaneAni2->runAction(RepeatForever::create(Animate::create(pPlaneAni2)));
|
|
|
|
|
|
|
|
|
|
|
|
Action* pAction = Sequence::create(MoveBy::create(1.5f, Vec2(winSize.width + 380, 0)), RemoveSelf::create(), nullptr);
|
|
|
|
|
|
pImgPlaneSprite->runAction(pAction);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (cbCardType == DDZ_CT_BOMB_CARD ) //ը<><D5A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
Vec2 ptEndBombPos = Vec2::ZERO;
|
|
|
|
|
|
if (wFromChair == wToChair)
|
|
|
|
|
|
{
|
|
|
|
|
|
ptEndBombPos.x = winSize.width / 2;
|
|
|
|
|
|
ptEndBombPos.y = winSize.height / 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pToUserItem != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
ptEndBombPos = pToUserItem->getHeadPos();
|
|
|
|
|
|
ptEndBombPos = pToUserItem->convertToWorldSpace(ptEndBombPos);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (pFromUserItem != nullptr )
|
|
|
|
|
|
{
|
|
|
|
|
|
pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Ani/AniBomb.plist");
|
|
|
|
|
|
Vec2 ptBeginBombPos = pFromUserItem->getHeadPos();
|
|
|
|
|
|
ptBeginBombPos = pFromUserItem->convertToWorldSpace(ptBeginBombPos);
|
|
|
|
|
|
Sprite* pImgBombAni = Sprite::createWithSpriteFrameName("imgAniBomb1.png");
|
|
|
|
|
|
pImgBombAni->setPosition(ptBeginBombPos);
|
|
|
|
|
|
m_rootNode->addChild(pImgBombAni);
|
|
|
|
|
|
|
|
|
|
|
|
ccBezierConfig tabMovePos = { ptEndBombPos, Vec2(winSize.width / 2, winSize.height / 2), ptBeginBombPos };
|
|
|
|
|
|
EaseSineIn* pMoveAction = EaseSineIn::create(BezierTo::create(0.5f, tabMovePos));
|
|
|
|
|
|
Spawn* pSpawnAction = Spawn::create(RotateBy::create(0.5f, 720), pMoveAction, nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
auto bombFunc = [=](){
|
|
|
|
|
|
if (wFromChair == wToChair)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (i != wFromViewID)
|
|
|
|
|
|
{
|
|
|
|
|
|
Sprite* pImgBombAni2 = Sprite::createWithSpriteFrameName("imgAniBomb15.png");
|
|
|
|
|
|
const Vec2& ptHeadPos = m_aryPlayer[i]->getHeadPos();
|
|
|
|
|
|
pImgBombAni2->setScale(1.4f);
|
|
|
|
|
|
pImgBombAni2->setPositionX(ptHeadPos.x);
|
|
|
|
|
|
pImgBombAni2->setPositionY(ptHeadPos.y + 4);
|
|
|
|
|
|
m_aryPlayer[i]->addChild(pImgBombAni2);
|
|
|
|
|
|
|
|
|
|
|
|
auto pBombAni2 = Animation::create();
|
|
|
|
|
|
pBombAni2->setDelayPerUnit(0.1f);
|
|
|
|
|
|
pBombAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniBomb15.png"));
|
|
|
|
|
|
pBombAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniBomb16.png"));
|
|
|
|
|
|
pBombAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniBomb17.png"));
|
|
|
|
|
|
|
|
|
|
|
|
Action* pAction = Sequence::create(Repeat::create(Animate::create(pBombAni2), 2), RemoveSelf::create(), nullptr);
|
|
|
|
|
|
pImgBombAni2->runAction(pAction);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pToUserItem != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
Sprite* pImgBombAni2 = Sprite::createWithSpriteFrameName("imgAniBomb15.png");
|
|
|
|
|
|
const Vec2& ptHeadPos = pToUserItem->getHeadPos();
|
|
|
|
|
|
pImgBombAni2->setScale(1.4f);
|
|
|
|
|
|
pImgBombAni2->setPositionX(ptHeadPos.x);
|
|
|
|
|
|
pImgBombAni2->setPositionY(ptHeadPos.y + 4);
|
|
|
|
|
|
pToUserItem->addChild(pImgBombAni2);
|
|
|
|
|
|
|
|
|
|
|
|
auto pBombAni2 = Animation::create();
|
|
|
|
|
|
pBombAni2->setDelayPerUnit(0.1f);
|
|
|
|
|
|
pBombAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniBomb15.png"));
|
|
|
|
|
|
pBombAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniBomb16.png"));
|
|
|
|
|
|
pBombAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniBomb17.png"));
|
|
|
|
|
|
|
|
|
|
|
|
Action* pAction = Sequence::create(Repeat::create(Animate::create(pBombAni2), 2), RemoveSelf::create(), nullptr);
|
|
|
|
|
|
pImgBombAni2->runAction(pAction);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
auto callback = [=](){
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_rootNode->runAction(ShakeBy::create(0.5f, Vec2(10, 10)));
|
|
|
|
|
|
Device::vibrate(0.5f);
|
|
|
|
|
|
|
|
|
|
|
|
Sprite* pImgBombAni1 = Sprite::createWithSpriteFrameName("imgAniBomb3.png");
|
|
|
|
|
|
if (wFromChair == wToChair)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgBombAni1->setPosition(ptEndBombPos);
|
|
|
|
|
|
m_rootNode->addChild(pImgBombAni1);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pToUserItem != nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
pImgBombAni1->setPosition(pToUserItem->getHeadPos());
|
|
|
|
|
|
}
|
|
|
|
|
|
pToUserItem->addChild(pImgBombAni1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
auto pBombAni1 = Animation::create();
|
|
|
|
|
|
pBombAni1->setDelayPerUnit(0.1f);
|
|
|
|
|
|
for (uint8 i = 3; i <= 14; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
SpriteFrame* pSpriteFrame = pSpriteFrameCache->getSpriteFrameByName(StringUtils::format("imgAniBomb%d.png", i));
|
|
|
|
|
|
pBombAni1->addSpriteFrame(pSpriteFrame);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Action* pAction = Sequence::create(Animate::create(pBombAni1), RemoveSelf::create(), CallFunc::create(bombFunc), nullptr);
|
|
|
|
|
|
pImgBombAni1->runAction(pAction);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
pImgBombAni->runAction(Sequence::create(pSpawnAction, RemoveSelf::create(), CallFunc::create(callback), nullptr));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (cbCardType == DDZ_CT_MISSILE_CARD) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Ani/AniRocket.plist");
|
|
|
|
|
|
//auto pImgRocketBg = Sprite::createWithSpriteFrameName("imgAniRocket1.png");
|
|
|
|
|
|
//pImgRocketBg->setPosition(winSize.width/2,winSize.height/2);
|
|
|
|
|
|
//pImgRocketBg->setScaleX(winSize.width/pImgRocketBg->getContentSize().width);
|
|
|
|
|
|
//pImgRocketBg->setScaleY(winSize.height/pImgRocketBg->getContentSize().height);
|
|
|
|
|
|
//m_rootNode->addChild(pImgRocketBg);
|
|
|
|
|
|
//pImgRocketBg->runAction(RepeatForever::create(cBlink::create(0.5f,1)));
|
|
|
|
|
|
Sprite* pImgRocketSprite = Sprite::createWithSpriteFrameName("imgAniRocket2.png");
|
|
|
|
|
|
pImgRocketSprite->setAnchorPoint(Vec2(0.5f, 0.0f));
|
|
|
|
|
|
pImgRocketSprite->setPosition(winSize.width / 2, 85);
|
|
|
|
|
|
m_rootNode->addChild(pImgRocketSprite);
|
|
|
|
|
|
|
|
|
|
|
|
Sprite* pImgRocketAni1 = Sprite::createWithSpriteFrameName("imgAniRocket5.png");
|
|
|
|
|
|
pImgRocketAni1->setAnchorPoint(Vec2(0.5f, 1.0f));
|
|
|
|
|
|
pImgRocketAni1->setPosition(177, 85);
|
|
|
|
|
|
pImgRocketSprite->addChild(pImgRocketAni1);
|
|
|
|
|
|
|
|
|
|
|
|
auto pRocketAni1 = Animation::create();
|
|
|
|
|
|
pRocketAni1->setDelayPerUnit(0.1f);
|
|
|
|
|
|
pRocketAni1->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniRocket5.png"));
|
|
|
|
|
|
pRocketAni1->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniRocket6.png"));
|
|
|
|
|
|
pImgRocketAni1->runAction(RepeatForever::create(Animate::create(pRocketAni1)));
|
|
|
|
|
|
|
|
|
|
|
|
Sprite* pImgRocketAni2 = Sprite::createWithSpriteFrameName("imgAniRocket3.png");
|
|
|
|
|
|
pImgRocketAni2->setAnchorPoint(Vec2(0.5f, 1.0f));
|
|
|
|
|
|
pImgRocketAni2->setPosition(177, -30);
|
|
|
|
|
|
pImgRocketSprite->addChild(pImgRocketAni2);
|
|
|
|
|
|
|
|
|
|
|
|
auto pRocketAni2 = Animation::create();
|
|
|
|
|
|
pRocketAni2->setDelayPerUnit(0.1f);
|
|
|
|
|
|
pRocketAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniRocket3.png"));
|
|
|
|
|
|
pRocketAni2->addSpriteFrame(pSpriteFrameCache->getSpriteFrameByName("imgAniRocket4.png"));
|
|
|
|
|
|
pImgRocketAni2->runAction(RepeatForever::create(Animate::create(pRocketAni2)));
|
|
|
|
|
|
|
|
|
|
|
|
auto callback = [=](){
|
|
|
|
|
|
pImgRocketSprite->runAction(Sequence::create(MoveBy::create(1.0f, Vec2(0, winSize.height + 610)), RemoveSelf::create(), nullptr));
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
pImgRocketAni2->runAction(Sequence::create(DelayTime::create(0.5f), RemoveSelf::create(), CallFunc::create(callback), nullptr));
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_rootNode->runAction(ShakeBy::create(0.5f, Vec2(10, 10)));
|
|
|
|
|
|
Device::vibrate(0.5f);
|
|
|
|
|
|
}
|
|
|
|
|
|
//else if (cbCardType == DDZ_RLT_SPRING)//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
//{
|
|
|
|
|
|
// pSpriteFrameCache->addSpriteFramesWithFile("Games/DDZ/Ani/AniSpring.plist");
|
|
|
|
|
|
|
|
|
|
|
|
// auto pSpringNode = CSLoader::createNodeWithVisibleSize("Games/DDZ/Table/SpringAniScene.csb");
|
|
|
|
|
|
// m_rootNode->addChild(pSpringNode);
|
|
|
|
|
|
// auto pMainPanel = pSpringNode->getChildByName("MainPanel");
|
|
|
|
|
|
// auto img9FloweBg = pMainPanel->getChildByName("img9FloweBg");
|
|
|
|
|
|
// img9FloweBg->setScale(0.0f);
|
|
|
|
|
|
// img9FloweBg->stopAllActions();
|
|
|
|
|
|
// img9FloweBg->runAction(ScaleTo::create(0.3f, 1.2f));
|
|
|
|
|
|
// for (uint8 i=1; i<=8; i++)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// auto flower = pMainPanel->getChildByName(StringUtils::format("imgFlower%d", i));
|
|
|
|
|
|
// flower->setOpacity(0);
|
|
|
|
|
|
// flower->runAction(FadeIn::create(0.3f));
|
|
|
|
|
|
|
|
|
|
|
|
// flower->runAction(RepeatForever::create(RotateBy::create(0.5f, 180)));
|
|
|
|
|
|
|
|
|
|
|
|
// auto star = pMainPanel->getChildByName(StringUtils::format("imgStar%d", i));
|
|
|
|
|
|
// star->runAction(RepeatForever::create(Blink::create(0.5f, 1)));
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// pSpringNode->runAction(Sequence::create(DelayTime::create(1.5f), RemoveSelf::create(), nullptr));
|
|
|
|
|
|
//}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DDZGameScene::playSoundEffect(const uint8 cbCardType, uint8 cbSex/*=1*/, const uint8 cbData/*=0*/)
|
|
|
|
|
|
{
|
|
|
|
|
|
CocosDenshion::SimpleAudioEngine* pAudio = CocosDenshion::SimpleAudioEngine::getInstance();
|
|
|
|
|
|
|
|
|
|
|
|
std::string strSoundFile;
|
|
|
|
|
|
|
|
|
|
|
|
if (cbSex > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
cbSex--;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch (cbCardType)
|
|
|
|
|
|
{
|
|
|
|
|
|
case DDZ_CT_SINGLE:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nFlagID = 0;
|
|
|
|
|
|
if (CARD_LITTLE_JOKER == cbData) //С<><D0A1>
|
|
|
|
|
|
{
|
|
|
|
|
|
nFlagID = 14;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (CARD_LITTLE_JOKER == cbData) //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
{
|
|
|
|
|
|
nFlagID = 15;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
nFlagID = m_GameLogic.GetCardValue(cbData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_DANZHANG_FILE, cbSex, nFlagID);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_DOUBLE:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nFlagID = m_GameLogic.GetCardValue(cbData);
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_LIANGZHANG_FILE, cbSex, nFlagID);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_THREE:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_3ZHANG_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_SINGLE_LINE:
|
|
|
|
|
|
{
|
|
|
|
|
|
pAudio->playEffect(DDZ_SHUNZI_EFF_FILE);
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_SHUNZI_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_DOUBLE_LINE:
|
|
|
|
|
|
{
|
|
|
|
|
|
pAudio->playEffect(DDZ_LIANDUI_EFF_FILE);
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_LIANDUI_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_THREE_LINE:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_FEIJI_FILE, cbSex);
|
|
|
|
|
|
pAudio->playEffect(DDZ_FEIJI_EFF_FILE);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_THREE_TAKE_ONE:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_3DAI1_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_THREE_TAKE_TWO:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_3DAI2_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_FOUR_TAKE_ONE:
|
|
|
|
|
|
case DDZ_CT_FOUR_TAKE_TWO:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_4DAI2_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_BOMB_CARD:
|
|
|
|
|
|
{
|
|
|
|
|
|
pAudio->playEffect(DDZ_ZHADAN_EFF_FILE);
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_ZHADAN_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_CT_MISSILE_CARD:
|
|
|
|
|
|
{
|
|
|
|
|
|
pAudio->playEffect(DDZ_HUOJIAN_EFF_FILE);
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_HUOJIAN_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_DEAL_CARD:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = DDZ_FAPAI_EFF_FILE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_PASS:
|
|
|
|
|
|
{
|
|
|
|
|
|
int nSoundID = (rand() % 4) + 1;
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_PASS_FILE, cbSex, nSoundID);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_CALL:
|
|
|
|
|
|
{
|
|
|
|
|
|
if (cbData <= 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_JIAO_FEN_FILE, cbSex, cbData);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_BUJIAO_FILE, cbSex);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_CLICK_CARD:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = DDZ_DIANPAI_EFF_FILE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_OUT_CARD:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = DDZ_CHUPAI_EFF_FILE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_LEFT_ONE_CARD:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = StringUtils::format(DDZ_ZUIHOUYIZHANG_FILE, cbSex);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_WIN:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = DDZ_WIN_EFF_FILE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
case DDZ_ST_LOSE:
|
|
|
|
|
|
{
|
|
|
|
|
|
strSoundFile = DDZ_LOSE_EFF_FILE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CC_ASSERT(!strSoundFile.empty());
|
|
|
|
|
|
pAudio->playEffect(strSoundFile.c_str());
|
|
|
|
|
|
//SimpleAudioEngine::getInstance()->playEffect(fillpath,isRe);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/************************************* <20><><EFBFBD><EFBFBD> ***********************************************************/
|
|
|
|
|
|
// <20><>ס<EFBFBD><D7A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť
|
|
|
|
|
|
void DDZGameScene::OnButtonVoiceTouched(Ref*, Widget::TouchEventType type)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (Widget::TouchEventType::BEGAN == type)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><>ͣ<EFBFBD><CDA3><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CocosDenshion::SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pVoiceNode->isVisible())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pVoiceNode->setVisible(false);
|
|
|
|
|
|
m_pVoiceNode->stopAllActions();
|
|
|
|
|
|
|
|
|
|
|
|
YvVoiceManager::GetInstance()->StopRecord();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pVoiceNode->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>;
|
|
|
|
|
|
auto action = CSLoader::createTimeline("Games/DDZ/VoiceNode.csb");
|
|
|
|
|
|
action->gotoFrameAndPlay(0);
|
|
|
|
|
|
m_pVoiceNode->runAction(action);
|
|
|
|
|
|
|
|
|
|
|
|
YvVoiceManager::GetInstance()->StartRecord();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if ((Widget::TouchEventType::CANCELED == type) || (Widget::TouchEventType::ENDED == type))
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
CocosDenshion::SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
|
|
|
|
|
|
|
|
|
|
|
|
if (!m_pVoiceNode->isVisible())
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pVoiceNode->setVisible(false);
|
|
|
|
|
|
m_pVoiceNode->stopAllActions();
|
|
|
|
|
|
|
|
|
|
|
|
YvVoiceManager::GetInstance()->StopRecord();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/************************************* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ ***********************************************************/
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ϣ
|
|
|
|
|
|
void DDZGameScene::OnSocketSubPrivateRoomInfo(CMD_GF_Private_Room_Info* pNetInfo)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_PrivateRoomInfo = *pNetInfo;
|
|
|
|
|
|
|
|
|
|
|
|
m_dwRoomID = pNetInfo->dwRoomNum;
|
|
|
|
|
|
|
|
|
|
|
|
string strRoomID = StringUtils::format("<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>%d", m_dwRoomID);
|
|
|
|
|
|
m_txtPrivateRoomID->setString(utility::a_u8(strRoomID));
|
|
|
|
|
|
m_txtPrivateRoomID->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
uint32 dwPlayCout = __max(pNetInfo->dwPlayCout+1, 1);
|
|
|
|
|
|
dwPlayCout = __min(dwPlayCout, pNetInfo->dwPlayTotal);
|
|
|
|
|
|
|
|
|
|
|
|
string strPlayCount = StringUtils::format("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%u/%u <20><>", dwPlayCout, pNetInfo->dwPlayTotal);
|
|
|
|
|
|
cocos2d::log("dwPlayCout = %d", pNetInfo->dwPlayCout);
|
|
|
|
|
|
m_txtPrivatePlayCount->setString(utility::a_u8(strPlayCount.c_str()));
|
|
|
|
|
|
m_txtPrivatePlayCount->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
//if (m_PrivateRoomInfo.bGameRuleIdex&eDDZRuleEnum_LimitMultiple8)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// m_txtPrivateMultiple->setString(utility::a_u8("<22>ⶥ<EFBFBD><E2B6A5>8 <20><>"));
|
|
|
|
|
|
// m_txtPrivateMultiple->setVisible(true);
|
|
|
|
|
|
// m_strGameRuleInfo = "8<><38><EFBFBD>ⶥ";
|
|
|
|
|
|
//}
|
|
|
|
|
|
//else if (m_PrivateRoomInfo.bGameRuleIdex&eDDZRuleEnum_NoLimitMultiple)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// m_txtPrivateMultiple->setString(utility::a_u8("<22>ⶥ<EFBFBD><E2B6A5><EFBFBD><EFBFBD><EFBFBD>ⶥ"));
|
|
|
|
|
|
// m_txtPrivateMultiple->setVisible(true);
|
|
|
|
|
|
|
|
|
|
|
|
// m_strGameRuleInfo = "<22><><EFBFBD>ⶥ";
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
if (pNetInfo->bStartGame)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ѿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD><D8A1><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD>䡱<EFBFBD><E4A1B1>ť
|
|
|
|
|
|
m_btnWeiXin->setVisible(false);
|
|
|
|
|
|
m_pBtnLeave->setVisible(false);
|
|
|
|
|
|
m_btnDismissRoom->setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
GamePlayer* pPlayer = getSelfGamePlayer();
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD><D8A1><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD>䡱<EFBFBD><E4A1B1>ť
|
|
|
|
|
|
if (pPlayer != nullptr && pNetInfo->dwCreateUserID == pPlayer->GetUserID())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pBtnLeave->setVisible(false);
|
|
|
|
|
|
m_btnDismissRoom->setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>Ϸδ<CFB7><CEB4>ʼ<EFBFBD><CABC>ʾ<CABE>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>ť
|
|
|
|
|
|
m_btnWeiXin->setVisible(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ˽<>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DDZGameScene::OnSocketSubPrivateEnd(void* data, int dataSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bPrivateEnd = true;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>
|
|
|
|
|
|
DismissScene::Instance().hide();
|
|
|
|
|
|
|
|
|
|
|
|
GamePlayer* players[DDZ_GAME_PLAYER];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
players[i] = getPlayerByChairID(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pPrivateScene)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataStream kDataStream(data, dataSize);
|
|
|
|
|
|
DDZ_CMD_S_Private_End_Info kNetInfo;
|
|
|
|
|
|
kNetInfo.StreamValue(kDataStream, false);
|
|
|
|
|
|
|
|
|
|
|
|
//SCORE lGameGold = m_PrivateRoomInfo.lGameGold*m_PrivateRoomInfo.dwPlayCost;
|
|
|
|
|
|
//m_pPrivateScene->ShowGameResult(&kNetInfo, players, (m_PrivateRoomInfo.cbUnionGoldOpen == 1), lGameGold, m_PrivateRoomInfo.lScoreMultiple);
|
|
|
|
|
|
// <20><><EFBFBD>ֳ<EFBFBD>
|
|
|
|
|
|
if (m_PrivateRoomInfo.cbUnionGoldOpen == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
//SCORE lGameGold = m_PrivateRoomInfo.lGameGold*m_PrivateRoomInfo.dwPlayCost;
|
|
|
|
|
|
//m_pPrivateScene->ShowGameResult(&kNetInfo, players, (m_PrivateRoomInfo.cbUnionGoldOpen == 1), lGameGold, m_PrivateRoomInfo.lScoreMultiple);
|
|
|
|
|
|
m_pPrivateScene->ShowGameResult(&kNetInfo, players, m_PrivateRoomInfo, m_PrivateScoreInfo);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pPrivateScene->ShowGameResult(&kNetInfo, players, m_PrivateRoomInfo.cbBaseScore);
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pResultLayer->SetShowPrivate();
|
|
|
|
|
|
|
|
|
|
|
|
if (m_pResultLayer->isVisible() == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pPrivateScene->pushScene();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DDZGameScene::onEventShowPrivate(cocos2d::EventCustom *event)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_pPrivateScene)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pPrivateScene->pushScene();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DDZGameScene::OnSocketSubPrivateDismissInfo(CMD_GF_Private_Dismiss_Info* pNetInfo)
|
|
|
|
|
|
{
|
|
|
|
|
|
std::string aryName[DDZ_GAME_PLAYER];
|
|
|
|
|
|
BYTE aryResult[DDZ_GAME_PLAYER] = { 0 }; // 0 δѡ<CEB4><D1A1> 1 ͬ<><CDAC> 2 <20><>ͬ<EFBFBD><CDAC>
|
|
|
|
|
|
|
|
|
|
|
|
bool bHasSelf = false;
|
|
|
|
|
|
|
|
|
|
|
|
uint32 dwMyChairID = getSelfChairID();
|
|
|
|
|
|
for (uint32 i = 0; i < pNetInfo->dwDissUserCout; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint32 dwChairID = pNetInfo->dwDissChairID[i];
|
|
|
|
|
|
GamePlayer* pPlayer = getPlayerByChairID(dwChairID);
|
|
|
|
|
|
if (pPlayer != nullptr && dwChairID < DDZ_GAME_PLAYER)
|
|
|
|
|
|
{
|
|
|
|
|
|
aryResult[dwChairID] = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (dwMyChairID == dwChairID)
|
|
|
|
|
|
{
|
|
|
|
|
|
bHasSelf = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (uint32 i = 0; i < pNetInfo->dwNotAgreeUserCout; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint32 dwChairID = pNetInfo->dwNotAgreeChairID[i];
|
|
|
|
|
|
GamePlayer* pPlayer = getPlayerByChairID(dwChairID);
|
|
|
|
|
|
if (pPlayer != nullptr && dwChairID < DDZ_GAME_PLAYER)
|
|
|
|
|
|
{
|
|
|
|
|
|
aryResult[dwChairID] = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (dwMyChairID == dwChairID)
|
|
|
|
|
|
{
|
|
|
|
|
|
bHasSelf = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
GamePlayer* players[DDZ_GAME_PLAYER];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
players[i] = getPlayerByChairID(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DismissScene::Instance().show(aryResult, players, !bHasSelf, DDZ_GAME_PLAYER);
|
|
|
|
|
|
|
|
|
|
|
|
//DismissScene::Instance().show(aryName, aryResult, !bHasSelf);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DDZGameScene::OnSocketSubPrivateDismissResult(CMD_GF_Private_Dismiss_Result* pNetInfo)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pNetInfo->bSuccess && false == m_PrivateRoomInfo.bStartGame)
|
|
|
|
|
|
{
|
|
|
|
|
|
Director::getInstance()->popScene();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
DismissScene::Instance().hide();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////// <20><>Ϸ¼<CFB7><C2BC> //////////////////////////////////////////
|
|
|
|
|
|
// <20><>ʼ¼<CABC><EFBFBD>
|
|
|
|
|
|
void DDZGameScene::StartGameRecord()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_GameRecord.playersVec.size() != DDZ_GAME_PLAYER)
|
|
|
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
|
|
|
|
|
|
OnSocketSubPrivateRoomInfo(&m_GameRecord.roomInfo);
|
|
|
|
|
|
|
|
|
|
|
|
m_iActRecordIdex = 0;
|
|
|
|
|
|
m_txtRecordPercent->setString(utility::toString(m_iActRecordIdex * 100 / m_GameRecord.actionVec.size(), "%"));
|
|
|
|
|
|
|
|
|
|
|
|
schedule(schedule_selector(GameFrameBase::NextRecordAction), m_RecordTime);
|
|
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DDZGameScene::NextRecordAction(float dt)
|
|
|
|
|
|
{
|
|
|
|
|
|
cocos2d::log("NextRecordAction...m_iActRecordIdex = %d", m_iActRecordIdex);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (m_iActRecordIdex >= (int)m_GameRecord.actionVec.size() || !isVisible())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_txtRecordPercent->setString("100%");
|
|
|
|
|
|
m_btnPlay->setVisible(true);
|
|
|
|
|
|
m_btnPause->setVisible(false);
|
|
|
|
|
|
|
|
|
|
|
|
unschedule(schedule_selector(GameFrameBase::NextRecordAction));
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼;
|
|
|
|
|
|
tagGameRecordOperateResult& kAction = m_GameRecord.actionVec[m_iActRecordIdex];
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ϸ<EFBFBD><CFB7>ʼ;
|
|
|
|
|
|
if (kAction.wSubCmdID == DDZ_SUB_S_GAME_START)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_cbTimeOutCard = 15;
|
|
|
|
|
|
m_cbTimeCallScore = 15;
|
|
|
|
|
|
m_cbTimeStartGame = 15;
|
|
|
|
|
|
m_cbTimeHeadOutCard = 15;
|
|
|
|
|
|
|
|
|
|
|
|
m_nCellScore = 1;
|
|
|
|
|
|
m_pTxtBaseScore->setString(utility::toString(m_nCellScore));
|
|
|
|
|
|
|
|
|
|
|
|
DDZ_CMD_Record_GameStart recordStart;
|
|
|
|
|
|
kAction.subMessageData.popValue(&recordStart, sizeof(DDZ_CMD_Record_GameStart));
|
|
|
|
|
|
|
|
|
|
|
|
DDZ_CMD_S_GameStart gameStart;
|
|
|
|
|
|
zeromemory(&gameStart, sizeof(DDZ_CMD_S_GameStart));
|
|
|
|
|
|
gameStart.wStartUser = recordStart.wStartUser;
|
|
|
|
|
|
gameStart.wCurrentUser = recordStart.wCurrentUser;
|
|
|
|
|
|
|
|
|
|
|
|
CC_ASSERT(m_wRecordSelfChairID!=INVALID_CHAIR);
|
|
|
|
|
|
tagGameRecordPlayer& kRecordPlayer = m_GameRecord.playersVec[m_wRecordSelfChairID];
|
|
|
|
|
|
for (int j = 0; j < DDZ_NORMAL_COUNT; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
gameStart.cbCardData[j] = kRecordPlayer.cbCardData[j];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8 i = 0; i < DDZ_GAME_PLAYER; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16 wChairID = (m_wRecordSelfChairID + i) % DDZ_GAME_PLAYER;
|
|
|
|
|
|
uint16 wViewID = SwitchViewChairID(wChairID);
|
|
|
|
|
|
|
|
|
|
|
|
tagGameRecordPlayer& kRecordPlayer2 = m_GameRecord.playersVec[wChairID];
|
|
|
|
|
|
for (int j = 0; j < DDZ_NORMAL_COUNT; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_aryAllHandCardData[wViewID][j] = kRecordPlayer2.cbCardData[j];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
onSubGameStart(&gameStart, sizeof(DDZ_CMD_S_GameStart));
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD>ҽз<D2BD>;
|
|
|
|
|
|
else if (kAction.wSubCmdID == DDZ_SUB_S_CALL_SCORE)
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZ_CMD_S_CallScore callCard;
|
|
|
|
|
|
kAction.subMessageData.popValue(&callCard, sizeof(DDZ_CMD_S_CallScore));
|
|
|
|
|
|
|
|
|
|
|
|
onSubGameCallScore(&callCard, sizeof(DDZ_CMD_S_CallScore));
|
|
|
|
|
|
}
|
|
|
|
|
|
// ȷ<>ϵ<EFBFBD><CFB5><EFBFBD>;
|
|
|
|
|
|
else if (kAction.wSubCmdID == DDZ_SUB_S_BANKER_INFO)
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZ_CMD_S_BankerInfo bankerInfo;
|
|
|
|
|
|
kAction.subMessageData.popValue(&bankerInfo, sizeof(DDZ_CMD_S_BankerInfo));
|
|
|
|
|
|
|
|
|
|
|
|
onSubGameBankerInfo(&bankerInfo, sizeof(DDZ_CMD_S_BankerInfo));
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>;
|
|
|
|
|
|
else if (kAction.wSubCmdID == DDZ_SUB_S_OUT_CARD)
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZ_CMD_S_OutCard outCard;
|
|
|
|
|
|
kAction.subMessageData.popValue(outCard.cbCardCount);
|
|
|
|
|
|
kAction.subMessageData.popValue(outCard.wCurrentUser);
|
|
|
|
|
|
kAction.subMessageData.popValue(outCard.wOutCardUser);
|
|
|
|
|
|
kAction.subMessageData.popValue(outCard.cbCardData, outCard.cbCardCount);
|
|
|
|
|
|
|
|
|
|
|
|
uint16 wHeadSize = sizeof(DDZ_CMD_S_OutCard) - sizeof(outCard.cbCardData);
|
|
|
|
|
|
onSubGameOutCard(&outCard, (wHeadSize + outCard.cbCardCount*sizeof(uint8)));
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
else if (kAction.wSubCmdID == DDZ_SUB_S_PASS_CARD)
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZ_CMD_S_PassCard passCard;
|
|
|
|
|
|
kAction.subMessageData.popValue(&passCard, sizeof(DDZ_CMD_S_PassCard));
|
|
|
|
|
|
onSubGamePassCard(&passCard, sizeof(DDZ_CMD_S_PassCard));
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>;
|
|
|
|
|
|
else if (kAction.wSubCmdID == DDZ_SUB_S_GAME_CONCLUDE)
|
|
|
|
|
|
{
|
|
|
|
|
|
DDZ_CMD_S_GameConclude GameEnd;
|
|
|
|
|
|
kAction.subMessageData.popValue(&GameEnd, sizeof(DDZ_CMD_S_GameConclude));
|
|
|
|
|
|
|
|
|
|
|
|
onSubGameEnd(&GameEnd, sizeof(DDZ_CMD_S_GameConclude));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_iActRecordIdex++;
|
|
|
|
|
|
m_txtRecordPercent->setString(utility::toString(m_iActRecordIdex * 100 / m_GameRecord.actionVec.size(), "%"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::string DDZGameScene::getGameRule(uint32 dwGameRule)
|
|
|
|
|
|
{
|
|
|
|
|
|
std::string strGameRule = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>淨";
|
|
|
|
|
|
return strGameRule;
|
|
|
|
|
|
}
|
|
|
|
|
|
|