Files
wnmj/Classes/Games/WNMJ/WN_GamePlayer.cpp

392 lines
8.8 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "WN_GamePlayer.h"
#include "ImagicDownManager.h"
#include "ActionEx.h"
#include "GameMission.h"
using namespace WNMJ_SPACE;
WNGamePlayer::WNGamePlayer(WORD wViewID, Node* pRootLayout, Sprite* pReady) :
GamePlayer(NULL), m_cbViewID(wViewID), m_pRootLayout(pRootLayout), m_pSprOper(pReady)
{
m_bReady = false;
m_UnionScore = 0;
m_isAllowLeave = false;
init();
m_pRootLayout->setVisible(false);
}
WNGamePlayer::~WNGamePlayer()
{
m_pRootLayout->setVisible(false);
}
bool WNGamePlayer::init()
{
//<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><EFBFBD><EFBFBD>ʾ;
auto btnNode = (Button*)m_pRootLayout->getChildByName("btnNode");
ASSERT(btnNode != nullptr);
//<2F>dz<EFBFBD>;
m_pTxtNickName = static_cast<Text*>(btnNode->getChildByName("txtNickName"));
CC_ASSERT(m_pTxtNickName != nullptr);
m_pTxtNickName->setString("");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
m_pTxtUnionName = static_cast<Text*>(btnNode->getChildByName("txtUnionName"));
CC_ASSERT(m_pTxtUnionName != nullptr);
m_pTxtUnionName->setString("");
//<2F><><EFBFBD><EFBFBD>;
m_pTxtExp = static_cast<Text*>(btnNode->getChildByName("txtExp"));
CC_ASSERT(m_pTxtExp != nullptr);
m_pTxtExp->setString("");
//<2F><><EFBFBD><EFBFBD>;
m_pTxtScore = static_cast<Text*>(btnNode->getChildByName("txtGold"));
CC_ASSERT(m_pTxtScore != nullptr);
m_pTxtScore->setString("");
//ͷ<><CDB7>;
m_pSprHead = static_cast<Sprite*>(btnNode->getChildByName("face"));
CC_ASSERT(m_pSprHead != nullptr);
//<2F><><EFBFBD>߱<EFBFBD>־;
m_pSprOffline = static_cast<Sprite*>(btnNode->getChildByName("off_line"));
CC_ASSERT(m_pSprOffline != nullptr);
m_pSprOffline->setVisible(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־;
m_pSprOwner = static_cast<Sprite*>(btnNode->getChildByName("create"));
CC_ASSERT(m_pSprOwner != nullptr);
m_pSprOwner->setVisible(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־;
m_pSpZhuang = static_cast<Sprite*>(btnNode->getChildByName("BankerFlag"));
CC_ASSERT(m_pSpZhuang != nullptr);
m_pSpZhuang->setVisible(false);
return true;
}
void WNGamePlayer::setVisible(bool bShow)
{
m_pRootLayout->setVisible(bShow);
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ;
void WNGamePlayer::showUserInfo()
{
std::string strNickName = CGlobalUserInfo::GetInstance()->getNickName();
std::string strHeadHttp = CGlobalUserInfo::GetInstance()->getHeadHttp();
uint32 dwUserID = CGlobalUserInfo::GetInstance()->getUserID();
SCORE lScore = CGlobalUserInfo::GetInstance()->getUserScore();
CC_ASSERT(m_pSprHead != nullptr);
ImagicDownManager::Instance().addDown(m_pSprHead, strHeadHttp, dwUserID);
m_pSprHead->setVisible(true);
CC_ASSERT(m_pTxtNickName != nullptr);
m_pTxtNickName->setString(strNickName);
m_pTxtNickName->setVisible(true);
CC_ASSERT(m_pTxtScore != nullptr);
m_pTxtScore->setString(utility::toString<SCORE>(lScore));
m_pTxtScore->setVisible(true);
}
// <20><><EFBFBD><EFBFBD>;
void WNGamePlayer::PlayerEnter()
{
setInfoVisible(true);
std::string strHttp = GetHeadHttp();
cocos2d::log("%s", strHttp.c_str());
uint32 dwUserID = GetUserID();
ImagicDownManager::Instance().addDown(m_pSprHead, strHttp, dwUserID);
m_pRootLayout->setVisible(true);
}
// <20>뿪;
void WNGamePlayer::PlayerLeave()
{
if (m_isAllowLeave)
{
setInfoVisible(false);
setReadyVisible(false);
setOfflineVisible(false);
setZhuangVisible(false);
m_pRootLayout->setVisible(false);
}
}
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void WNGamePlayer::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;
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 WNGamePlayer::showVoiceBubble()
{
CC_ASSERT(m_pVoiceBubble != nullptr);
m_pVoiceBubble->setVisible(true);
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>;
auto action = CSLoader::createTimeline("Games/WNMJ/PlayerVoiceNode.csb");
action->gotoFrameAndPlay(0);
m_pSprVoiceAni->runAction(action);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
void WNGamePlayer::hideVoiceBubble()
{
CC_ASSERT(m_pVoiceBubble != nullptr);
m_pSprVoiceAni->stopAllActions();
m_pVoiceBubble->setVisible(false);
}
//<2F><><EFBFBD><EFBFBD>״̬;
void WNGamePlayer::upPlayerState()
{
//״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>û<EFBFBD>;
uint8 cbUserStatus = GetUserStatus();
switch (cbUserStatus)
{
case US_SIT:
{
break;
}
case US_READY:
case US_CAN_READY:
{
setReadyVisible(true);
setOfflineVisible(false);
break;
}
case US_PLAYING:
{
setReadyVisible(false);
setOfflineVisible(false);
break;
}
case US_OFFLINE:
{
setOfflineVisible(true);
break;
}
default:
break;
}
}
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>;
void WNGamePlayer::resetUI(bool bAll/* = false*/)
{
if (bAll)
{
setInfoVisible(false);
setReadyVisible(false);
setOfflineVisible(false);
setRoomCreate(false);
}
setZhuangVisible(false);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־;
if (!m_bReady)
{
m_pSprOper->setVisible(false);
}
setTrustVisible(false);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>;
void WNGamePlayer::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_pTxtScore != nullptr);
SCORE lScore = bVisible ? GetUserScore() : 0;
m_pTxtScore->setString(utility::toString<SCORE>(lScore));
m_pTxtScore->setVisible(bVisible);
CC_ASSERT(m_pTxtUnionName != nullptr);
m_pTxtUnionName->setString(bVisible ? GetUnionName() : "");
m_pTxtUnionName->setVisible(bVisible);
CC_ASSERT(m_pTxtExp != nullptr);
std::string strExp = utility::GetUserLevel(GetUserGrade());
m_pTxtExp->setString(bVisible ? utility::a_u8(strExp) : "");
m_pTxtExp->setVisible(bVisible);
}
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>״̬;
void WNGamePlayer::setRoomCreate(bool bVisible)
{
CC_ASSERT(m_pSprOwner != nullptr);
m_pSprOwner->setVisible(bVisible);
}
//<2F><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>״̬;
void WNGamePlayer::setZhuangVisible(bool bVisible)
{
CC_ASSERT(m_pSpZhuang != nullptr);
m_pSpZhuang->setVisible(bVisible);
}
//<2F><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>״̬;
void WNGamePlayer::setReadyVisible(bool bVisible)
{
CC_ASSERT(m_pSprOper != nullptr);
m_pSprOper->setVisible(bVisible);
m_bReady = bVisible;
}
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>״̬;
void WNGamePlayer::setOfflineVisible(bool bVisible)
{
CC_ASSERT(m_pSprOffline != nullptr);
m_pSprOffline->setVisible(bVisible);
}
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>־״̬;
void WNGamePlayer::setOwnerVisible(bool bVisible)
{
CC_ASSERT(m_pSprOwner != nullptr);
m_pSprOwner->setVisible(bVisible);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>״̬;
void WNGamePlayer::setTrustVisible(bool bVisible)
{
//CC_ASSERT(m_pSprTrust != nullptr);
//if (m_pSprTrust)
//{
// m_pSprTrust->setVisible(bVisible);
//}
}
//<2F><><EFBFBD>»<EFBFBD><C2BB><EFBFBD>;
void WNGamePlayer::updateScore()
{
CC_ASSERT(m_pTxtScore != nullptr);
SCORE lScore = GetUserScore();
if (m_isAllowLeave)
{
lScore = GetUserScore() + m_UnionScore;
}
m_pTxtScore->setString(utility::toString<SCORE>(lScore));
}
//<2F><><EFBFBD>û<EFBFBD><C3BB>ֻ<EFBFBD><D6BB><EFBFBD>
void WNGamePlayer::setUnionScore(SCORE lscore)
{
m_UnionScore = lscore;
m_isAllowLeave = true;
updateScore();
}
//<2F><>ȡͷ<C8A1><CDB7>λ<EFBFBD><CEBB>;
Vec2 WNGamePlayer::getHeadPos()
{
CC_ASSERT(m_pSprHead != nullptr);
const Size& size = m_pSprHead->getContentSize();
return m_pSprHead->convertToWorldSpace(Vec2(size.width/2, size.height/2));
}
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ;
Vec2 WNGamePlayer::convertToWorldSpace(const Vec2& nodePoint) const
{
CC_ASSERT(m_pRootLayout != nullptr);
return m_pRootLayout->convertToWorldSpace(nodePoint);
}
//<2F><>ȡ׼<C8A1><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
Vec2 WNGamePlayer::getReadyWorldPos()
{
return convertToWorldSpace(m_pSprOper->getPosition());
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>;
void WNGamePlayer::addChild(Node* pNode)
{
CC_ASSERT(m_pRootLayout != nullptr);
m_pRootLayout->addChild(pNode);
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
Texture2D* WNGamePlayer::GetTextureHead()
{
if (m_pSprHead == nullptr) return nullptr;
return m_pSprHead->getTexture();
}