Files
wnmj-normal/Classes/Scenes/JoinScene.cpp
2026-03-03 13:56:44 +08:00

239 lines
4.5 KiB
C++

#include "JoinScene.h"
#include "Define.h"
#include "Utility.h"
JoinScene::JoinScene()
{
memset(m_cbRoomID, 0xff, sizeof(m_cbRoomID));
memset(m_SpriteNum, 0x0, sizeof(m_SpriteNum));
memset(m_btnNum, 0x0, sizeof(m_btnNum));
m_isJoinRoom = true;
}
JoinScene::~JoinScene()
{
}
bool JoinScene::init()
{
if (!Node::init())
{
return false;
};
auto rootPanel = CSLoader::createNode("Platform/JoinScene.csb");
CC_ASSERT(rootPanel != nullptr);
this->addChild(rootPanel);
m_ImageViewBg = (ImageView*)rootPanel->getChildByName("Imagebg");
CC_ASSERT(nullptr != m_ImageViewBg);
//获取关闭按钮
auto btnClose = (Button*)m_ImageViewBg->getChildByName("btnClose");
CC_ASSERT(btnClose != nullptr);
//注册关闭按钮事件
btnClose->addClickEventListener([this](Ref*){
//this->removeFromParent();
YSAudioEngine::Instance().playBtnClickEffect();
this->popScene();
});
m_txtTitle = (Text*)m_ImageViewBg->getChildByName("txtTitle");
CC_ASSERT(m_txtTitle != nullptr);
InitUI(m_ImageViewBg);
return true;
}
void JoinScene::onEnter()
{
Node::onEnter();
}
void JoinScene::onEnterTransitionDidFinish()
{
Node::onEnterTransitionDidFinish();
}
void JoinScene::onExit()
{
Node::onExit();
}
// UI初始化
void JoinScene::InitUI(Node* rootPanel)
{
if (nullptr == rootPanel) return;
for (int i = 0; i < 6; i++)
{
std::string strKey = __String::createWithFormat("txtNum_%d", i)->getCString();
m_SpriteNum[i] = (Text*)rootPanel->getChildByName(strKey);
CC_ASSERT(m_SpriteNum[i]);
if (nullptr == m_SpriteNum[i]) continue;
m_SpriteNum[i]->setString("");
}
for (int j = 0; j < 10; j++)
{
std::string strKey = __String::createWithFormat("btn_num_%d", j)->getCString();
m_btnNum[j] = (Button*)rootPanel->getChildByName(strKey);
CC_ASSERT(m_btnNum[j] != nullptr);
m_btnNum[j]->addClickEventListener(CC_CALLBACK_1(JoinScene::onClickNumber, this));
}
// 删除
auto btnDel = (Button*)rootPanel->getChildByName("btn_del");
CC_ASSERT(btnDel != nullptr);
btnDel->addClickEventListener([this](Ref* obj){
YSAudioEngine::Instance().playBtnClickEffect();
for (int k = 5; k >= 0; k--)
{
if (m_cbRoomID[k] != 0xff)
{
m_cbRoomID[k] = 0xff;
m_SpriteNum[k]->setString("");
break;
}
}
});
// 清空
auto btnC = (Button*)rootPanel->getChildByName("btn_C");
CC_ASSERT(btnC != nullptr);
btnC->addClickEventListener([this](Ref* pSender){
YSAudioEngine::Instance().playBtnClickEffect();
for (int k = 5; k >= 0; k--)
{
m_cbRoomID[k] = 0xff;
m_SpriteNum[k]->setString("");
}
});
}
void JoinScene::onClickNumber(Ref* obj)
{
YSAudioEngine::Instance().playBtnClickEffect();
int num = 0xff;
// 查找按钮数字
for (int i = 0; i < 10; i++)
{
if (obj == m_btnNum[i])
{
num = i;
break;
}
}
if (0xff == num) return;
for (int k = 0; k < 6; k++)
{
if (m_cbRoomID[k] == 0xff)
{
m_cbRoomID[k] = num;
// 修改图片
std::string strKey = __String::createWithFormat("%d", num)->getCString();
m_SpriteNum[k]->setString(strKey);
break;
}
}
// 已经输入六位
if (m_cbRoomID[5] != 0xff)
{
auto dispatcher = Director::getInstance()->getEventDispatcher();
int iRoomID = 0;
int iCarry[6] = { 100000, 10000, 1000, 100, 10, 1 }; // 进位
for (int i = 0; i < 6; i++)
{
int num = 0;
if (0xff != m_cbRoomID[i])
{
num = m_cbRoomID[i];
}
iRoomID += num * iCarry[i];
}
__Integer* pnNum = __Integer::create(iRoomID);
if (m_isJoinRoom)
{
EventCustom event(JOIN_PRIVATE_ROOM_EVENT);
event.setUserData(pnNum);
dispatcher->dispatchEvent(&event);
}
else
{
EventCustom event(INPUT_UNION_ID);
event.setUserData(pnNum);
dispatcher->dispatchEvent(&event);
}
}
return;
}
void JoinScene::pushScene(bool isJoinRoom /*= true*/)
{
if (m_ImageViewBg)
{
m_isJoinRoom = isJoinRoom;
if (m_isJoinRoom)
{
m_txtTitle->setString(utility::a_u8("请输入6位房间号"));
}
else
{
m_txtTitle->setString(utility::a_u8("请输入公会码"));
}
for (int k = 5; k >= 0; k--)
{
m_cbRoomID[k] = 0xff;
m_SpriteNum[k]->setString("");
}
this->setVisible(true);
m_ImageViewBg->setScale(0.8f);
m_ImageViewBg->runAction(Sequence::create(Show::create(), ScaleTo::create(0.2f, 1.2f), ScaleTo::create(0.1f, 1.f), nullptr));
}
}
void JoinScene::popScene()
{
if (m_ImageViewBg)
{
m_ImageViewBg->runAction(Sequence::create(Hide::create(), ScaleTo::create(0.1f, 0.1f), CallFunc::create([&]()
{
for (int k = 5; k >= 0; k--)
{
m_cbRoomID[k] = 0xff;
m_SpriteNum[k]->setString("");
}
this->setVisible(false);
}), nullptr));
}
}