Files
wnmj/Classes/Games/PDK/PDK_Player.cpp

563 lines
13 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "PDK_Player.h"
#include "ImagicDownManager.h"
#include "PDK_BigCardSprite.h"
#include "PDK_SmallCardSprite.h"
#include "ActionEx.h"
PDKPlayer::PDKPlayer(WORD wViewID, Layout* pRootLayout) :
GamePlayer(NULL), m_bLandlord(false), m_bReady(false), m_cbViewID(wViewID), m_pRootLayout(pRootLayout)
{
init();
}
PDKPlayer::~PDKPlayer()
{
}
bool PDKPlayer::init()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>;
m_pTxtNickName = static_cast<Text*>(m_pRootLayout->getChildByName("nickname"));
CC_ASSERT(m_pTxtNickName!=nullptr);
m_pTxtNickName->setString("");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pTxtUnionName = static_cast<Text*>(m_pRootLayout->getChildByName("txtUnionName"));
CC_ASSERT(m_pTxtUnionName != nullptr);
m_pTxtUnionName->setString("");
//<2F><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>;
auto sprNaoZhong = static_cast<Sprite*>(m_pRootLayout->getChildByName("naozhong"));
CC_ASSERT(sprNaoZhong!=nullptr);
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ʱ;
m_pTxtAtlClock = static_cast<TextAtlas*>(sprNaoZhong->getChildByName("txtAtlTime"));
CC_ASSERT(m_pTxtAtlClock != nullptr);
//ͷ<><CDB7>;
m_pSprHead = static_cast<Sprite*>(m_pRootLayout->getChildByName("head"));
CC_ASSERT(m_pSprHead!=nullptr);
m_pSprHead->setVisible(false);
//<2F><><EFBFBD><EFBFBD>;
m_pTxtScore = static_cast<Text*>(m_pRootLayout->getChildByName("score"));
CC_ASSERT(m_pTxtScore != nullptr);
m_pTxtScore->setVisible(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־;
m_pLandFlag = static_cast<Sprite*>(m_pRootLayout->getChildByName("landlord"));
CC_ASSERT(m_pLandFlag!=nullptr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־;
m_pSprOper = static_cast<Sprite*>(m_pRootLayout->getChildByName("oper"));
CC_ASSERT(m_pSprOper != nullptr);
m_pSprOper->setVisible(false);
//<2F><><EFBFBD>߱<EFBFBD>־;
m_pSprOffline = static_cast<Sprite*>(m_pRootLayout->getChildByName("offline"));
CC_ASSERT(m_pSprOffline != nullptr);
m_pSprOffline->setVisible(false);
//ʣ<><CAA3><EFBFBD><EFBFBD>;
m_pSprSurplusCard = static_cast<Sprite*>(m_pRootLayout->getChildByName("sprSurplusCard"));
CC_ASSERT(m_pSprSurplusCard != nullptr);
//ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>;
m_pTxtAtlSurplus = static_cast<TextAtlas*>(m_pSprSurplusCard->getChildByName("txtAtlSurplus"));
CC_ASSERT(m_pTxtAtlSurplus != nullptr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pPanelOutCard = static_cast<Layout*>(m_pRootLayout->getChildByName("panelOutCard"));
CC_ASSERT(m_pPanelOutCard != nullptr);
//<2F><><EFBFBD><EFBFBD><EFBFBD>򱳾<EFBFBD>;
m_pImgChatView = static_cast<ImageView*>(m_pRootLayout->getChildByName("imgChat"));
CC_ASSERT(m_pImgChatView != nullptr);
m_pImgChatView->setVisible(false);
auto panelChat = static_cast<Layout*>(m_pImgChatView->getChildByName("panelChat"));
CC_ASSERT(panelChat != nullptr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pTxtChatInfo = static_cast<Text*>(panelChat->getChildByName("txtMsg"));
CC_ASSERT(m_pTxtChatInfo != nullptr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pVoiceBubble = static_cast<Node*>(m_pRootLayout->getChildByName("voice"));
CC_ASSERT(m_pVoiceBubble != nullptr);
m_pVoiceBubble->setVisible(false);
auto speek_bg = (Sprite*)m_pVoiceBubble->getChildByName("speek_bg");
CC_ASSERT(speek_bg != nullptr);
m_pSprVoiceAni = (Sprite*)speek_bg->getChildByName("voice_ing");
CC_ASSERT(m_pSprVoiceAni != nullptr);
//<2F><><EFBFBD><EFBFBD>;
m_pHandCardLayout = static_cast<Layout*>(m_pRootLayout->getChildByName("panelHandCard"));
return true;
}
void PDKPlayer::setVisible(bool bShow)
{
m_pRootLayout->setVisible(bShow);
}
void PDKPlayer::PlayerEnter()
{
setInfoVisible(true);
std::string strHttp = GetHeadHttp();
cocos2d::log("%s", strHttp.c_str());
uint32 dwUserID = GetUserID();
ImagicDownManager::Instance().addDown(m_pSprHead, strHttp, dwUserID);
}
void PDKPlayer::PlayerLeave()
{
setInfoVisible(false);
setReadyVisible(false);
setOfflineVisible(false);
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void PDKPlayer::showChatInfo(const std::string strChatString)
{
auto label = Label::createWithSystemFont(strChatString, "", 28);
CC_ASSERT(label != nullptr);
m_pTxtChatInfo->setString(strChatString);
const Size& labelSize = label->getContentSize();
const Size& frameSize = m_pTxtChatInfo->getContentSize();
int nRows = labelSize.width / frameSize.width;
//int nRemainder = (int)labelSize.width % (int)frameSize.width;
//if (nRemainder>0)
//{
// nRows++;
//}
m_pImgChatView->setVisible(true);
m_pTxtChatInfo->setPositionY(28.0f);
auto callback = CallFunc::create([=](){
m_pImgChatView->setVisible(false);
});
//<2F>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>;
if (nRows > 0)
{
auto move = EaseSineInOut::create(MoveBy::create(0.4f, Vec2(0, labelSize.height)));
auto seq = Sequence::create(DelayTime::create(2.5f), move, nullptr);
m_pTxtChatInfo->runAction(Sequence::create(Repeat::create(seq, nRows), DelayTime::create(2.5f), callback, nullptr));
}
else
{
m_pTxtChatInfo->runAction(Sequence::create(DelayTime::create(2.5f), callback, nullptr));
}
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void PDKPlayer::showVoiceBubble()
{
CC_ASSERT(m_pVoiceBubble != nullptr);
m_pVoiceBubble->setVisible(true);
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>;
auto action = CSLoader::createTimeline("Games/DDZ/PlayerVoiceNode.csb");
action->gotoFrameAndPlay(0);
m_pSprVoiceAni->runAction(action);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void PDKPlayer::hideVoiceBubble()
{
CC_ASSERT(m_pVoiceBubble != nullptr);
m_pSprVoiceAni->stopAllActions();
m_pVoiceBubble->setVisible(false);
}
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
void PDKPlayer::resetUI(bool bAll/* = false*/)
{
if ( bAll )
{
setInfoVisible(false);
setReadyVisible(false);
setOfflineVisible(false);
}
//<2F><><EFBFBD><EFBFBD>ʱ
m_pTxtAtlClock->stopAllActions();
m_pTxtAtlClock->setString("");
m_pTxtAtlClock->getParent()->setVisible(false);
//ʣ<><CAA3><EFBFBD><EFBFBD>
m_pTxtAtlSurplus->setString("");
m_pTxtAtlSurplus->getParent()->setVisible(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
m_pLandFlag->setVisible(false);
////<2F><><EFBFBD>߱<EFBFBD>־
//m_pSprOffline->setVisible(false);
if (!m_bReady)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
m_pSprOper->setVisible(false);
}
//ʣ<><CAA3><EFBFBD><EFBFBD>
m_pSprSurplusCard->setVisible(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pPanelOutCard->removeAllChildren();
m_pPanelOutCard->setVisible(false);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
void PDKPlayer::setInfoVisible(bool bVisible)
{
CC_ASSERT(m_pSprHead!=nullptr);
m_pSprHead->setVisible(bVisible);
CC_ASSERT(m_pTxtNickName!=nullptr);
m_pTxtNickName->setString(bVisible?GetNickName():"");
m_pTxtNickName->setVisible(bVisible);
CC_ASSERT(m_pTxtUnionName != nullptr);
m_pTxtUnionName->setString(bVisible ? GetUnionName() : "");
m_pTxtUnionName->setVisible(bVisible);
CC_ASSERT(m_pTxtScore != nullptr);
SCORE lScore = bVisible? GetUserScore() : 0;
m_pTxtScore->setString(utility::toString<SCORE>(lScore));
m_pTxtScore->setVisible(bVisible);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>;
void PDKPlayer::setLand(bool bLandlord)
{
CC_ASSERT(m_pLandFlag!=nullptr);
m_pLandFlag->setVisible(bLandlord);
//if (bLandlord)
//{
// m_pLandFlag->setTexture(PDK_LANDLORD_FLAG_PNG_FILE);
//}
//else
//{
// m_pLandFlag->setTexture(PDK_FARMER_FLAG_PNG_FILE);
//}
}
//<2F><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>״̬;
void PDKPlayer::setReadyVisible(bool bVisible)
{
CC_ASSERT(m_pSprOper != nullptr);
if (bVisible)
{
m_pSprOper->setTexture(PDK_READY_PNG_FILE);
}
m_pSprOper->setVisible(bVisible);
m_bReady = bVisible;
}
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>״̬;
void PDKPlayer::setOfflineVisible(bool bVisible)
{
CC_ASSERT(m_pSprOffline != nullptr);
m_pSprOffline->setVisible(bVisible);
}
//<2F><><EFBFBD>ýз<C3BD>;
void PDKPlayer::setCallVisible(bool bVisible, bool bScore)
{
CC_ASSERT(m_pSprOper != nullptr);
if (bVisible)
{
if (bScore)
{
m_pSprOper->setTexture(PDK_CALL_SCORE_PNG_FILE);
}
else
{
m_pSprOper->setTexture(PDK_PASS_SCORE_PNG_FILE);
}
}
m_pSprOper->setVisible(bVisible);
}
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>;
void PDKPlayer::setPassVisible(bool bVisible)
{
CC_ASSERT(m_pSprOper != nullptr);
if (bVisible)
{
m_pSprOper->setTexture(PDK_PASS_CARD_PNG_FILE);
}
m_pSprOper->setVisible(bVisible);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD><D2B4><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>;
void PDKPlayer::setOutCardData(uint8* pData, uint8 cbCount, bool bDelCard /*= false*/)
{
//CC_ASSERT(m_pPanelOutCard != nullptr);
//if (pData == nullptr)
//{
// m_pPanelOutCard->setVisible(false);
//}
//else
//{
// m_pPanelOutCard->setVisible(true);
//}
//
//int iStartPosX = 0;
//int iCardWidth = PDK_BIG_CARD_WIDTH*0.5 + (cbCount - 1) * 25;
//if (m_cbViewID == PDK_SELF_VIEW_ID)
//{
// iStartPosX = (m_pPanelOutCard->getContentSize().width - iCardWidth) / 2;
//}
//else if (m_cbViewID == PDK_RIGHT_VIEW_ID)
//{
// iStartPosX = m_pPanelOutCard->getContentSize().width - iCardWidth;
//}
//
//m_pPanelOutCard->removeAllChildren();
//for (uint8 i = 0; i < cbCount; i++)
//{
// bool bLordSign = false;
// if ((i + 1) == cbCount && m_bLandlord)
// {
// bLordSign = true;
// }
//
// PDKBigCardSprite* pOutCardSprite = PDKBigCardSprite::create(pData[i], bLordSign);
// pOutCardSprite->setScale(0.5);
// pOutCardSprite->setPosition(iStartPosX + 25 * i, 1.5);
// m_pPanelOutCard->addChild(pOutCardSprite);
//}
CC_ASSERT(m_pPanelOutCard != nullptr);
if (pData == nullptr)
{
m_pPanelOutCard->setVisible(false);
}
else
{
m_pPanelOutCard->setVisible(true);
}
int iStartPosX = 0;
int iCardWidth = PDK_BIG_CARD_WIDTH*0.5f + (cbCount - 1) * 25;
if (m_cbViewID == PDK_SELF_VIEW_ID)
{
iStartPosX = (m_pPanelOutCard->getContentSize().width - iCardWidth) / 2;
}
else if (m_cbViewID == PDK_RIGHT_VIEW_ID)
{
iStartPosX = m_pPanelOutCard->getContentSize().width - iCardWidth;
}
m_pPanelOutCard->removeAllChildren();
for (uint8 i = 0; i < cbCount; i++)
{
bool bLordSign = false;
if ((i + 1) == cbCount && m_bLandlord)
{
bLordSign = true;
}
PDKBigCardSprite* pOutCardSprite = PDKBigCardSprite::create(pData[i], bLordSign);
pOutCardSprite->setScale(0.5f);
pOutCardSprite->setPositionX(iStartPosX);
m_pPanelOutCard->addChild(pOutCardSprite);
if (i > 0)
{
pOutCardSprite->runAction(MoveBy::create(0.4f, Vec2(25 * i, 0)));
}
else if (bDelCard && (i == 0))
{
pOutCardSprite->runAction(Sequence::createWithTwoActions(DelayTime::create(2.0f), RemoveSelf::create()));
}
}
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʱ;
void PDKPlayer::showClock(uint16 wSeconds, const std::function<void()>& callback/* = nullptr*/)
{
CC_ASSERT(m_pTxtAtlClock!=nullptr);
Node* pNode = m_pTxtAtlClock->getParent();
CC_ASSERT(pNode!=nullptr);
if (!(pNode->isVisible()))
{
pNode->setVisible(true);
}
m_pTxtAtlClock->setVisible(true);
m_pTxtAtlClock->stopAllActions();
if (callback)
{
m_pTxtAtlClock->runAction(cocos2d::MoveExTxtTimeCallBack::create(wSeconds, wSeconds, 0, callback, 0));
}
else
{
m_pTxtAtlClock->runAction(cocos2d::MoveExTxtTime::create(wSeconds));
}
float fDelayTime = 0.1f;
if (wSeconds > 3)
{
fDelayTime = wSeconds - 3;
}
auto rotCallFunc = CallFuncN::create([=](Node* target){
float fTime = 0.05f;
RotateTo* rotate1 = RotateTo::create(fTime, 10);
RotateTo* rerotate1 = RotateTo::create(fTime, 0);
RotateTo* rotate2 = RotateTo::create(fTime, -10);
RepeatForever* actForever = RepeatForever::create(Sequence::create(rotate1, rerotate1, rotate2, rerotate1, nullptr));
target->runAction(actForever);
});
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD>;
pNode->setRotation(0);
pNode->runAction(Sequence::create(DelayTime::create(fDelayTime), rotCallFunc, nullptr));
}
//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ʱ;
void PDKPlayer::killClock()
{
CC_ASSERT(m_pTxtAtlClock != nullptr);
Node* pNode = m_pTxtAtlClock->getParent();
CC_ASSERT(pNode != nullptr);
pNode->stopAllActions();
pNode->setVisible(false);
m_pTxtAtlClock->stopAllActions();
m_pTxtAtlClock->setVisible(false);
}
//<2F><><EFBFBD>»<EFBFBD><C2BB><EFBFBD>;
void PDKPlayer::updateScore()
{
CC_ASSERT(m_pTxtScore != nullptr);
SCORE lScore = GetUserScore();
m_pTxtScore->setString(utility::toString<SCORE>(lScore));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void PDKPlayer::setHandCardCount(uint8 cbCount)
{
CC_ASSERT(m_pSprSurplusCard != nullptr);
if ( !m_pSprSurplusCard->isVisible() )
{
m_pSprSurplusCard->setVisible(true);
}
m_pTxtAtlSurplus->setVisible(true);
m_pTxtAtlSurplus->setString(utility::toString<short>(cbCount));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void PDKPlayer::setHandCardData(uint8* pData, uint8 cbCount)
{
if (m_pHandCardLayout != nullptr)
{
m_pHandCardLayout->removeAllChildren();
int nPosY = m_pHandCardLayout->getContentSize().height;
for (uint8 i = 0; i < cbCount; i++)
{
PDKSmallCardSprite* pCardSprite = PDKSmallCardSprite::create(pData[i]);
pCardSprite->setPositionY(nPosY - i * 21 - PDK_SMALL_CARD_HEIGHT);
pCardSprite->setLocalZOrder(i);
m_pHandCardLayout->addChild(pCardSprite);
}
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
const Vec2 PDKPlayer::getCardPos()
{
CC_ASSERT(m_pSprSurplusCard!=nullptr);
return m_pSprSurplusCard->getPosition() + m_pRootLayout->getPosition();
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
const Vec2& PDKPlayer::getOutCardPos()
{
CC_ASSERT(m_pPanelOutCard != nullptr);
return m_pPanelOutCard->getPosition();
}
//<2F><>ȡͷ<C8A1><CDB7>λ<EFBFBD><CEBB>
const Vec2& PDKPlayer::getHeadPos()
{
CC_ASSERT(m_pSprHead!=nullptr);
return m_pSprHead->getPosition();
}
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
Vec2 PDKPlayer::convertToWorldSpace(const Vec2& nodePoint) const
{
CC_ASSERT(m_pRootLayout != nullptr);
return m_pRootLayout->convertToWorldSpace(nodePoint);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
void PDKPlayer::addChild(Node* pNode)
{
CC_ASSERT(m_pRootLayout != nullptr);
m_pRootLayout->addChild(pNode);
}
void PDKPlayer::upPlayerState()
{
//״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>û<EFBFBD>
uint8 cbUserStatus = GetUserStatus();
switch (cbUserStatus)
{
case US_SIT:
{
break;
}
case US_READY:
{
setReadyVisible(true);
break;
}
case US_PLAYING:
{
setReadyVisible(false);
setOfflineVisible(false);
break;
}
case US_OFFLINE:
{
setOfflineVisible(true);
break;
}
default:
break;
}
}