Files
wnmj-normal/Classes/Games/DDZ/DDZ_PrivateEndNode.cpp
2026-03-03 13:56:44 +08:00

539 lines
13 KiB
C++

#include "DDZ_PrivateEndNode.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"
#include "GameDefine.h"
#include "ImagicDownManager.h"
#include "JniFun.h"
USING_NS_CC;
using namespace ui;
using namespace std;
#define SETCTRLTEXT(pNode, ctrl, str) \
{ \
Text* pText = (Text*)pNode->getChildByName(ctrl);\
if (pText) pText->setString(str);\
}
DDZPrivateEndNode::DDZPrivateEndNode()
{
m_ImageViewBg = nullptr; // 根节点
m_btnleave = nullptr; // 用户离开
m_btnShow = nullptr; // 分享
zeromemory(m_pPlayNode, sizeof(m_pPlayNode)); // 玩家结束信息
}
DDZPrivateEndNode::~DDZPrivateEndNode()
{
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
if (nullptr == m_pPlayNode[i]) continue;
// 积分列表
auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView");
ASSERT(listScore);
if (listScore)
{
listScore->removeAllItems();
}
}
}
bool DDZPrivateEndNode::init()
{
if (!Node::init()) {
return false;
}
auto rootNode = static_cast<Node*>(CSLoader::createNodeWithVisibleSize("Games/DDZ/PrivateEndScene.csb"));
ASSERT(rootNode != nullptr);
this->addChild(rootNode);
m_ImageViewBg = (ImageView*)rootNode->getChildByName("ImageBg");
ASSERT(m_ImageViewBg != nullptr);
m_txtRoomID = (Text*)m_ImageViewBg->getChildByName("txtRoomID");
ASSERT(m_txtRoomID != nullptr);
m_txtRoomID->setString("");
m_txtTime = (Text*)m_ImageViewBg->getChildByName("txtTime");
ASSERT(m_txtTime != nullptr);
m_txtTime->setString("");
// 离开按钮
m_btnleave = (Button*)m_ImageViewBg->getChildByName("btnClose");
ASSERT(m_btnleave);
m_btnleave->addClickEventListener([=](Ref *pSender){
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(LEAVE_GAME);
});
// 分享
m_btnShow = (Button*)m_ImageViewBg->getChildByName("btnShow");
ASSERT(m_btnShow);
m_btnShow->addClickEventListener([=](Ref *pSender){
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(WEIXIN_SHOW);
});
// 内容
for (WORD i = 0; i < DDZ_GAME_PLAYER; i++)
{
m_pPlayNode[i] = (Layout*)m_ImageViewBg->getChildByName(StringUtils::format("FileNode_%d", i));
ASSERT(m_pPlayNode[i]);
}
return true;
}
void DDZPrivateEndNode::SetRoomID(std::string strRoomID)
{
if (m_txtRoomID != nullptr)
{
m_txtRoomID->setString(strRoomID);
}
}
std::string DDZPrivateEndNode::getcurrTime()
{
struct tm* tm;
time_t timep;
time(&timep);
tm = localtime(&timep);
return StringUtils::format("%02d-%02d-%02d %02d:%02d", 1900+tm->tm_year, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min);
}
//void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER])
void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER],
bool bUnionScore, SCORE lGameGold, SCORE lScoreMultiple)
{
if (pNetInfo == nullptr) return;
// 当前时间;
if (m_txtTime != nullptr)
{
std::string strSystemTime = JniFun::getDataTime();
m_txtTime->setString(strSystemTime);
}
// 寻找大赢家;
SCORE lMaxScore = 0;
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
GamePlayer* pPlayer = players[i];
if (nullptr == pPlayer) continue;
// 找到大赢家;
if (lMaxScore < pNetInfo->lAllScore[i])
{
lMaxScore = pNetInfo->lAllScore[i];
}
}
// 欢乐场计算税收;
SCORE lRevenue = 0;
if (bUnionScore)
{
// 统计大赢家数量;
int iMaxScoreCount = 0;
for (int j = 0; j < DDZ_GAME_PLAYER; j++)
{
if ((lMaxScore > 0) && (pNetInfo->lAllScore[j] == lMaxScore))
{
iMaxScoreCount++;
}
}
if (iMaxScoreCount > 0)
{
// 计算玩家积分;
lRevenue = floor(lGameGold / iMaxScoreCount);
}
}
//SCORE lMaxScore = 0;
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
GamePlayer* pPlayer = players[i];
if (nullptr == pPlayer) continue;
if (nullptr == m_pPlayNode[i]) continue;
// 头像;
Sprite* pHead = (Sprite*)m_pPlayNode[i]->getChildByName("Head");
if (pHead)
{
ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID());
}
SETCTRLTEXT(m_pPlayNode[i], "txtUserName", pPlayer->GetNickName()); // 名称;
SETCTRLTEXT(m_pPlayNode[i], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID;
SETCTRLTEXT(m_pPlayNode[i], "txtAllScore", utility::ScoreToString(pNetInfo->lAllScore[i])); // 总积分;
Sprite* pCreate = (Sprite*)m_pPlayNode[i]->getChildByName("create");
if (pCreate) pCreate->setVisible(0 == i);
// 是不是大赢家;
bool bMaxWinUser = false;
if ((lMaxScore > 0) && (lMaxScore == pNetInfo->lAllScore[i]))
{
bMaxWinUser = true;
}
// 大赢家;
auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win");
if (winicon) winicon->setVisible(bMaxWinUser);
// 欢乐积分;
if (bUnionScore)
{
SCORE lUnionScore = pNetInfo->lAllScore[i] * lScoreMultiple;
if (bMaxWinUser)
{
if (lUnionScore > lRevenue)
{
lUnionScore -= lRevenue;
}
else
{
lUnionScore = 0;
}
}
SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", utility::ScoreToString(lUnionScore)); // 总积分;
}
else
{
SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", ""); // 总积分;
}
// 积分列表;
auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView");
ASSERT(listScore);
if (listScore)
{
// 积分节点;
auto ListItem = (Layout*)m_pPlayNode[i]->getChildByName("Item");
ASSERT(ListItem);
for (int j = 0; j < pNetInfo->cbFinishCout; j++)
{
auto tmp = (Layout*)ListItem->clone();
if (tmp == nullptr)continue;
auto txtTitle = (Text*)tmp->getChildByName("txtTitle");
if (txtTitle)
{
std::string strTitle = StringUtils::format("第%d局", j + 1);
txtTitle->setString(utility::a_u8(strTitle));
}
auto txtScore = (Text*)tmp->getChildByName("txtScore");
if (txtScore)
{
std::string strScore = utility::ScoreToString(pNetInfo->lDetails[i][j]);
txtScore->setString(strScore);
}
listScore->pushBackCustomItem(tmp);
}
ListItem->setVisible(false);
}
}
//// 大赢家;
//if (lMaxScore > 0)
//{
// for (int i = 0; i < DDZ_GAME_PLAYER; i++)
// {
// if (lMaxScore==pNetInfo->lAllScore[i])
// {
// auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win");
// if (winicon)
// {
// winicon->setVisible(true);
// }
// }
// }
//}
this->setVisible(false);
}
void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER],
uint8 cbBaseScore)
{
if (pNetInfo == nullptr) return;
// 当前时间;
if (m_txtTime != nullptr)
{
std::string strSystemTime = JniFun::getDataTime();
m_txtTime->setString(strSystemTime);
}
// 寻找大赢家;
SCORE lMaxScore = 0;
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
GamePlayer* pPlayer = players[i];
if (nullptr == pPlayer) continue;
// 找到大赢家;
if (lMaxScore < pNetInfo->lAllScore[i])
{
lMaxScore = pNetInfo->lAllScore[i];
}
}
//SCORE lMaxScore = 0;
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
GamePlayer* pPlayer = players[i];
if (nullptr == pPlayer) continue;
if (nullptr == m_pPlayNode[i]) continue;
// 头像;
Sprite* pHead = (Sprite*)m_pPlayNode[i]->getChildByName("Head");
if (pHead)
{
ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID());
}
SETCTRLTEXT(m_pPlayNode[i], "txtUserName", pPlayer->GetNickName()); // 名称;
SETCTRLTEXT(m_pPlayNode[i], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID;
SETCTRLTEXT(m_pPlayNode[i], "txtAllScore", utility::ScoreToString(pNetInfo->lAllScore[i])); // 总积分;
SETCTRLTEXT(m_pPlayNode[i], "txtAllUnionScore", ""); // 总积分;
Sprite* pCreate = (Sprite*)m_pPlayNode[i]->getChildByName("create");
if (pCreate) pCreate->setVisible(0 == i);
// 是不是大赢家;
bool bMaxWinUser = false;
if ((lMaxScore > 0) && (lMaxScore == pNetInfo->lAllScore[i]))
{
bMaxWinUser = true;
}
// 大赢家;
auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win");
if (winicon) winicon->setVisible(bMaxWinUser);
// 总积分;
SCORE lUnionScore = pNetInfo->lAllScore[i] * cbBaseScore;
SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", utility::ScoreToString(lUnionScore));
// 积分列表;
auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView");
ASSERT(listScore);
if (listScore)
{
// 积分节点;
auto ListItem = (Layout*)m_pPlayNode[i]->getChildByName("Item");
ASSERT(ListItem);
for (int j = 0; j < pNetInfo->cbFinishCout; j++)
{
auto tmp = (Layout*)ListItem->clone();
if (tmp == nullptr)continue;
auto txtTitle = (Text*)tmp->getChildByName("txtTitle");
if (txtTitle)
{
std::string strTitle = StringUtils::format("第%d局", j + 1);
txtTitle->setString(utility::a_u8(strTitle));
}
auto txtScore = (Text*)tmp->getChildByName("txtScore");
if (txtScore)
{
std::string strScore = utility::ScoreToString(pNetInfo->lDetails[i][j]);
txtScore->setString(strScore);
}
listScore->pushBackCustomItem(tmp);
}
ListItem->setVisible(false);
}
}
//// 大赢家;
//if (lMaxScore > 0)
//{
// for (int i = 0; i < DDZ_GAME_PLAYER; i++)
// {
// if (lMaxScore==pNetInfo->lAllScore[i])
// {
// auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win");
// if (winicon)
// {
// winicon->setVisible(true);
// }
// }
// }
//}
this->setVisible(false);
}
void DDZPrivateEndNode::ShowGameResult(DDZ_CMD_S_Private_End_Info* pNetInfo, GamePlayer* players[DDZ_GAME_PLAYER],
CMD_GF_Private_Room_Info& RoomInfo, CMD_GF_Private_Score_Info& ScoreInfo)
{
if (pNetInfo == nullptr) return;
bool bUnionScore = (RoomInfo.cbUnionGoldOpen == 1);
uint8 cbBaseScore = RoomInfo.cbBaseScore;
SCORE lGameGold = RoomInfo.lGameGold * RoomInfo.dwPlayCost;
// 当前时间;
if (m_txtTime != nullptr)
{
std::string strSystemTime = JniFun::getDataTime();
m_txtTime->setString(strSystemTime);
}
// 寻找大赢家;
SCORE lMaxScore = 0;
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
GamePlayer* pPlayer = players[i];
if (nullptr == pPlayer) continue;
// 找到大赢家;
if (lMaxScore < pNetInfo->lAllScore[i])
{
lMaxScore = pNetInfo->lAllScore[i];
}
}
// 欢乐场计算税收;
SCORE lRevenue = 0;
if (bUnionScore)
{
// 统计大赢家数量;
int iMaxScoreCount = 0;
for (int j = 0; j < DDZ_GAME_PLAYER; j++)
{
if ((lMaxScore > 0) && (pNetInfo->lAllScore[j] == lMaxScore))
{
iMaxScoreCount++;
}
}
if (iMaxScoreCount > 0)
{
// 计算玩家积分;
lRevenue = floor(lGameGold / iMaxScoreCount);
}
}
//SCORE lMaxScore = 0;
for (int i = 0; i < DDZ_GAME_PLAYER; i++)
{
GamePlayer* pPlayer = players[i];
if (nullptr == pPlayer) continue;
if (nullptr == m_pPlayNode[i]) continue;
// 头像;
Sprite* pHead = (Sprite*)m_pPlayNode[i]->getChildByName("Head");
if (pHead)
{
ImagicDownManager::Instance().addDown(pHead, pPlayer->GetHeadHttp(), pPlayer->GetGameID());
}
SETCTRLTEXT(m_pPlayNode[i], "txtUserName", pPlayer->GetNickName()); // 名称;
SETCTRLTEXT(m_pPlayNode[i], "txtGameID", StringUtils::format("ID:%d", pPlayer->GetGameID())); // ID;
SETCTRLTEXT(m_pPlayNode[i], "txtAllScore", utility::ScoreToString(pNetInfo->lAllScore[i])); // 总积分;
Sprite* pCreate = (Sprite*)m_pPlayNode[i]->getChildByName("create");
if (pCreate) pCreate->setVisible(0 == i);
// 是不是大赢家;
bool bMaxWinUser = false;
if ((lMaxScore > 0) && (lMaxScore == pNetInfo->lAllScore[i]))
{
bMaxWinUser = true;
}
// 大赢家;
auto winicon = (Sprite*)m_pPlayNode[i]->getChildByName("win");
if (winicon) winicon->setVisible(bMaxWinUser);
// 欢乐积分;
if (bUnionScore)
{
SCORE lUnionScore = pNetInfo->lAllScore[i] * cbBaseScore;
if (bMaxWinUser)
{
if (lUnionScore > lRevenue)
{
lUnionScore -= lRevenue;
}
else
{
lUnionScore = 0;
}
}
SCORE lAllUnionScore = ScoreInfo.kScoreInfoArray[i] + lUnionScore;
SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", utility::ScoreToString(lUnionScore)); // 总积分;
SETCTRLTEXT(m_pPlayNode[i], "txtAllUnionScore", StringUtils::format("%d", lAllUnionScore)); // 总积分;
}
else
{
SETCTRLTEXT(m_pPlayNode[i], "txtUnionScore", ""); // 总积分;
SETCTRLTEXT(m_pPlayNode[i], "txtAllUnionScore", ""); // 总积分;
}
// 积分列表;
auto listScore = (ListView*)m_pPlayNode[i]->getChildByName("ListView");
ASSERT(listScore);
if (listScore)
{
// 积分节点;
auto ListItem = (Layout*)m_pPlayNode[i]->getChildByName("Item");
ASSERT(ListItem);
for (int j = 0; j < pNetInfo->cbFinishCout; j++)
{
auto tmp = (Layout*)ListItem->clone();
if (tmp == nullptr)continue;
auto txtTitle = (Text*)tmp->getChildByName("txtTitle");
if (txtTitle)
{
std::string strTitle = StringUtils::format("第%d局", j + 1);
txtTitle->setString(utility::a_u8(strTitle));
}
auto txtScore = (Text*)tmp->getChildByName("txtScore");
if (txtScore)
{
std::string strScore = utility::ScoreToString(pNetInfo->lDetails[i][j]);
txtScore->setString(strScore);
}
listScore->pushBackCustomItem(tmp);
}
ListItem->setVisible(false);
}
}
this->setVisible(false);
}
void DDZPrivateEndNode::pushScene()
{
this->setVisible(true);
}
void DDZPrivateEndNode::popScene()
{
this->removeFromParent();
}