| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- var webView = require("../WebView");
- var lib = require("../Library");
- var server = require("../MiniGameServer");
- var globalConfig = require("../Global");
- cc.Class({
- extends: cc.Component,
- properties: {
- nextSceneName: {
- default: '',
- },
- player1: {
- default: null,
- type: cc.Node,
- },
- player2: {
- default: null,
- type: cc.Node,
- },
- titleTxt: {
- default: null,
- type: cc.Node,
- },
- timeTxt: {
- default: null,
- type: cc.Node,
- },
- waitTxt: {
- default: null,
- type: cc.Node,
- },
- successAudio: {
- default: null,
- type: cc.AudioClip,
- },
- meteorLine: {
- default: null,
- type: cc.Node,
- },
- },
- onLoad() {
- this.init();
- //从服务器下载获取当前玩家信息 get player info from webserver
-
- if (lib.openInWebview()) {
- //运行在手机浏览器
- this.getPlayerInfoFromWebServer();
- }
- else{
- //开始匹配
- this.startMatching();
- }
- //count down time to match ui 开启计时,时间到没有匹配到玩家就生成Ai开始游戏
- let interval = 1; // 以秒为单位的时间间隔let
- let repeat = cc.macro.REPEAT_FOREVER; // 重复次数
- let delay = 0; // 开始延时
- this.schedule(this.countTime, interval, repeat, delay);
- // 预加载下一个游戏场景
- // because loading scene not a immediately stuff,A smart phone will cost 5-8 second for loading
- if(this.nextSceneName!='')
- {
- cc.director.preloadScene(this.nextSceneName, function () {
- cc.log("Next scene preloaded");
- });
- }
- },
- init() {
- this.matchTime = 0;
- this.name1 = this.player1.getChildByName('Name');
- this.name2 = this.player2.getChildByName('Name');
- this.gender1 = this.player1.getChildByName('Gender');
- this.gender2 = this.player2.getChildByName('Gender');
- this.avatarSp1 = this.player1.getChildByName('Mask').getChildByName('AvatarSp');
- this.avatarSp2 = this.player2.getChildByName('Mask').getChildByName('AvatarSp');
- },
- getPlayerInfoFromWebServer(){
- //init web sdk
- // 在app内Webview打开
- webView.register(this.node);
- this.node.on('onGameInit',this.onGameInit,this);
- this.node.on('onAiRandomInfo',this.onAiRandomInfo,this);
- this.node.on('onUrlToBase64',this.onUrlToBase64,this);
- },
- countTime() {
- //update countdown time on UI
- this.timeTxt.getComponent(cc.Label).string = this.updateTime(this.matchTime);
- this.matchTime++;
- if (this.matchTime > 20)
- {
- this.unschedule(this.countTime);
- this.generateAI();
- }
- },
- updateTime(t) {
- let theTime = Math.floor(t);
- let theTime1 = 0;// 分
- if (theTime > 60)
- {
- theTime1 = parseInt(theTime / 60);
- theTime = parseInt(theTime % 60);
- }
- let result = (theTime1 < 10 ? "0" + theTime1 : theTime1) + ":" + (theTime < 10 ? "0" + theTime : theTime);
- return result;
- },
- startMatching() {
- let Self = this;
- globalConfig.openid = new Date().getMilliseconds().toString();
-
- server.login(globalConfig.openid,globalConfig.name,globalConfig.avatarUrl,globalConfig.gender,function(){
- server.match(globalConfig.openid,'lockStep',function (roomId,other_openid,other_name,other_avatarUrl,other_gender) {
- Self.matched(roomId,other_openid,other_name,other_avatarUrl,other_gender,false);
- });
- });
- },
- matched(roomId,other_openid,other_name,other_avatarUrl,other_gender,bAi) {
- //停止计时 stop counting down time
- this.unschedule(this.countTime);
- // cancel ai
- globalConfig.bAi = bAi;
- //保存对手的信息 save rival info
- globalConfig.roomId = roomId;
- globalConfig.rivalOpenid = other_openid;
- globalConfig.rivalAvatarUrl = other_avatarUrl;
- globalConfig.rivalName = other_name;
- globalConfig.rivalGender = other_gender;
- //change top UI
- this.meteorLine.active = true;
- this.titleTxt.getComponent(cc.Label).string = "匹配成功";
- this.timeTxt.active = false;
- this.waitTxt.active = false;
- //show rival information
- this.player2.getChildByName("DotAnimation").active = false;
- this.player2.active = true;
- this.name2.active = true;
- this.gender2.active = true;
- this.avatarSp2.active = true;
- //渠道下一个场景 go to next scene
- if(this.nextSceneName!='')
- {
- cc.director.loadScene(this.nextSceneName);
- }
- },
- setGender(gender, bBoy) {
- this.iconBoy = gender.getChildByName('IconBoy');
- this.iconGirl = gender.getChildByName('IconGirl');
- if (!bBoy) {
- this.iconBoy.active = true;
- this.iconGirl.active = false;
- } else {
- this.iconBoy.active = false;
- this.iconGirl.active = true;
- }
- },
- loadAvatar(avatarBase64,callback)
- {
- lib.setImageBase64(avatarBase64,function (texture2D) {
- let frame = new cc.SpriteFrame(texture2D);
- callback && callback(frame);
- });
- },
- resetRivalUIByData(userName, gender, avatarBase64) {
- this.name2.getComponent(cc.Label).string = userName;
- this.setGender(this.gender2, gender);
- // loading avatar
- //for mobile device we need to download avatar whatever AI or others
- this.loadAvatar(avatarBase64, function (frame) {
- this.avatarSp2.getComponent(cc.Sprite).spriteFrame = frame;
- cc.audioEngine.playEffect(this.successAudio, false);
- this.scheduleOnce(() => {
- this.matched(globalConfig.rivalAvatarUrl,globalConfig.rivalName,globalConfig.rivalGender,true);
- }, 2);
- }.bind(this));
- },
- generateAI() {
- if (lib.openInWebview())// 在app内Webview打开
- {
- // match failed so we need to get a Ai information to start game
- webView.getAiInfo();
- } else {
- // TODO
- // In browser we just use default information to generate AI
- this.resetRivalUIByData(globalConfig.name, globalConfig.gender, globalConfig.avatarBase64);
- }
- },
- onUrlToBase64(data)
- {
- globalConfig.rivalavatarBase64 = data.base64;
- this.resetRivalUIByData(globalConfig.rivalName, globalConfig.rivalGender, globalConfig.rivalAvatarBase64);
- },
- onGameInit(data) {
- globalConfig.name = data.userName;
- globalConfig.avatarUrl = data.avatarUrl;
- globalConfig.avatarBase64 = data.avatarBase64Url;
- globalConfig.gender = data.gender;
- globalConfig.calorieParams = data.calorieParams;
- globalConfig.device = data.device;
- this.initPlayerUI(globalConfig.name, globalConfig.gender,globalConfig.avatarBase64);
-
- //开始匹配
- this.startMatching();
- },
- initPlayerUI(name,gender,avatarBase64) {
- this.name1.getComponent(cc.Label).string = name;
- this.setGender(this.gender1, gender);
- this.loadAvatar(avatarBase64,function (frame) {
- this.avatarSp1.getComponent(cc.Sprite).spriteFrame = frame;
- }.bind(this));
- },
- onAiRandomInfo(data) {
- globalConfig.rivalAvatarBase64 = data.aiAvatarBase64Url;
- globalConfig.rivalName = data.aiName;
- globalConfig.rivalGender = data.aiGender;
- this.resetRivalUIByData(globalConfig.rivalName, globalConfig.rivalGender, globalConfig.rivalAvatarBase64);
- },
- });
|