// Learn cc.Class: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/class.html // - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/class.html // Learn Attribute: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html // - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html // - [English] http://www.cocos2d-x.org/docs/creator/en/scripting/life-cycle-callbacks.html module.exports = { //extends: cc.Component, properties: { // foo: { // // ATTRIBUTES: // default: null, // The default value will be used only when the component attaching // // to a node for the first time // type: cc.SpriteFrame, // optional, default is typeof default // serializable: true, // optional, default is true // }, // bar: { // get () { // return this._bar; // }, // set (value) { // this._bar = value; // } // }, }, // LIFE-CYCLE CALLBACKS: // onLoad () {}, __createAD: function(adtype, adunitid, bannerY, canvasH, owner){ let obj = owner; if(!owner){ obj = { adType: adtype, adUnitId: adunitid, state: 0 }; } switch(this.channelid){ case 6001: { if(adtype == 0){ let realy = this.winH / 2 - bannerY / canvasH * this.winH - 80 / 2; if(!obj.style){ obj.style = { left: 0, top: realy, width: this.winW, height: 80, //realWidth: nc.width, //realHeight: nc.height }; } let data = { adUnitId: adunitid, style: obj.style }; if(wx && wx.createBannerAd){ let ad = wx.createBannerAd(data); obj.ad = ad; } /* ad.onResize(res => { console.log("[bannerad]onResize:" + res.width + "," + res.height); console.log("[bannerad]style:" + JSON.stringify(ad)); }); */ }else if(adtype == 1){ let data = { adUnitId: adunitid }; if(wx && wx.createRewardedVideoAd){ let ad = wx.createRewardedVideoAd(data); obj.ad = ad; } } }break; case 6002: { if(adtype == 0){ let realy = this.winH / 2 - bannerY / canvasH * this.winH - 80 / 2; if(!obj.style){ obj.style = { x: 0, y: realy //realWidth: nc.width, //realHeight: nc.height }; } let data = { viewId: adunitid, style: obj.style }; if(BK && BK.Advertisement && BK.Advertisement.createBannerAd){ let ad = BK.Advertisement.createBannerAd(data); obj.ad = ad; } }else if(adtype == 1){ if(BK && BK.Advertisement && BK.Advertisement.createVideoAd){ let ad = BK.Advertisement.createVideoAd(); obj.ad = ad; } } }break; } return obj; }, init(channelid, gameid, isoffical, owner){ this.owner = owner; this.gameid = gameid; this.channelid = channelid; this.BannerAds = []; this.VideoAds = []; this.cleanBannerAD(); this.cleanVideoAD(); }, setAccountID(accountid, sessionid){ this.accountid = accountid; this.sessionid = sessionid; }, setNickName(nickname){ this.nickname = nickname; }, setFromAppID(appid){ this.fromid = appid; }, setLocalUUID(uuid){ this.localid = uuid; }, setSystemInfo(info){ this.winW = info.windowWidth; this.winH = info.windowHeight; }, addBannerAD(advid, identifier, bannerY, canvasH, rspCb){ var adobj = this.__createAD(0, advid, bannerY, canvasH); if(adobj){ adobj.param = identifier; adobj.rspCb = rspCb; this.initAD(adobj); this.BannerAds.push(adobj); } return ad; }, addVideoAD(advid, identifier, rspCb){ var adobj = this.__createAD(1, advid); if(adobj){ adobj.param = identifier; adobj.rspCb = rspCb; this.initAD(adobj); this.VideoAds.push(adobj); } }, // update (dt) {}, reLoadBannerAD(identifier){ let obj = this.BannerAds.find((element) => { return element.param == identifier; }) if(obj && obj.ad && obj.style){ let id = obj.adUnitId; this.destoryAD(obj.ad); this.__createAD(0, id, 0, 0, obj); } return obj; }, hasBannerAD(identifier){ let obj = this.findBannerAD(identifier); if(obj && obj.ad){ return true; } return false; }, hasVideoAD(identifier){ let obj = this.findVideoAD(identifier); if(obj && obj.ad){ return true; } return false; }, findBannerAD(identifier){ let obj = this.BannerAds.find((element) => { return element.param == identifier; }) return obj; }, findVideoAD(identifier){ let obj = this.VideoAds.find((element) => { return element.param == identifier; }) return obj; }, hideAllAD(){ this.BannerAds.forEach(element => { this.hideAD(element); }); }, switchBannerAD (identifier, bShow){ this.hideAllAD(); if(bShow){ let obj = reLoadBannerAD(identifier); obj.needshow = true; this.showAD(obj); } }, showRewardAD (identifier){ let obj = this.findVideoAD(identifier); if(!obj || !obj.ad){ return; } obj.needshow = true; this.loadAD(obj); }, onLoadAD(obj){ console.log("[ad]onload"); obj.rspCb && obj.rspCb(100, obj); if(obj.needshow){ this.showAD(obj); } }, onErrAD(errtype, err, obj){ console.log('[AD]err:' + errtype); console.log(err); obj.needshow = false; obj.rspCb && obj.rspCb(errtype, obj, err); }, destoryAD(ad){ if(!ad){ return; } ad.state = 30; ad.destroy && ad.destroy(); }, showAD(obj){ let ad = obj.ad; if(!ad){ return; } ad.state = 10; ad.show && ad.show(); }, hideAD(obj){ let ad = obj.ad; if(!ad){ return; } ad.state = 20; ad.hide && ad.hide(); }, loadAD(obj){ let ad = obj.ad; if(!ad){ return; } ad.state = 100; switch(this.channelid){ case 6001: { ad.load && ad.load(); }break; case 6002:{ this.onLoadAD(obj); }break; } }, initAD(obj){ let ad = obj.ad; if(!ad){ return; } ad.onLoad && ad.onLoad(() => { console.log("[ad]onload"); this.onLoadAD(obj); }); ad.onError && ad.onError(res => { console.log("[ad]onerror:"+JSON.stringify(res)); this.onErrAD(-obj.state, res, obj); }); switch(this.channelid){ case 6001:{ let closeCb = function(res){ console.log("[ad]onClose:"+JSON.stringify(res)); if (res && res.isEnded || res === undefined) { obj.rspCb && obj.rspCb(10, obj, res, res.isEnded); } else { obj.rspCb && obj.rspCb(11, obj, res, false); } }; ad.onClose && ad.onClose(closeCb); }break; case 6002:{ let closeCb = function(res){ console.log("[ad]onClose:"+JSON.stringify(res)); obj.rspCb && obj.rspCb(11, obj, null, false); // ad.offClose && ad.offClose(closeCb); }; ad.onPlayFinish && ad.onPlayFinish(function () { obj.rspCb && obj.rspCb(10, obj, null, true); }); ad.onClose && ad.onClose(closeCb); }break; } }, cleanBannerAD(){ if(this.BannerAds.length > 0){ this.BannerAds.forEach(element => { this.destoryAD(element.ad); }); this.BannerAds.length = 0; } }, cleanVideoAD(){ if(this.VideoAds.length > 0){ this.VideoAds.length = 0; } } };