Blame view

ios/Runner/Wowgame/Classes/CustomViews/AppLinksView.cpp 4.43 KB
cb213901   xiaoyu   添加一个游戏的源码和编译选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  //
  // Created by Katarzyna Kalinowska-Górska on 2019-10-07.
  //
  
  #include "AppLinksView.h"
  #include "SimpleButton.h"
  #include "ScalingUtils.h"
  
  AppLinksView* AppLinksView::create(float width, float height, const std::vector<AppLinkData>& appsData, ParentalGateShowInterface* p_delegate){
      AppLinksView * node = new (std::nothrow) AppLinksView();
      if(node && node->init(width, height, appsData, p_delegate))
      {
          node->autorelease();
          return node;
      }
      CC_SAFE_DELETE(node);
      return nullptr;
  }
  
  AppLinksView* AppLinksView::create(const std::vector<AppLinkData>& appsData, ParentalGateShowInterface* p_delegate){
      AppLinksView * node = new (std::nothrow) AppLinksView();
      if(node && node->init(-1, -1, appsData, p_delegate))
      {
          node->autorelease();
          return node;
      }
      CC_SAFE_DELETE(node);
      return nullptr;
  }
      
  bool AppLinksView::init(float width, float height, const std::vector<AppLinkData>& appsData, ParentalGateShowInterface* p_delegate){
      if(!cocos2d::ui::ScrollView::init()){
          return false;
      }
      
      assert(p_delegate != nullptr);
      m_delegate = p_delegate;
      
      setDirection(cocos2d::ui::ScrollView::Direction::HORIZONTAL);
      bool adjustContentSize = width < 0 || height < 0;
  
      if(!adjustContentSize) {
          setContentSize(cocos2d::Size(width, height));
      }
      setScrollBarEnabled(false);
  
      auto scaleF = ScalingUtils::getAdjustedContentScaleFactor();
      static float PaddingX = 20/scaleF;
      static float PaddingY = 20/scaleF;
  #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
      static std::string PlayStoreBaseLinkApp =  "market://details?id=";
      static std::string PlayStoreBaseLinkWeb =  "https://play.google.com/store/apps/details?id=";
  #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
      static std::string ITunesBaseLink = "itms-apps://itunes.apple.com/app/";
  #endif
  
      auto tempX = PaddingX;
  
      float contentW = 0, contentH = 0;
  
      for(auto it = appsData.begin(); it != appsData.end(); ++it){
  //        m_links.push_back(it->appStoreId);
          
          auto button = SimpleButton::create();
          auto buttonTexturePath = it->iconFilePath;
          button->loadTextures(buttonTexturePath, buttonTexturePath, buttonTexturePath);
          addChild(button);
          button->setPosition(cocos2d::Point(tempX + button->getBoundingBox().size.width/2, PaddingY + button->getBoundingBox().size.height/2));
          tempX += button->getContentSize().width + PaddingX;
          auto haloSprite = cocos2d::Sprite::create("app_links/halo_icon.png");
          haloSprite->setPosition(button->getPosition());
          addChild(haloSprite);
          haloSprite->setOpacity(0);
          haloSprite->setLocalZOrder(0);
          button->setLocalZOrder(1);
  
          button->setOnTouchBeganCallback([haloSprite, button](std::string name, cocos2d::ui::Widget::TouchEventType eventType){
              haloSprite->setScale(button->getScale());
              haloSprite->stopAllActions();
              haloSprite->runAction(cocos2d::FadeIn::create(0.1));
          });
  
          button->setOnTouchEndedCallback([&, haloSprite, button, link = it->storeId](std::string name, cocos2d::ui::Widget::TouchEventType eventType){
              haloSprite->stopAllActions();
              haloSprite->runAction(cocos2d::FadeOut::create(0.1));
              haloSprite->setScale(button->getScale());
              m_delegate->presentParentalGate([&](){
                      m_delegate->hideParentalGate();
  #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
                  if(!cocos2d::Application::getInstance()->openURL(PlayStoreBaseLinkApp + link)){
                      cocos2d::Application::getInstance()->openURL(PlayStoreBaseLinkWeb + link);
                  }
  #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
                      cocos2d::Application::getInstance()->openURL(ITunesBaseLink + link);
  #endif
                  }, [&](){
                      m_delegate->hideParentalGate();
                  });
          });
  
          button->setOnTouchCancelledCallback([haloSprite, button](std::string name, cocos2d::ui::Widget::TouchEventType eventType){
              haloSprite->stopAllActions();
              haloSprite->runAction(cocos2d::FadeOut::create(0.1));
              haloSprite->setScale(button->getScale());
          });
  
          contentH = haloSprite->getBoundingBox().size.height;
          contentW += button->getBoundingBox().size.width*1.4f;
      }
  
      if(adjustContentSize){
          setContentSize(cocos2d::Size(tempX, contentH));
      }
      
      return true;
  }