Przeglądaj źródła

添加了失败时显示横向卡片

MoYuWang 9 miesięcy temu
rodzic
commit
562c8fde70

+ 30 - 17
Classes/IAP/IAPCtlShop.cpp

@@ -30,6 +30,7 @@ IAPCtlShop* IAPCtlShop::createWith(){
 }
 
 void IAPCtlShop::init(std::string &cfgFN){
+    _normalCfgFN = cfgFN;
     
     redutils::BaseConf* baseConf = new redutils::BaseConf(cfgFN.c_str());
     
@@ -41,26 +42,30 @@ void IAPCtlShop::setDelegate(IAPDelegate *delegate){
     _delegate = delegate;
 }
 
+void IAPCtlShop::setCfg4Failure(std::string &cfgFN){
+    _failCfgFN = cfgFN;
+    
+    redutils::BaseConf* baseConf = new redutils::BaseConf(cfgFN.c_str());
+    
+    _conf = IAPConf::getInstance();
+    _conf->initWith(baseConf);
+}
+
+void IAPCtlShop::displayFailureCardIn(cocos2d::Node *node){
+    IAPCtlShopUI::getInstance()->displayFailureCardIn(node);
+}
+
 void IAPCtlShop::setDeviceLevel(int level){
     IAPRunTimeData::getInstance()->setDeviceLevel(level);
-    if(_delegate){
-        _delegate->setDeviceLevel(level);
-    }
 }
 
 bool IAPCtlShop::addAPlacement(const IAPPlacement &plInfo){
     bool ans =IAPCtlShopUI::getInstance()->addAPlacement(plInfo);
-    if(_delegate){
-        _delegate->addAPlacement(plInfo);
-    }
     return ans;
 }
 
 void IAPCtlShop::removePlacement(const std::string &id){
     IAPCtlShopUI::getInstance()->removePlacement(id);
-    if(_delegate){
-        _delegate->removePlacement(id);
-    }
 }
 
 bool IAPCtlShop::addCardToPlacement(const std::string &id, IAPCard *card){
@@ -80,13 +85,10 @@ size_t IAPCtlShop::getPlacementCount(){
 }
 
 void IAPCtlShop::showInNode(cocos2d::Node *pParent, ShopRequirement &requirement){
+    init(_normalCfgFN);
     IAPCtlShopUI::getInstance()->create(pParent, _conf, requirement);
 }
 
-void IAPCtlShop::showPlacementsInNode(cocos2d::Node *pParent, const vector<std::string> &plIds){
-    IAPCtlShopUI::getInstance()->showPlacementsInNode(pParent, plIds);
-}
-
 UserBuyType IAPCtlShop::getUserBuyType(){
     // 如果没有购买记录
     auto buyInfos = IAPUserData::getInstance()->getBuyInfos();
@@ -128,15 +130,26 @@ UserBuyType IAPCtlShop::getUserBuyType(){
 void IAPCtlShop::addUserBuyInfo(std::string commodityID){
     iap::IAPUserData::getInstance()->addBuyInfo(commodityID);
     if(_delegate){
-        _delegate->onUserBuySuccess(commodityID);
+        std::vector<GoodsInfo> goodInfos;
+        _conf->getAllGoods(goodInfos);
+        for(const auto& goodInfo : goodInfos){
+            if(goodInfo.id == commodityID){
+                std::map<string, string> buyInfo;
+                for(const auto& area : goodInfo.areas){
+                    for(const auto& info : area){
+                        buyInfo[info.name] = info.count;
+                    }
+                }
+                //  发送礼包内含有的物品
+                _delegate->onUserBuySuccess(buyInfo);
+                break;
+            }
+        }
     }
 }
 
 void IAPCtlShop::clearUserBuyInfo(){
     iap::IAPUserData::getInstance()->clearBuyInfo();
-    if(_delegate){
-        _delegate->clearUserBuyInfo();
-    }
 }
 
 float IAPCtlShop::getUserBuyMaxAmount(){

+ 9 - 5
Classes/IAP/IAPCtlShop.hpp

@@ -39,6 +39,12 @@ public:
     // delegate 代理的实现
     void setDelegate(IAPDelegate* delegate);
 
+    // 设置失败时内购卡片的配置
+    void setCfg4Failure(std::string& cfgFN);
+
+    // 显示失败时的内购卡片
+    void displayFailureCardIn(cocos2d::Node*);
+    
     // 设置当前设备的等级
     // level 等级: 1 表示初级, 2 表示中级, 3 表示高级
     void setDeviceLevel(int level);
@@ -67,11 +73,6 @@ public:
     // pParent 父节点
     // requirement 对商店的要求,比如说最低金币数
     void showInNode(cocos2d::Node* pParent, ShopRequirement& requirement);
-
-    // 以滑动卡片的形式在某个节点中显示某些版位(适用于失败时的场景)
-    // pParent 父节点
-    // plIds 需要的版位id
-    void showPlacementsInNode(cocos2d::Node* pParent, const vector<std::string>& plIds);
     
     // 获取用户类型
     UserBuyType getUserBuyType();
@@ -94,6 +95,9 @@ private:
     IAPDelegate* _delegate;
 
     IAPConf* _conf;
+    
+    std::string _normalCfgFN;
+    std::string _failCfgFN;
 };
 
 NS_IAP_END

+ 1 - 14
Classes/IAP/IAPDelegate.hpp

@@ -15,21 +15,8 @@ class IAPDelegate {
 public:
     virtual ~IAPDelegate(){}
     
-    // 设置设备等级通知
-    virtual void setDeviceLevel(int leval) = 0;
-    
     // 用户成功购买通知
-    virtual void onUserBuySuccess(std::string commodityID) = 0;
-    
-    // 添加商店版位通知
-    virtual bool addAPlacement(const iap::IAPPlacement& plInfo) = 0;
-    
-    // 删除商店版位通知
-    virtual void removePlacement(const std::string& id) = 0;
-    
-    // 清除用户购买信息通知
-    virtual void clearUserBuyInfo() = 0;
-    
+    virtual void onUserBuySuccess(std::map<std::string, string> buyInfo) = 0;
     
 };
 

+ 25 - 57
Classes/IAP/Shop/IAPCtlShopUI.cpp

@@ -55,6 +55,7 @@ void IAPCtlShopUI::clear() {
     }
     _goodsItems.clear();
     _placementItems.clear();
+    _failItems.clear();
     for(const auto& placement : _placements){
         _indicators[placement.first].clear();
     }
@@ -98,70 +99,37 @@ bool IAPCtlShopUI::create(Node* pNode, IAPConf* cfg, iap::ShopRequirement& requi
     return true;
 }
 
-// (暂未完成)
-void IAPCtlShopUI::showPlacementsInNode(cocos2d::Node *pNode, const vector<std::string> &plIds){
+void IAPCtlShopUI::displayFailureCardIn(cocos2d::Node *pNode){
     clear();
-    redutils::Platform::getInstance()->reportLog("open iap");
     
-    int index = 0;
-    _tableData.setCascadeOpacity(true);
-    _tableData.clear();
-    cocos2d::Size size = _ndScrollArea->getContentSize();
-    auto delayIdx = 0;
-    cocos2d::Vec2 offset(size.width, 0);
-    float dur = 0.4;
-    int height = 0;
+    IAPCardView::sDotCfg cfg;
+    cfg.hightSp = "内购版位_通用_图标_滑动点_已选中.png";
+    cfg.normalSp = "内购版位_通用_图标_滑动点_未选中.png";
+    cfg.sepWidth = 30.0f;
+    cfg.yStart = 0;
     
-    for(int i = 0; i < plIds.size(); i++){
-        if(_placements.count(plIds[i]) == 0)continue;
-        // 展示活动版位
-        bool bNeedAnim = height <= size.height;
-        Node* nd = Node::create();
-        nd->setAnchorPoint(Vec2(0.5,0.5));
-        nd->setContentSize(cocos2d::Size(584,250));
-        nd->setCascadeOpacityEnabled(true);
-        nd->setCascadeColorEnabled(true);
-        
-        auto si = createPlacementUI(_placements[plIds[i]]);
-        auto sz = cocos2d::Size(584,280);
-        cocos2d::Vec2 pos(size.width/2.0, sz.height/2.0);
-        nd->addChild(si);
-        si->setPosition(bNeedAnim ? pos+offset : pos);
-        _placementItems.push_back(nd);
-        _tableData.insertCell(index++, nd);
-        _allSizes.push_back(sz);
-        height += sz.height;
-        
-        if (bNeedAnim) {
-            // 加入动画
-            auto d = DelayTime::create(delayIdx*dur/8.0);
-            auto m = EaseBackOut::create(MoveBy::create(dur, cocos2d::Vec2(-offset.x, offset.y)));
-            si->runAction(Sequence::create(d, m, NULL));
-            delayIdx ++;
-        }
+    IAPConf::getInstance()->getAllGoods(_goodsInfo);
+    float h = 0.0;
+    for(const auto& goodInfo : _goodsInfo){
+        h = std::max(h, goodInfo.sz.height);
     }
     
-    _tableData._numberOfCellsInTableView = [=](cocos2d::extension::TableViewSmooth*)->ssize_t{
-        return _allSizes.size();
-    };
-    _tableData._tableCellSizeForIndex = [=](cocos2d::extension::TableViewSmooth*, ssize_t idx)->Size{
-        if (idx < _allSizes.size()) {
-            return _allSizes[idx];
-        } else {
-            return Size(0,0);
-        }
-    };
+    auto visibleSize = Director::getInstance()->getVisibleSize();
+    float width = visibleSize.width;
+    cocos2d::Size sz = cocos2d::Size(width, h + 20);
     
+    IAPCardView* cardView = IAPCardView::create(sz, cfg);
     
-    _tableView = redutils::RUTableView::create(&_tableData, cocos2d::Size(size.width, size.height));
-    _tableView->setCascadeOpacityEnabled(true);
-    _tableView->setCascadeColorEnabled(true);
-    _tableView->setDirection(ScrollViewSmooth::Direction::VERTICAL);
-    _tableView->setVerticalFillOrder(TableViewSmooth::VerticalFillOrder::TOP_DOWN, false);
-    _tableView->setDelegate(&_tableData);
-    _tableView->setBounceable(true);
-//    _tableView->setOutSightClean(false);
-    _ndScrollArea->addChild(_tableView);
+    IAPTestCardViewDelegate* cardViewDelegate = new IAPTestCardViewDelegate();
+    cardView->setDelegate(cardViewDelegate);
+
+    for (const auto& goodInfo : _goodsInfo) {
+        auto item = IAPCtlShopItem::create(goodInfo, 1);
+        _failItems.push_back(item);
+        cardView->addCard(item);
+    }
+
+    pNode->addChild(cardView);
 }
 
 bool IAPCtlShopUI::addAPlacement(const iap::IAPPlacement &plInfo){

+ 2 - 1
Classes/IAP/Shop/IAPCtlShopUI.hpp

@@ -29,7 +29,7 @@ public:
     // 以滑动卡片的形式在某个节点中显示某些版位(适用于失败时的场景)
     // pParent 父节点
     // plIds 需要的版位id
-    void showPlacementsInNode(cocos2d::Node* pNode, const vector<std::string>& plIds);
+    void displayFailureCardIn(cocos2d::Node* pNode);
     
     // 添加一个商店版位
     // id 卡片id(添加版位时的id)
@@ -87,6 +87,7 @@ private:
     redutils::RUTableDataModel _tableData;
     std::vector<GoodsInfo> _goodsInfo;
     std::vector<IAPCtlShopItem*> _goodsItems;
+    std::vector<IAPCtlShopItem*> _failItems;
     std::vector<Node*> _placementItems;
     redutils::RUReboltLayer* _btnShowAll = nullptr;
     std::vector<cocos2d::Size> _allSizes;

+ 6 - 6
Classes/IAP/Shop/IAPTestCard.cpp → Classes/IAP/Test/IAPTestCard.cpp

@@ -14,7 +14,7 @@
 IAPTestCard::IAPTestCard(){
     _redName = "内购版位_活动模版.redream";
     
-    _title = "activity";
+    _title = "Activity";
     _background = "内购版位_活动模版_底板_插图底板.png";
     _gameUIName = "gameMapUI.plist";
     _buttonLabel = "$ 0.99";
@@ -53,10 +53,10 @@ redutils::RUReboltLayer* IAPTestCard::createLayer(){
     
     auto layer = redutils::RUReboltLayer::createReboltLayer(_redName);
     
-    layer->setCoderDataVar("P-标题", _title);
-    layer->setCoderDataVar("P-背景图片", _background);
-    layer->setCoderDataVar("P-图集名称", _gameUIName);
-    layer->setCoderDataVar("P-按钮文字", _buttonLabel);
+    layer->setCoderDataVar("P-标题", _title.c_str());
+    layer->setCoderDataVar("P-背景图片", _background.c_str());
+    layer->setCoderDataVar("P-图集名称", _gameUIName.c_str());
+    layer->setCoderDataVar("P-按钮文字", _buttonLabel.c_str());
     
     layer->registerOnNotify([this](const redutils::ReboltNotifyData& data){
         onNotifyDevelopment(data);
@@ -69,7 +69,7 @@ redutils::RUReboltLayer* IAPTestCard::createLayer(){
 void IAPTestCard::onNotifyDevelopment(const redutils::ReboltNotifyData& data) {
     if (data.notify == "") {
         
-    } else if (data.notify == "点击购买") {
+    } else if (data.notify == "点击") {
         
     }
 }

+ 0 - 0
Classes/IAP/Shop/IAPTestCard.hpp → Classes/IAP/Test/IAPTestCard.hpp


+ 0 - 0
Classes/IAPTestCardViewDelegate.cpp → Classes/IAP/Test/IAPTestCardViewDelegate.cpp


+ 0 - 0
Classes/IAPTestCardViewDelegate.hpp → Classes/IAP/Test/IAPTestCardViewDelegate.hpp


+ 6 - 4
Classes/TestScene.cpp

@@ -35,6 +35,7 @@ bool TestScene::init(){
     
     _iapShop = iap::IAPCtlShop::createWith();
     _iapShop->init(cfgFN);
+    _iapShop->setCfg4Failure(cfgFN);
     
     iap::IAPPlacement plInfo;
     plInfo.id = "1";
@@ -97,10 +98,11 @@ void TestScene::onNotifyDevelopment(const redutils::ReboltNotifyData& data){
     }else if(data.notify == "点击失败"){
         log("点击失败时金币不够按钮");
         
-        iap::ShopRequirement shopRequirement;
-        shopRequirement.coinsMin = 10000;
-        
-        _iapShop->showInNode(this, shopRequirement);
+//        iap::ShopRequirement shopRequirement;
+//        shopRequirement.coinsMin = 10000;
+//
+//        _iapShop->showInNode(this, shopRequirement);
+        _iapShop->displayFailureCardIn(this);
     }else if(data.notify == "点击重置"){
         
         _iapShop->setDeviceLevel(1);

+ 4 - 4
Resources/resources/ccb/purchaseBanner/内购版位_活动模版.red

@@ -1052,8 +1052,8 @@
                                     <string>Size</string>
                                     <key>value</key>
                                     <array>
-                                        <real>350.0000000</real>
-                                        <real>80.0000000</real>
+                                        <real>0.0000000</real>
+                                        <real>0.0000000</real>
                                         <integer>0</integer>
                                         <integer>0</integer>
                                         <false/>
@@ -1610,8 +1610,8 @@
                                                     <string>Size</string>
                                                     <key>value</key>
                                                     <array>
-                                                        <real>180.0000000</real>
-                                                        <real>54.0000000</real>
+                                                        <real>0.0000000</real>
+                                                        <real>0.0000000</real>
                                                         <integer>0</integer>
                                                         <integer>0</integer>
                                                         <false/>

BIN
Resources/resources/ccbi/内购版位_活动模版.redream


+ 13 - 5
proj.ios_mac/demo.xcodeproj/project.pbxproj

@@ -375,6 +375,7 @@
 				2F15C5E62CB8F65A0057855D /* IAPDelegate.hpp */,
 				2F15C5EA2CB8F65A0057855D /* IAPCtlShop.hpp */,
 				2F15C5DE2CB8F65A0057855D /* IAPCtlShop.cpp */,
+				C1CA495B2CD08C37002745E2 /* Test */,
 				2F15C5DF2CB8F65A0057855D /* Shop */,
 				2F15C5E72CB8F65A0057855D /* User */,
 				2F15C5EC2CB8F65A0057855D /* Ctl */,
@@ -392,8 +393,6 @@
 				2F15C5E12CB8F65A0057855D /* IAPCtlShopUI.cpp */,
 				2F15C5E22CB8F65A0057855D /* IAPCtlShopItem.hpp */,
 				2F15C5E52CB8F65A0057855D /* IAPCtlShopItem.cpp */,
-				C17946162CC7502600779B63 /* IAPTestCard.hpp */,
-				C17946152CC7502600779B63 /* IAPTestCard.cpp */,
 				C18082272CCB3338009DE140 /* IAPCardView.hpp */,
 				C18082262CCB3338009DE140 /* IAPCardView.cpp */,
 			);
@@ -458,12 +457,10 @@
 			isa = PBXGroup;
 			children = (
 				2F15C5DC2CB8F65A0057855D /* IAP */,
-				46880B8519C43A87006E1F66 /* AppDelegate.h */,
 				46880B8419C43A87006E1F66 /* AppDelegate.cpp */,
+				46880B8519C43A87006E1F66 /* AppDelegate.h */,
 				C17ACCC52CB904460072A711 /* TestScene.h */,
 				C17ACCBB2CB903BA0072A711 /* TestScene.cpp */,
-				C18082322CCB71D3009DE140 /* IAPTestCardViewDelegate.hpp */,
-				C18082312CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp */,
 			);
 			name = Classes;
 			path = ../Classes;
@@ -489,6 +486,17 @@
 			name = mac;
 			sourceTree = "<group>";
 		};
+		C1CA495B2CD08C37002745E2 /* Test */ = {
+			isa = PBXGroup;
+			children = (
+				C17946162CC7502600779B63 /* IAPTestCard.hpp */,
+				C17946152CC7502600779B63 /* IAPTestCard.cpp */,
+				C18082322CCB71D3009DE140 /* IAPTestCardViewDelegate.hpp */,
+				C18082312CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp */,
+			);
+			path = Test;
+			sourceTree = "<group>";
+		};
 		E4D223352BD6676A006F1F8D /* BullDogClass */ = {
 			isa = PBXGroup;
 			children = (