PurchaseBannerCell.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // PurchaseBannerCell.cpp
  3. // merge6
  4. //
  5. // Created by Black Homles on 2024/9/23.
  6. //
  7. #include "PurchaseBannerCell.hpp"
  8. PurchaseBannerCell* PurchaseBannerCell::create(string bName) {
  9. PurchaseBannerCell* ret = new (std::nothrow) PurchaseBannerCell();
  10. if (ret && ret->init()) {
  11. ret->autorelease();
  12. } else {
  13. CC_SAFE_DELETE(ret);
  14. }
  15. if (bName.empty()) {
  16. CC_SAFE_DELETE(ret);
  17. } else {
  18. ret->_bannerName = bName;
  19. ret->initBanner();
  20. }
  21. return ret;
  22. }
  23. void PurchaseBannerCell::setBtnClickCallBack(std::function<void(int,string)> tmpCallBack) {
  24. _reboltCallBack = tmpCallBack;
  25. }
  26. void PurchaseBannerCell::setBannerNO(int bno) {
  27. _bannerNO = bno;
  28. }
  29. int PurchaseBannerCell::getBannerNO() {
  30. return _bannerNO;
  31. }
  32. void PurchaseBannerCell::onNotifyDevelopment(redream::ReboltRedManager* reboltRedManager, redream::NotifyDevelopmentWaiter* waiter,
  33. std::string notify, std::string param, bool reboltIsWait, Node* outNode) {
  34. if (notify == "点击") {
  35. if (_reboltCallBack != nullptr) {
  36. if (_bannerInfo.bannerType == "计时" && _leftTime <= 0) {
  37. _reboltCallBack(_bannerNO,"noTime");
  38. } else {
  39. _reboltCallBack(_bannerNO,_bannerName);
  40. }
  41. }
  42. } else if (notify == "绑定倒计时") {
  43. if (outNode != nullptr) {
  44. this->scheduleBannerTime(outNode);
  45. }
  46. }
  47. }
  48. void PurchaseBannerCell::initBanner() {
  49. _bannerInfo = PBConfigData::getInstance()->getBannerInfo(_bannerName);
  50. if (_bannerInfo.bannerName.empty()) {
  51. return;
  52. }
  53. _lyCellBanner = RedreamLoader::ReboltLayer(_bannerInfo.bannerFile);
  54. this->addChild(_lyCellBanner);
  55. _lyCellBanner->_reboltCallBack = std::bind(&PurchaseBannerCell::onNotifyDevelopment,this,
  56. std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,
  57. std::placeholders::_4,std::placeholders::_5,std::placeholders::_6);
  58. _lyCellBanner->getReboltManager()->setCoderDataVar("P-标题",_bannerInfo.bannerTitle);
  59. _lyCellBanner->getReboltManager()->setCoderDataVar("P-图集名称",_bannerInfo.bannerPlist);
  60. _lyCellBanner->getReboltManager()->setCoderDataVar("P-背景图片",_bannerInfo.bannerBGSp);
  61. _lyCellBanner->getReboltManager()->setCoderDataVar("P-折扣数字",_bannerInfo.bannerCutCount);
  62. _lyCellBanner->getReboltManager()->setCoderDataVar("P-价格数字",_bannerInfo.bannerPrice);
  63. _lyCellBanner->getReboltManager()->setCoderDataVar("P-按钮文字",_bannerInfo.bannerBtnStr);
  64. {
  65. _lyCellBanner->getReboltManager()->setCoderDataVar("P-有效时间秒",to_string(_bannerInfo.bannerTime));
  66. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品1类型",_bannerInfo.item1Type);
  67. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品1数量",to_string(_bannerInfo.item1Count));
  68. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品1图片",_bannerInfo.item1PNG);
  69. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品2类型",_bannerInfo.item2Type);
  70. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品2数量","x" + to_string(_bannerInfo.item2Count));
  71. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品2图片",_bannerInfo.item2PNG);
  72. }
  73. {
  74. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品3类型",_bannerInfo.item3Type);
  75. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品3数量",to_string(_bannerInfo.item3Count));
  76. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品3图片",_bannerInfo.item3PNG);
  77. _lyCellBanner->getReboltManager()->setCoderDataVar("P-物品3描述",_bannerInfo.item3Des);
  78. }
  79. {
  80. //not enough
  81. }
  82. _lyCellBanner->getReboltManager()->runBehaviacWhitFunName("初始化");
  83. }
  84. void PurchaseBannerCell::scheduleBannerTime(Node* tmpNode) {
  85. Label* tmplabel = dynamic_cast<Label*>(tmpNode);
  86. if (tmplabel == nullptr) {
  87. return;
  88. }
  89. if (_leftTime <= 0) {
  90. if (_bannerInfo.bannerTime > 0) {
  91. _leftTime = _bannerInfo.bannerTime;
  92. } else {
  93. _leftTime = 60;
  94. }
  95. }
  96. string schedulName = "PurchaseBannerCell::scheduleBannerTime";
  97. auto thisNode = this;
  98. tmplabel->unschedule(schedulName);
  99. tmplabel->schedule([=](float dt){
  100. thisNode->_leftTime--;
  101. if (thisNode->_leftTime > 0) {
  102. string timestr = thisNode->convertSecondIntToHMSString(thisNode->_leftTime);
  103. tmplabel->setString(timestr);
  104. } else {
  105. if (thisNode->_lyCellBanner != nullptr) {
  106. thisNode->_lyCellBanner->getReboltManager()->runBehaviacWhitFunName("按钮失效");
  107. }
  108. tmplabel->unschedule(schedulName);
  109. }
  110. },1,schedulName);
  111. }
  112. void PurchaseBannerCell::setCellStatus() {
  113. if (_lyCellBanner != nullptr) {
  114. _lyCellBanner->getReboltManager()->runBehaviacWhitFunName("更新完成状态");
  115. }
  116. }
  117. string PurchaseBannerCell::convertSecondIntToHMSString(int iTime) {
  118. int lasttime = iTime;
  119. int hours = lasttime / 3600;
  120. lasttime = lasttime - (3600 * hours);
  121. int mins = lasttime / 60;
  122. lasttime = lasttime - (60 * mins);
  123. if (lasttime <= 0 && hours <= 0 && mins <= 0) {
  124. return "00:00:00";
  125. }
  126. int seconds = lasttime;
  127. string timestrH = "";
  128. if (hours < 10) {
  129. timestrH = "0";
  130. }
  131. string timestrM = "";
  132. if (mins < 10) {
  133. timestrM = "0";
  134. }
  135. string timestrS = "";
  136. if (seconds < 10) {
  137. timestrS = "0";
  138. }
  139. string timestr = timestrH + to_string(hours) + ":"
  140. + timestrM + to_string(mins) + ":"
  141. + timestrS + to_string(seconds);
  142. return timestr;
  143. }