瀏覽代碼

优化代码

MoYuWang 9 月之前
父節點
當前提交
ada7edb09f

+ 23 - 18
Classes/IAP/IAPCtlShop.cpp

@@ -15,11 +15,13 @@
 #include "IAPConf.hpp"
 #include "IAPCtlShopUI.hpp"
 #include "IAPUserData.hpp"
+#include "IAPRunTimeData.hpp"
 
 NS_IAP_BEGIN
 
 IAPCtlShop* IAPCtlShop::_instance = nullptr;
 
+
 IAPCtlShop* IAPCtlShop::createWith(){
     if (_instance == nullptr) {
         _instance = new IAPCtlShop();
@@ -33,10 +35,6 @@ void IAPCtlShop::init(std::string &cfgFN){
     
     _conf = IAPConf::getInstance();
     _conf->initWith(baseConf);
-    
-    _shopUI = IAPCtlShopUI::getInstance();
-    _delegate = IAPDelegate::getInstance();
-    _level = 1;
 }
 
 void IAPCtlShop::setDelegate(IAPDelegate *delegate){
@@ -44,24 +42,33 @@ void IAPCtlShop::setDelegate(IAPDelegate *delegate){
 }
 
 void IAPCtlShop::setDeviceLevel(int level){
-    _level = level;
-}
-
-int IAPCtlShop::getDeviceLevel(){
-    return _level;
+    IAPRunTimeData::getInstance()->setDeviceLevel(level);
+    if(_delegate){
+        _delegate->setDeviceLevel(level);
+    }
 }
 
-
 bool IAPCtlShop::addAPlacement(const IAPPlacement &plInfo){
-    return IAPCtlShopUI::getInstance()->addAPlacement(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){
-    IAPCtlShopUI::getInstance()->addCardToPlacement(id, card);
+    return IAPCtlShopUI::getInstance()->addCardToPlacement(id, card);
+}
+
+bool IAPCtlShop::removeCardToPlacement(const std::string &id, int cardIndex){
+    return IAPCtlShopUI::getInstance()->removeCardToPlacement(id, cardIndex);
 }
 
 void IAPCtlShop::clearPlacement(){
@@ -73,8 +80,7 @@ size_t IAPCtlShop::getPlacementCount(){
 }
 
 void IAPCtlShop::showInNode(cocos2d::Node *pParent, ShopRequirement &requirement){
-    _shopUI = IAPCtlShopUI::getInstance();
-    _shopUI->create(pParent, _conf, requirement);
+    IAPCtlShopUI::getInstance()->create(pParent, _conf, requirement);
 }
 
 void IAPCtlShop::showPlacementsInNode(cocos2d::Node *pParent, const vector<std::string> &plIds){
@@ -119,12 +125,11 @@ UserBuyType IAPCtlShop::getUserBuyType(){
     return UserBuyType::NormalShopping;
 }
 
-std::vector<std::string> IAPUserData::getBuyInfos(){
-    return _buyInfos;
-}
-
 void IAPCtlShop::addUserBuyInfo(std::string commodityID){
     iap::IAPUserData::getInstance()->addBuyInfo(commodityID);
+    if(_delegate){
+        _delegate->onUserBuySuccess(commodityID);
+    }
 }
 
 void IAPCtlShop::clearUserBuyInfo(){

+ 5 - 7
Classes/IAP/IAPCtlShop.hpp

@@ -42,9 +42,6 @@ public:
     // 设置当前设备的等级
     // level 等级: 1 表示初级, 2 表示中级, 3 表示高级
     void setDeviceLevel(int level);
-    
-    // 获取当前设备等级
-    int getDeviceLevel();
 
     // 添加一个商店版位
     // plInfo 版位信息
@@ -57,6 +54,9 @@ public:
     // 给某个商店版位添加卡片
     bool addCardToPlacement(const std::string& id, IAPCard* card);
     
+    // 给某个商店版位删除卡片
+    bool removeCardToPlacement(const std::string& id, int cardIndex = -1);
+    
     // 清空活动
     void clearPlacement();
     
@@ -89,11 +89,9 @@ private:
 private:
     static IAPCtlShop* _instance;
     
-    IAPConf* _conf;
-    IAPCtlShopUI* _shopUI;
     IAPDelegate* _delegate;
-    
-    int _level;
+
+    IAPConf* _conf;
 };
 
 NS_IAP_END

+ 7 - 6
Classes/IAP/IAPDelegate.cpp

@@ -9,11 +9,12 @@
 #include "IAPUserData.hpp"
 
 
-IAPDelegate* IAPDelegate::_instance = nullptr;
+IAPDelegate* IAPDelegate::create(){
+    IAPDelegate* delegate = new IAPDelegate();
+    return delegate;
+}
 
-IAPDelegate* IAPDelegate::getInstance(){
-    if (_instance == nullptr) {
-        _instance = new IAPDelegate();
-    }
-    return _instance;
+void IAPDelegate::onUserBuySuccess(std::string commodityID){
+    // 添加购买信息
+    iap::IAPUserData::getInstance()->addBuyInfo(commodityID);
 }

+ 13 - 4
Classes/IAP/IAPDelegate.hpp

@@ -9,14 +9,23 @@
 #define IAPDelegate_hpp
 
 #include <cocos2d.h>
+#include "IAPDefine.hpp"
 
 class IAPDelegate {
 public:
-    static IAPDelegate* getInstance();
-
-private:
-    static IAPDelegate* _instance;
+    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;
     
 };
 

+ 12 - 1
Classes/IAP/Shop/IAPCtlShopUI.cpp

@@ -21,6 +21,8 @@
 #include "IAPCardView.hpp"
 #include "IAPTestCardViewDelegate.hpp"
 
+#include "IAPRunTimeData.hpp"
+
 #include <regex>
 
 IAPCtlShopUI* IAPCtlShopUI::_instance = nullptr;
@@ -189,6 +191,15 @@ bool IAPCtlShopUI::addCardToPlacement(const std::string &id, iap::IAPCard *card)
     return true;
 }
 
+bool IAPCtlShopUI::removeCardToPlacement(const std::string id, int cardIndex){
+    if(_placements.count(id) == 0)return false;
+    if(cardIndex < 0 || cardIndex >= _placements[id].cards.size()){
+        return false;
+    }
+    _placements[id].cards.erase(_placements[id].cards.begin() + cardIndex);
+    return true;
+}
+
 void IAPCtlShopUI::clearPlacement(){
     _placements.clear();
     _indicators.clear();
@@ -260,7 +271,7 @@ void IAPCtlShopUI::constructShopItem(bool bShowAll) {
     // 当前有效的区域
     int bigPackCount,smallPackCount; // 需要显示的礼包
     auto iapCtlShop = iap::IAPCtlShop::createWith();
-    int leval = iapCtlShop->getDeviceLevel();
+    int leval = IAPRunTimeData::getInstance()->getDeviceLevel();
     size_t placementCount = iapCtlShop->getPlacementCount();
     switch(leval){
         case 1:

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

@@ -42,6 +42,9 @@ public:
     // 给某个商店版位添加卡片
     bool addCardToPlacement(const std::string& id, iap::IAPCard* card);
     
+    // 给某个商店版位添加卡片
+    bool removeCardToPlacement(const std::string id, int cardIndex = -1);
+    
     // 清空活动
     void clearPlacement();
     
@@ -69,9 +72,10 @@ private:
     
     Node* createPlacementUI(const iap::IAPPlacement& placement);
     
-    // 根据所需要的金币进行排序筛选
+    // 根据所需要的金币进行过滤筛选
     void filterGoods(iap::ShopRequirement& requirement);
     
+    // 对Goods列表价格进行排序 true : 从小到大 false: 从大到小
     void sortGoods(bool flag);
 
 private:

+ 35 - 0
Classes/IAP/User/IAPRunTimeData.cpp

@@ -0,0 +1,35 @@
+//
+//  IAPRunTimeData.cpp
+//  demo
+//
+//  Created by Red_mini on 2024/10/25.
+//
+
+#include "IAPRunTimeData.hpp"
+
+IAPRunTimeData* IAPRunTimeData::_instance = nullptr;
+
+IAPRunTimeData* IAPRunTimeData::getInstance(){
+    if(_instance == nullptr){
+        _instance = new IAPRunTimeData();
+    }
+    return _instance;
+}
+
+IAPRunTimeData::IAPRunTimeData(){
+    _init();
+}
+
+
+void IAPRunTimeData::setDeviceLevel(int level){
+    _leval = level;
+}
+
+int IAPRunTimeData::getDeviceLevel(){
+    return _leval;
+}
+
+
+void IAPRunTimeData::_init(){
+    _leval = 1;
+}

+ 30 - 0
Classes/IAP/User/IAPRunTimeData.hpp

@@ -0,0 +1,30 @@
+//
+//  IAPRunTimeData.hpp
+//  demo
+//
+//  Created by Red_mini on 2024/10/25.
+//
+
+#ifndef IAPRunTimeData_hpp
+#define IAPRunTimeData_hpp
+
+#include <stdio.h>
+
+class IAPRunTimeData{
+public:
+    static IAPRunTimeData* getInstance();
+    IAPRunTimeData();
+    
+    void setDeviceLevel(int level);
+    
+    int getDeviceLevel();
+    
+private:
+    void _init();
+    
+private:
+    static IAPRunTimeData* _instance;
+    int _leval;
+};
+
+#endif /* IAPRunTimeData_hpp */

+ 11 - 1
Classes/IAP/User/IAPUserData.cpp

@@ -19,20 +19,30 @@ IAPUserData* IAPUserData::getInstance(){
     return _instance;
 }
 
+IAPUserData::IAPUserData(){
+    init();
+}
+
 void IAPUserData::init(){
+    // 提取用户本地购买信息
     
 }
 
 void IAPUserData::addBuyInfo(std::string commodityID){
     _buyInfos.push_back(commodityID);
+    
 }
 
 void IAPUserData::addBuyInfo(std::vector<std::string> commodityIDs){
     for(const auto& commodityID : commodityIDs){
-        _buyInfos.push_back(commodityID);
+        addBuyInfo(commodityID);
     }
 }
 
+std::vector<std::string> IAPUserData::getBuyInfos(){
+    return _buyInfos;
+}
+
 void IAPUserData::clearBuyInfo(){
     _buyInfos.clear();
 }

+ 2 - 1
Classes/IAP/User/IAPUserData.hpp

@@ -18,7 +18,7 @@ class IAPUserData {
 public:
     static IAPUserData* getInstance();
     
-    void init();
+    IAPUserData();
     
     // 添加购买信息
     // 参数说明 : 商品id
@@ -33,6 +33,7 @@ public:
 
 private:
     
+    void init();
     
 private:
     static IAPUserData* _instance;

+ 6 - 4
proj.ios_mac/demo.xcodeproj/project.pbxproj

@@ -29,7 +29,6 @@
 		2F15C5F62CB8F65A0057855D /* IAPCtlShopUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5E12CB8F65A0057855D /* IAPCtlShopUI.cpp */; };
 		2F15C5F72CB8F65A0057855D /* IAPCtlShopItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5E52CB8F65A0057855D /* IAPCtlShopItem.cpp */; };
 		2F15C5F82CB8F65A0057855D /* IAPUserData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5E82CB8F65A0057855D /* IAPUserData.cpp */; };
-		2F15C5F92CB8F65A0057855D /* IAPDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5EB2CB8F65A0057855D /* IAPDelegate.cpp */; };
 		2F15C5FA2CB8F65A0057855D /* IAPSucessProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5ED2CB8F65A0057855D /* IAPSucessProcess.cpp */; };
 		2F15C5FB2CB8F65A0057855D /* IAPProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5EE2CB8F65A0057855D /* IAPProcess.cpp */; };
 		2F15C5FC2CB8F65A0057855D /* IAPConf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F15C5F22CB8F65A0057855D /* IAPConf.cpp */; };
@@ -59,6 +58,7 @@
 		C18082292CCB3338009DE140 /* IAPCardView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C18082262CCB3338009DE140 /* IAPCardView.cpp */; };
 		C18082332CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C18082312CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp */; };
 		C18082342CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C18082312CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp */; };
+		C180823B2CCB82BD009DE140 /* IAPRunTimeData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C18082382CCB82BD009DE140 /* IAPRunTimeData.cpp */; };
 		D44C620C132DFF330009C878 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620B132DFF330009C878 /* OpenAL.framework */; };
 		D44C620E132DFF430009C878 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620D132DFF430009C878 /* AVFoundation.framework */; };
 		D44C6210132DFF4E0009C878 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620F132DFF4E0009C878 /* AudioToolbox.framework */; };
@@ -172,7 +172,6 @@
 		2F15C5E82CB8F65A0057855D /* IAPUserData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAPUserData.cpp; sourceTree = "<group>"; };
 		2F15C5E92CB8F65A0057855D /* IAPUserData.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IAPUserData.hpp; sourceTree = "<group>"; };
 		2F15C5EA2CB8F65A0057855D /* IAPCtlShop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IAPCtlShop.hpp; sourceTree = "<group>"; };
-		2F15C5EB2CB8F65A0057855D /* IAPDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAPDelegate.cpp; sourceTree = "<group>"; };
 		2F15C5ED2CB8F65A0057855D /* IAPSucessProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAPSucessProcess.cpp; sourceTree = "<group>"; };
 		2F15C5EE2CB8F65A0057855D /* IAPProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IAPProcess.cpp; sourceTree = "<group>"; };
 		2F15C5EF2CB8F65A0057855D /* IAPSucessProcess.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IAPSucessProcess.hpp; sourceTree = "<group>"; };
@@ -204,6 +203,8 @@
 		C18082272CCB3338009DE140 /* IAPCardView.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = IAPCardView.hpp; sourceTree = "<group>"; };
 		C18082312CCB71D3009DE140 /* IAPTestCardViewDelegate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IAPTestCardViewDelegate.cpp; sourceTree = "<group>"; };
 		C18082322CCB71D3009DE140 /* IAPTestCardViewDelegate.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = IAPTestCardViewDelegate.hpp; sourceTree = "<group>"; };
+		C18082382CCB82BD009DE140 /* IAPRunTimeData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IAPRunTimeData.cpp; sourceTree = "<group>"; };
+		C18082392CCB82BD009DE140 /* IAPRunTimeData.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = IAPRunTimeData.hpp; sourceTree = "<group>"; };
 		D44C620B132DFF330009C878 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
 		D44C620D132DFF430009C878 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		D44C620F132DFF4E0009C878 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
@@ -372,7 +373,6 @@
 			children = (
 				2F15C5DD2CB8F65A0057855D /* IAPDefine.hpp */,
 				2F15C5E62CB8F65A0057855D /* IAPDelegate.hpp */,
-				2F15C5EB2CB8F65A0057855D /* IAPDelegate.cpp */,
 				2F15C5EA2CB8F65A0057855D /* IAPCtlShop.hpp */,
 				2F15C5DE2CB8F65A0057855D /* IAPCtlShop.cpp */,
 				2F15C5DF2CB8F65A0057855D /* Shop */,
@@ -405,6 +405,8 @@
 		2F15C5E72CB8F65A0057855D /* User */ = {
 			isa = PBXGroup;
 			children = (
+				C18082392CCB82BD009DE140 /* IAPRunTimeData.hpp */,
+				C18082382CCB82BD009DE140 /* IAPRunTimeData.cpp */,
 				2F15C5E92CB8F65A0057855D /* IAPUserData.hpp */,
 				2F15C5E82CB8F65A0057855D /* IAPUserData.cpp */,
 			);
@@ -753,13 +755,13 @@
 				E4D223412BD667D4006F1F8D /* AdUtilsInterstitial.cpp in Sources */,
 				C18082292CCB3338009DE140 /* IAPCardView.cpp in Sources */,
 				2F15C5F62CB8F65A0057855D /* IAPCtlShopUI.cpp in Sources */,
+				C180823B2CCB82BD009DE140 /* IAPRunTimeData.cpp in Sources */,
 				2F15C5FB2CB8F65A0057855D /* IAPProcess.cpp in Sources */,
 				E4D223432BD667D4006F1F8D /* AdUtilsVideo.cpp in Sources */,
 				2F15C5FA2CB8F65A0057855D /* IAPSucessProcess.cpp in Sources */,
 				2F15E2412CB52B0F00082BF8 /* IAPProductInfo.cpp in Sources */,
 				46880B8919C43A87006E1F66 /* AppDelegate.cpp in Sources */,
 				2F15C5FC2CB8F65A0057855D /* IAPConf.cpp in Sources */,
-				2F15C5F92CB8F65A0057855D /* IAPDelegate.cpp in Sources */,
 				E4D223492BD667E8006F1F8D /* AdUtils.cpp in Sources */,
 				2F15C5F72CB8F65A0057855D /* IAPCtlShopItem.cpp in Sources */,
 				C17946182CC7502600779B63 /* IAPTestCard.cpp in Sources */,