123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- //
- // CtlSucessProcess.cpp
- // TileManor
- //
- // Created by 徐炼新 on 2024/1/25.
- //
- #include "IAPSucessProcess.hpp"
- #include "RUQCoreLayer.h"
- #include "RUUtils.h"
- IAPSucessProcess* IAPSucessProcess::create(const GoodsInfo& gi) {
- auto nCP = new IAPSucessProcess();
- nCP->autorelease();
- nCP->retain();
- nCP->init(gi);
- return nCP;
- }
- IAPSucessProcess::IAPSucessProcess() {
-
- }
- IAPSucessProcess::~IAPSucessProcess() {
-
- }
- void IAPSucessProcess::init(const GoodsInfo& gi) {
- _goodsInfo = gi;
- _cntCollecting = 0;
-
- //
- for (int i=0; i<6; i++) {
- NdReward nd;
- _ndsReward.push_back(nd);
- }
-
- // 确定要用到的奖励界面资源
- const char* resName = nullptr;
- if (gi.areas.size() == 1) {
- // 只有金币
- resName = "shop_buy_success_4.redream";
- } else if (gi.areas.size() == 2) {
- // 金币和普通道具(只有数量)
- resName = "shop_buy_success_5.redream";
- } else {
- if (gi.areas[2].size() == 2) {
- // 包含了两个限时奖励
- resName = "shop_buy_success_1.redream";
- } else {
- if (gi.areas[2][0].name.find("life") == 0) {
- resName = "shop_buy_success_3.redream";
- } else {
- resName = "shop_buy_success_2.redream";
- }
- }
- }
-
- // 在当前scene里面创建界面
- auto parent = Director::getInstance()->getRunningScene();
- _layer = redutils::RUReboltLayer::createReboltLayer(resName);
- parent->addChild(_layer);
- _layer->registerOnNotify([this](const redutils::ReboltNotifyData& data){
- onNotifyDevelopment(data);
- });
- _layer->runBehaviacWhitFunName("初始化");
-
- // 设置数量和图片
- setRewardInfo();
-
- // 设置金币
- _reboltMgr4Coin->setCoderDataVar("P-tCoinCnt", _goodsInfo.areas[0][0].count);
- _reboltMgr4Coin->runBehaviacWhitFunName("刷新");
- }
- void IAPSucessProcess::onNotifyDevelopment(const redutils::ReboltNotifyData& data) {
- if (data.notify == "绑定光效1_1") {
- _ndsReward[0].light = data.outNode;
- } else if (data.notify == "绑定图片1_1") {
- _ndsReward[0].reward = data.outNode;
- } else if (data.notify == "绑定数字1_1") {
- _ndsReward[0].lbCnt = data.outNode;
- }
- else if (data.notify == "绑定光效1_2") {
- _ndsReward[1].light = data.outNode;
- } else if (data.notify == "绑定图片1_2") {
- _ndsReward[1].reward = data.outNode;
- } else if (data.notify == "绑定数字1_2") {
- _ndsReward[1].lbCnt = data.outNode;
- }
- else if (data.notify == "绑定光效1_3") {
- _ndsReward[2].light = data.outNode;
- } else if (data.notify == "绑定图片1_3") {
- _ndsReward[2].reward = data.outNode;
- } else if (data.notify == "绑定数字1_3") {
- _ndsReward[2].lbCnt = data.outNode;
- }
- else if (data.notify == "绑定光效1_4") {
- _ndsReward[3].light = data.outNode;
- } else if (data.notify == "绑定图片1_4") {
- _ndsReward[3].reward = data.outNode;
- } else if (data.notify == "绑定数字1_4") {
- _ndsReward[3].lbCnt = data.outNode;
- }
- else if (data.notify == "绑定光效2_2") {
- _ndsReward[4].light = data.outNode;
- } else if (data.notify == "绑定图片2_2") {
- _ndsReward[4].reward = data.outNode;
- } else if (data.notify == "绑定数字2_2") {
- _ndsReward[4].lbCnt = data.outNode;
- }
- else if (data.notify == "绑定光效2_1") {
- // Life
- _ndsReward[5].light = data.outNode;
- } else if (data.notify == "绑定图片2_1") {
- // Life
- _ndsReward[5].reward = data.outNode;
- } else if (data.notify == "绑定数字2_1") {
- // Life
- _ndsReward[5].lbCnt = data.outNode;
- }
- else if (data.notify == "绑定金币节点") {
- _item_coin = data.outNode;
- _reboltMgr4Coin = data.reboltRedManager;
- }
- else if (data.notify == "关闭") {
- if(_cntCollecting > 0) {
- // 正在收集,等待
- } else {
- // 还需要再设置一遍
- setRewardInfo();
- acceptItems();
- }
- }
- }
- void IAPSucessProcess::setRewardInfo() {
- if (_goodsInfo.areas.size() == 1) {
-
- } else if (_goodsInfo.areas.size() >= 2) {
- for (int i=0; i<_goodsInfo.areas[1].size(); i++) {
- auto lbCnt = dynamic_cast<cocos2d::Label*>(_ndsReward[i].lbCnt);
- lbCnt->setString("x"+_goodsInfo.areas[1][i].count);
- // 设置图片
- if (_goodsInfo.areas[1][i].name == "back1") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_1.png");
- } else if (_goodsInfo.areas[1][i].name == "fetchtop3") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_2.png");
- } else if (_goodsInfo.areas[1][i].name == "find3") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_3.png");
- } else if (_goodsInfo.areas[1][i].name == "reroll") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_4.png");
- } else if (_goodsInfo.areas[1][i].name == "plusone") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_5.png");
- } else if (_goodsInfo.areas[1][i].name == "outside_find3") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_3.png");
- } else if (_goodsInfo.areas[1][i].name == "outside_fetchtop3") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_4.png");
- } else if (_goodsInfo.areas[1][i].name == "outside_shell3") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_5.png");
- } else if (_goodsInfo.areas[1][i].name == "outside_claw") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_4.png");
- } else if (_goodsInfo.areas[1][i].name == "outside_master_card") {
- dynamic_cast<cocos2d::Sprite*>(_ndsReward[i].reward)->setSpriteFrame("gmui_prop_5.png");
- }
- }
- if (_ndsReward[5].lbCnt) {
- auto lbCnt = dynamic_cast<cocos2d::Label*>(_ndsReward[5].lbCnt);
- if (_goodsInfo.areas[2].size() > 1) {
- lbCnt->setString(_goodsInfo.areas[2][1].count);
- } else {
- lbCnt->setString(_goodsInfo.areas[2][0].count);
- }
- }
- if (_ndsReward[4].lbCnt) {
- auto lbCnt = dynamic_cast<cocos2d::Label*>(_ndsReward[4].lbCnt);
- lbCnt->setString(_goodsInfo.areas[2][0].count);
- }
- }
- }
- void IAPSucessProcess::acceptItems() {
- // 走到这一步应该不会崩溃了,可以通知外部了
- if (_cbWhileFinished) {
- _cbWhileFinished();
- }
- //
- // // 获取各种奖励的入口节点
- // auto nd4Meta = MapUIController::getInstance()->getNode4MetaGame();
- // auto nd4Life = MapUIController::getInstance()->getLifeNode();
- //
- // // 按照顺序来
- // auto cb4Meta = [=](const ItemInGoods& item) {
- // auto metaSys = SystemManager::getInstance()->getMetaGameSystem();
- // if (item.count.find("h") != std::string::npos) {
- // int hrs = atoi(item.count.substr(0, item.count.size()-1).c_str());
- // metaSys->getSomeReward(item.name, 0, 0, hrs*60);
- // } else if (item.count.find("m") != std::string::npos) {
- // int mins = atoi(item.count.substr(0, item.count.size()-1).c_str());
- // metaSys->getSomeReward(item.name, 0, 0, mins);
- // } else {
- // metaSys->getSomeReward(item.name, 0, atoi(item.count.c_str()));
- // }
- // };
- // auto cb4Life = [=](const ItemInGoods& item) {
- // // 调整数值
- // if (item.count.find("h") != std::string::npos) {
- // int hrs = atoi(item.count.substr(0, item.count.size()-1).c_str());
- // UserDataManager::getInstance()->beginUnlimitedLife(hrs*60);
- // } else if (item.count.find("m") != std::string::npos) {
- // int mins = atoi(item.count.substr(0, item.count.size()-1).c_str());
- // UserDataManager::getInstance()->beginUnlimitedLife(mins);
- // }
- // };
- //
- // float delayIdx = 0;
- // float delayStep = 0.1;
- //
- // // 体力奖励
- // if (_ndsReward[5].reward) {
- // if (_goodsInfo.areas[2].size() > 1) {
- // acceptItem(_ndsReward[5], nd4Life->getNd4Collect(), delayIdx*delayStep, _goodsInfo.areas[2][1], cb4Life);
- // } else {
- // acceptItem(_ndsReward[5], nd4Life->getNd4Collect(), delayIdx*delayStep, _goodsInfo.areas[2][0], cb4Life);
- // }
- // _cntCollecting ++;
- // delayIdx ++;
- // }
- // if (_ndsReward[4].reward) {
- // acceptItem(_ndsReward[4], nd4Meta, delayIdx*delayStep, _goodsInfo.areas[2][0], cb4Meta);
- // delayIdx ++;
- // _cntCollecting ++;
- // }
- //
- // // 道具奖励
- // if (_ndsReward[3].reward) {
- // acceptItem(_ndsReward[3], nd4Meta, delayIdx*delayStep, _goodsInfo.areas[1][3], cb4Meta);
- // delayIdx ++;
- // _cntCollecting ++;
- // }
- // if (_ndsReward[2].reward) {
- // acceptItem(_ndsReward[2], nd4Meta, delayIdx*delayStep, _goodsInfo.areas[1][2], cb4Meta);
- // delayIdx ++;
- // _cntCollecting ++;
- // }
- // if (_ndsReward[1].reward) {
- // acceptItem(_ndsReward[1], nd4Meta, delayIdx*delayStep, _goodsInfo.areas[1][1], cb4Meta);
- // delayIdx ++;
- // _cntCollecting ++;
- // }
- // if (_ndsReward[0].reward) {
- // acceptItem(_ndsReward[0], nd4Meta, delayIdx*delayStep, _goodsInfo.areas[1][0], cb4Meta);
- // delayIdx ++;
- // _cntCollecting ++;
- // }
- // // coin
- // auto pos = _item_coin->getParent()->convertToWorldSpace(_item_coin->getPosition());
- // pos = Director::getInstance()->getRunningScene()->convertToNodeSpace(pos);
- // MapUIUtils::getInstance()->flyCoins(pos, atoi(_goodsInfo.areas[0][0].count.c_str()), [=](){
- // someCollected();
- // });
- // _cntCollecting ++;
- }
- void IAPSucessProcess::acceptItem(NdReward& nr, cocos2d::Node* tar, float delay, const ItemInGoods& iig, std::function<void(const ItemInGoods&)> finished) {
- // 在nd里面加入一个拖尾和例子效果
-
- // 光效渐隐
- {
- auto d = DelayTime::create(delay);
- auto f = FadeOut::create(0.1);
- nr.light->runAction(Sequence::create(d, f, NULL));
- }
-
- // 数字渐隐
- {
- auto d = DelayTime::create(delay);
- auto f = FadeOut::create(0.1);
- nr.lbCnt->runAction(Sequence::create(d, f, NULL));
- }
-
- // 以贝塞尔的方式运动到目标节点
- {
- auto posSrc = nr.reward->getPosition();
- auto posDst = nr.reward->getParent()->convertToNodeSpace(tar->getParent()->convertToWorldSpace(tar->getPosition()));
- cocos2d::ccBezierConfig bc;
- bc.endPosition = posDst;
- bc.controlPoint_1 = posSrc + cocos2d::Vec2(0, posSrc.y < posDst.y ? -200 : 200);
- bc.controlPoint_2 = posDst + cocos2d::Vec2(0, posSrc.y < posDst.y ? -300 : 300);
- float dur = posDst.distance(posSrc) / 100.0 * 0.15;
- auto d = DelayTime::create(delay);
- auto m = EaseIn::create(BezierTo::create(dur, bc), 1.8);
- auto cf = CallFunc::create([=]() {
- // 处理回调
- if (finished) {
- finished(iig);
- }
- someCollected();
- });
- auto f = FadeOut::create(0.05);
- nr.reward->runAction(Sequence::create(d, m, cf, f, NULL));
-
- // 拖尾
- {
- cocos2d::Node* ndParent = nr.reward->getParent();
- auto ndCont = cocos2d::Node::create();
- ndCont->setPosition(nr.reward->getPosition());
- ndCont->setLocalZOrder(nr.reward->getLocalZOrder()-1);
- ndParent->addChild(ndCont);
- redutils::QCoreLayer* efxTail = redutils::QCoreLayer::Layer("efx_shop_tail.redream");
- efxTail->playAnim("init");
- ndCont->addChild(efxTail, 1);
-
- auto cf1 = CallFunc::create([=]() {
- redutils::iterateNode(efxTail, [](cocos2d::Node* nd){
- auto sys = dynamic_cast<cocos2d::ZMLCCParticleSystem*>(nd);
- if (sys) {
- sys->stopSystem();
- }
- });
- });
- ndCont->runAction(Sequence::create(d->clone(), m->clone(), cf1, NULL));
-
- cocos2d::MotionStreak* steak = MotionStreak::create(.1, 3, 80, Color3B::WHITE, "reward_tail.png");
- ndParent->addChild(steak, nr.reward->getLocalZOrder()-2);
- steak->setPosition(nr.reward->getPosition());
- BlendFunc bf = {GL_ONE, GL_ONE};
- steak->setBlendFunc(bf);
- steak->runAction(Sequence::create(d->clone(), m->clone(), NULL));
- }
- }
- }
- void IAPSucessProcess::someCollected() {
- _cntCollecting --;
- if (_cntCollecting == 0) {
- // 收集完成了
- _layer->removeFromParent();
- release();
-
- EventCustom event("EVT_SHOP_SUCCESS");
- event.setUserData((void*)true);
- Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);
- }
- }
|