IAPCtlShopItem.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // IAPCtlShopItem.cpp
  3. // TileManor
  4. //
  5. // Created by 徐炼新 on 2024/1/17.
  6. //
  7. #include "IAPCtlShopItem.hpp"
  8. #include "IAPCtlArea23.hpp"
  9. #include "IAPProcess.hpp"
  10. #include "IAPCtlShopUI.hpp"
  11. #include "IAPSucessProcess.hpp"
  12. #include "IAPDelegate.hpp"
  13. #include "RUUtils.h"
  14. #include "IAPUserData.hpp"
  15. IAPCtlShopItem* IAPCtlShopItem::create(const GoodsInfo& gi, int placementId) {
  16. IAPCtlShopItem* csi = new IAPCtlShopItem(gi);
  17. csi->_placementId = placementId;
  18. csi->autorelease();
  19. csi->retain();
  20. return csi;
  21. }
  22. IAPCtlShopItem::IAPCtlShopItem(const GoodsInfo& gi)
  23. : _gi(gi) {
  24. }
  25. IAPCtlShopItem::~IAPCtlShopItem() {
  26. if (_ctlArea23) {
  27. _ctlArea23->release();
  28. }
  29. }
  30. cocos2d::Size IAPCtlShopItem::getSize() {
  31. return _gi.sz;
  32. }
  33. void IAPCtlShopItem::onEnter() {
  34. Node::onEnter();
  35. if (_layer == nullptr) {
  36. initUI();
  37. setCascadeOpacityEnabled(true);
  38. setCascadeColorEnabled(true);
  39. redutils::iterateNode(this, [](Node* nd){
  40. nd->setCascadeOpacityEnabled(true);
  41. nd->setCascadeColorEnabled(true);
  42. });
  43. }
  44. }
  45. bool IAPCtlShopItem::initUI() {
  46. if (_gi.type == "bar") {
  47. _layer = redutils::RUReboltLayer::createReboltLayer("shop_panel_2.redream");
  48. } else {
  49. _layer = redutils::RUReboltLayer::createReboltLayer("shop_panel_1.redream");
  50. if (_gi.style == "normal") {
  51. _layer->setCoderDataVar("P-tStyle", "1");
  52. } else if (_gi.style == "mostValued") {
  53. _layer->setCoderDataVar("P-tStyle", "2");
  54. } else if (_gi.style == "special") {
  55. _layer->setCoderDataVar("P-tStyle", "3");
  56. }
  57. _layer->setCoderDataVar("P-tSlogon", _gi.slogon);
  58. _layer->setCoderDataVar("P-tHint", _gi.hint);
  59. }
  60. _layer->setCoderDataVar("P-tCost", _gi.cost);
  61. _layer->setCoderDataVar("P-tCoins", _gi.areas.front().front().count);
  62. std::string strCoins;
  63. // 从后往前遍历,每隔3个数增加一个空格
  64. for (int i=_gi.areas.front().front().count.size()-1; i>=0; i--) {
  65. if (strCoins.size() > 0 && (strCoins.size() == 3 || strCoins.size() == 7)) {
  66. strCoins = " " + strCoins;
  67. }
  68. strCoins = std::string(1, _gi.areas.front().front().count.at(i)) + strCoins;
  69. }
  70. _layer->setCoderDataVar("P-tLbCoins", strCoins);
  71. addChild(_layer);
  72. _layer->registerOnNotify([this](const redutils::ReboltNotifyData& data){
  73. onNotifyDevelopment(data);
  74. });
  75. _layer->runBehaviacWhitFunName("初始化");
  76. if (_ctlArea23) {
  77. _ctlArea23->doOwnInit();
  78. }
  79. return true;
  80. }
  81. void IAPCtlShopItem::onNotifyDevelopment(const redutils::ReboltNotifyData& data) {
  82. if (data.notify == "绑定展示区23") {
  83. _ctlArea23 = IAPCtlArea23::create(data.reboltRedManager, _gi);
  84. } else if (data.notify == "点击购买") {
  85. // 展示正在购买中的界面
  86. IAPProcess::getInstance()->buy(_gi,
  87. _placementId,
  88. [=](){
  89. accepted();
  90. },
  91. [=](){
  92. rejected();
  93. });
  94. }
  95. }
  96. void IAPCtlShopItem::accepted() {
  97. // 退出购买界面,展示成功界面,记录购买信息
  98. iap::IAPUserData::getInstance()->addBuyInfo(_gi.id);
  99. auto type = iap::IAPUserData::getInstance()->getUserBuyType();
  100. IAPCtlShopUI::getInstance()->quit();
  101. }
  102. void IAPCtlShopItem::rejected() {
  103. }