import Beef, { BeefState, FoodType } from "./Beef"; import gameScene from "./gameScene"; import guidePanel from "./guide/guidePanel"; import { App } from "./Manager/App"; import Person, { PersonState } from "./Person"; import TipPanel from "./view/tipPanel/TipPanel"; import TipPanelMediator from "./view/tipPanel/TipPanelMediator"; import AESUtil from "./AESUtil" import ATSDK from "./AnyThinkAds/ATJSSDK"; import ATRewardedVideoSDK from "./AnyThinkAds/ATRewardedVideoJSSDK"; import AAJS2 from "./ATAndroidJS2"; import GlobalManager from './GlobalManager'; import ATInterstitialSDK from "./AnyThinkAds/ATInterstitialJSSDK"; import ATBannerSDK from "./AnyThinkAds/ATBannerJSSDK"; import { AdType } from './ATAndroidJS2'; const { ccclass, property } = cc._decorator; @ccclass export default class Table extends cc.Component { private static _instance: Table = null; // @property([cc.SpriteFrame]) // private tableSpriteFrame: cc.SpriteFrame[] = []; @property(cc.Button) btnShengNiuPai: cc.Button = null; rawSteakList: cc.Node[] = [null, null, null, null]; cookedSteakList: cc.Node[] = [null, null, null, null]; @property(cc.Prefab) prefabBeef: cc.Prefab = null; @property(cc.Button) btnYellowSouce: cc.Button = null; @property(cc.Button) btnCocumber: cc.Button = null; @property(cc.Button) btnTomato: cc.Button = null; @property(cc.Button) btnRedSouce: cc.Button = null; @property(cc.Node) liuShui: cc.Node = null; @property(cc.Node) drinkCup: cc.Node = null; @property([cc.Node]) kaoPanGaiZi: cc.Node[] = []; @property([cc.Node]) plateGaiZi: cc.Node[] = []; @property([cc.Node]) cupGaiZi: cc.Node[] = []; @property(cc.ProgressBar) pDrinkBar: cc.ProgressBar = null; m_shuiLiuTime = 3; @property(cc.Prefab) fullCup: cc.Prefab = null; drinkCupList: cc.Node[] = []; kaoPanNum = 2; plateNum = 2; cupNum = 3; beefBornPos: cc.Vec3[] = [cc.v3(-290, -185, 0), cc.v3(-197, -195, 0), cc.v3(-243, -131, 0), cc.v3(-160, -133, 0)]; platePos: cc.Vec3[] = [cc.v3(-58, -200, 0), cc.v3(80, -201, 0), cc.v3(-52, -126, 0), cc.v3(68, -131, 0)]; burntPos: cc.Vec3 = cc.v3(-360, -640, 0); cupPos: cc.Vec3[] = [cc.v3(258, -209, 0), cc.v3(232, -161, 0), cc.v3(205, -115, 0)]; // ------------------------person--------------------------- @property([cc.Prefab]) renwuPerfabList: cc.Prefab[] = []; personList: cc.Node[] = []; // 点餐位置 personPos: cc.Vec3[] = [cc.v3(30, 38, 0), cc.v3(260, 38, 0), cc.v3(-200, 38, 0)]; // 人物出生位置 bornPos: cc.Vec3[] = [cc.v3(-500, 38, 0), cc.v3(550, 38, 0)]; fixTime = 1; passTime = 0; personWalkTime = 2; createpPersonNum = 0; //已经来了到少人 fullPersonNum = 0; //多少吃饱了 maxSitPersonNum = 3; //总共只能坐下人数 kaoJiaoCount = 0;//合计烤焦了多少个? // LIFE-CYCLE CALLBACKS: public static getInstance(): any { if (this._instance == null) { this._instance = new Table(); } return this._instance; } onLoad() { Table._instance = this; this.btnShengNiuPai.node.on(cc.Node.EventType.TOUCH_END, this.onClickShengNiuPai.bind(this), this); this.btnYellowSouce.node.on(cc.Node.EventType.TOUCH_END, this.onClickYellowSouce.bind(this), this); this.btnCocumber.node.on(cc.Node.EventType.TOUCH_END, this.onClickCocumber.bind(this), this); this.btnTomato.node.on(cc.Node.EventType.TOUCH_END, this.onClickTomato.bind(this), this); this.btnRedSouce.node.on(cc.Node.EventType.TOUCH_END, this.onClickRedSouce.bind(this), this); // this.drinksMachine.node.on(cc.Node.EventType.TOUCH_END, this.onClickDrinksMachine.bind(this), this); for (let i = 0; i < this.maxSitPersonNum; i++) { this.personList[i] = null; } this.plateNum = App.DataManager.kitchenNum[0][App.DataManager.kinchenLevel[0]]; this.kaoPanNum = App.DataManager.kitchenNum[1][App.DataManager.kinchenLevel[1]]; this.cupNum = App.DataManager.kitchenNum[2][App.DataManager.kinchenLevel[2]]; this.initAdForPage(); } initAdForPage() { if (cc.sys.os === cc.sys.OS_ANDROID) { let deviceId = AAJS2.getDeviceUserId(); console.log("zh:checkstatus:", ATRewardedVideoSDK.checkAdStatus(AAJS2.getPlacementId())); var setting = {}; setting[ATRewardedVideoSDK.userIdKey] = deviceId; ATRewardedVideoSDK.loadRewardedVideo(AAJS2.getPlacementId(), setting); } } start() { for (let i = 0; i < this.kaoPanNum - 2; i++) { this.kaoPanGaiZi[i].active = false } for (let i = 0; i < this.plateNum - 2; i++) { this.plateGaiZi[i].active = true } for (let i = 0; i < this.cupNum - 1; i++) { this.cupGaiZi[i].active = true } if (App.DataManager.CurrentIntoLevel >= 3) { this.btnTomato.node.active = true; } if (App.DataManager.CurrentIntoLevel >= 5) { this.btnYellowSouce.node.active = true; } if (App.DataManager.CurrentIntoLevel >= 7) { this.btnRedSouce.node.active = true; } this.onClickDrinksMachine(); if (App.DataManager.guideStep == 0) { guidePanel.getInstance().showCurGuide(); } } onClickShengNiuPai() { if (App.DataManager.guideStep == 0) { App.DataManager.guideStep++; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.str_guideStep, App.DataManager.guideStep); guidePanel.getInstance().hideGuideStep(); } for (let i = 0; i < this.kaoPanNum; i++) { if (this.rawSteakList[i] == null) { let beef = cc.instantiate(this.prefabBeef); beef.on(cc.Node.EventType.TOUCH_END, this.onClickRawBeef.bind(this, i), beef); beef.setPosition(this.beefBornPos[i]); this.node.addChild(beef); this.rawSteakList[i] = beef; break; } } } onClickRawBeef(index: number) { console.log('zh: 已经烤焦=' + this.kaoJiaoCount); if (this.rawSteakList[index].getComponent(Beef).m_state == BeefState.Burnt) { console.log('zh: 已经烤焦了'); var c1 = this.kaoJiaoCount + 1; this.kaoJiaoCount = c1; // 每烤焦2次执行惩罚 if (c1 % 2 === 0) { // 当烤焦次数为2的倍数时执行惩罚 this.kaoJiaoCount = 0;// 重置计数器 console.log('zh: 需要惩罚'); if (cc.sys.os == cc.sys.OS_ANDROID) { if (ATRewardedVideoSDK.hasAdReady(AAJS2.getPlacementId())) { console.log('zh:AD ok!'); cc.director.pause(); console.log('zh: 游戏已暂停'); cc.sys.localStorage.setItem('yxAdMark', 'callBackFor_kaoJiao');//看广告用于 xx 标记 cc.sys.localStorage.setItem('yxAdMark_index', index);//参数 GlobalManager.instance.registerMethod('callBackFor_kaoJiao', this.callBackFor_kaoJiao.bind(this)); ATRewardedVideoSDK.showAd(AAJS2.getPlacementId()); } else { console.log('zh:AD NO OK'); this.callBackFor_kaoJiao(index); this.initAdForPage(); return; } } else { console.log('zh: H5 直接奖励'); this.callBackFor_kaoJiao(index); return; } }else{ this.callBackFor_kaoJiao(index); return; } // App.Facade.popView(TipPanelMediator, TipPanel, "The steak is burnt!", false); // cc.tween(this.rawSteakList[index]).to(0.5, {position: this.burntPos}).removeSelf().start() // this.rawSteakList[index] = null; return; } else if (this.rawSteakList[index].getComponent(Beef).m_state == BeefState.Cooked) { for (let i = 0; i < this.plateNum; i++) { if (!this.cookedSteakList[i]) { this.rawSteakList[index].targetOff(this.rawSteakList[index]); // this.rawSteakList[index].off(cc.Node.EventType.TOUCH_END, this.onClickRawBeef.bind(this, index), this); this.cookedSteakList[i] = this.rawSteakList[index]; this.rawSteakList[index] = null; // 从烤架移动到盘子里面 this.cookedSteakList[i].getComponent(Beef).setState(BeefState.Plate); this.cookedSteakList[i].on(cc.Node.EventType.TOUCH_END, this.onClickCookedBeef.bind(this, i), this); cc.tween(this.cookedSteakList[i]).to(0.5, { position: this.platePos[i] }).start() break; } } if (App.DataManager.guideStep == 1) { App.DataManager.guideStep++; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.str_guideStep, App.DataManager.guideStep); guidePanel.getInstance().showCurGuide(); } } } //烤焦了惩罚 callBackFor_kaoJiao(index: number) { cc.director.resume(); console.log('zh: 游戏已恢复'); console.log('zh:callBackFor_kaoJiao 被触发 index = ' + index); App.Facade.popView(TipPanelMediator, TipPanel, "The steak is burnt!", false); cc.tween(this.rawSteakList[index]).to(0.5, { position: this.burntPos }).removeSelf().start() this.rawSteakList[index] = null; return; } // 点击熟牛排 onClickCookedBeef(index: number) { if (App.DataManager.guideStep == 3) { App.DataManager.guideStep++; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.str_guideStep, App.DataManager.guideStep); guidePanel.getInstance().showCurGuide(); } // todo 移动到人 // 移动到人之后,从数组里面删除 let toPos = this.findFoodPos(this.cookedSteakList[index].getComponent(Beef).m_foodType); if (toPos) { let pos = this.node.convertToNodeSpaceAR(toPos); cc.tween(this.cookedSteakList[index]).to(0.5, { position: pos, scale: 0.5 }).removeSelf().start(); this.cookedSteakList[index] = null; } } onClickYellowSouce() { for (let i = 0; i < this.cookedSteakList.length; i++) { if (this.cookedSteakList[i] && this.cookedSteakList[i].getComponent(Beef).m_state == BeefState.Cocumber) { this.cookedSteakList[i].getComponent(Beef).setState(BeefState.YellowSouce); break; } } } onClickCocumber() { if (App.DataManager.guideStep == 2) { App.DataManager.guideStep++; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.str_guideStep, App.DataManager.guideStep); guidePanel.getInstance().showCurGuide(); } for (let i = 0; i < this.cookedSteakList.length; i++) { if (this.cookedSteakList[i] && this.cookedSteakList[i].getComponent(Beef).m_state == BeefState.Plate) { this.cookedSteakList[i].getComponent(Beef).setState(BeefState.Cocumber); break; } } } onClickTomato() { for (let i = 0; i < this.cookedSteakList.length; i++) { if (this.cookedSteakList[i] && this.cookedSteakList[i].getComponent(Beef).m_state == BeefState.Plate) { this.cookedSteakList[i].getComponent(Beef).setState(BeefState.Tomato); break; } } } onClickRedSouce() { for (let i = 0; i < this.cookedSteakList.length; i++) { if (this.cookedSteakList[i] && this.cookedSteakList[i].getComponent(Beef).m_state == BeefState.Tomato) { this.cookedSteakList[i].getComponent(Beef).setState(BeefState.RedSouce); break; } } } onClickDrinksMachine() { this.pDrinkBar.node.active = true; this.liuShui.active = true; App.SpinManager.PlaySpinAnimation(this.liuShui, "newAnimation", true, null); App.SpinManager.PlaySpinAnimation(this.drinkCup, "newAnimation", false, null); this.pDrinkBar.progress = 0; cc.tween(this.pDrinkBar).to(this.m_shuiLiuTime, { progress: 1 }).call(() => { this.pDrinkBar.node.active = false; this.liuShui.active = false; this.drinkCup.getComponent(sp.Skeleton).animation = null; for (let i = 0; i < this.cupNum; i++) { if (!this.drinkCupList[i]) { let cup = cc.instantiate(this.fullCup); cup.setPosition(this.drinkCup.getPosition()); this.node.addChild(cup); cup.zIndex = this.cupNum - i; this.drinkCupList[i] = cup; cup.on(cc.Node.EventType.TOUCH_END, this.onClickFullCup.bind(this, i), this); if (i == 0) { cc.tween(cup).to(0.5, { position: this.cupPos[0] }).start(); } else { cc.tween(cup).to(0.5, { position: this.cupPos[0] }).to(0.2, { position: this.cupPos[i] }).start(); } } } }).start(); } // 点击饮料 onClickFullCup(index: number) { // todo 移动到人 if (App.DataManager.guideStep == 4) { App.DataManager.guideStep++; App.LocalStorageUtil.setNumber(App.LocalStorageUtil.str_guideStep, App.DataManager.guideStep); guidePanel.getInstance().hideGuideStep(); } // 移动到人之后,从数组里面删除 let toPos = this.findFoodPos(FoodType.Drink); if (toPos) { let pos = this.node.convertToNodeSpaceAR(toPos); cc.tween(this.drinkCupList[index]).to(0.3, { position: pos, scale: 0.5 }).removeSelf().start(); this.drinkCupList[index] = null; // this.m_machineState = DrinksMachineState.None; this.onClickDrinksMachine(); } } onDisable() { this.btnShengNiuPai.node.off(cc.Node.EventType.TOUCH_END, this.onClickShengNiuPai.bind(this), this); this.btnYellowSouce.node.off(cc.Node.EventType.TOUCH_END, this.onClickYellowSouce.bind(this), this); this.btnCocumber.node.off(cc.Node.EventType.TOUCH_END, this.onClickCocumber.bind(this), this); this.btnTomato.node.off(cc.Node.EventType.TOUCH_END, this.onClickTomato.bind(this), this); this.btnRedSouce.node.off(cc.Node.EventType.TOUCH_END, this.onClickRedSouce.bind(this), this); } // 找到点这个食物剩余时间最少的人 findFoodPos(foodt: FoodType): cc.Vec3 { let curPerson = null; let personIndex = -1; let lessLeftTime = 100; for (let i = 0; i < this.maxSitPersonNum; i++) { if (this.personList[i] && this.personList[i].getComponent(Person).m_state == PersonState.Waite) { // 点餐种类 let fTypelist = this.personList[i].getComponent(Person).foodTypeList; let time = this.personList[i].getComponent(Person).leftTime; for (let j = 0; j < fTypelist.length; j++) { if (foodt == fTypelist[j] && lessLeftTime > time) { lessLeftTime = time; personIndex = i; curPerson = this.personList[i]; } } } } if (curPerson) { let worldPos = curPerson.getComponent(Person).getFoodWorldPos(foodt); if (curPerson.getComponent(Person).judgeFoodFull()) { this.fullPersonNum++; let smallLevel = App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel]; if (this.fullPersonNum == App.DataManager.personCount[App.DataManager.CurrentIntoLevel - 1][smallLevel - 1]) { // GameSuccess this.personList[personIndex] = null; let rand = Math.round(Math.random()); cc.tween(curPerson).delay(0.6).call(() => { curPerson.getComponent(Person).setState(PersonState.FullOut); if (rand == 1) { curPerson.getChildByName("renwu").scaleX = -0.5; } }).to(this.personWalkTime, { position: this.bornPos[rand] }).call(() => { curPerson.removeFromParent(); }).start(); gameScene.instance.GameSuccess(); } else { let rand = Math.round(Math.random()); this.personList[personIndex] = null cc.tween(curPerson).delay(0.6).call(() => { curPerson.getComponent(Person).setState(PersonState.FullOut); if (rand == 1) { curPerson.getChildByName("renwu").scaleX = -0.5; } }).to(this.personWalkTime, { position: this.bornPos[rand] }).call(() => { curPerson.removeFromParent(); }).start(); } } return worldPos; } return null; } update(dt) { if (!gameScene.instance.GameStutas) return; this.passTime += dt; let smallLevel = App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel]; if (this.passTime >= this.fixTime && this.createpPersonNum < App.DataManager.personCount[App.DataManager.CurrentIntoLevel - 1][smallLevel - 1]) { this.passTime = 0; this.fixTime = 1; console.log("aaa-------randomIndex---------", smallLevel); for (let i = 0; i < this.maxSitPersonNum; i++) { if (!this.personList[i]) { let randomIndex = Math.floor(Math.random() * this.renwuPerfabList.length); let person = cc.instantiate(this.renwuPerfabList[randomIndex]) person.getComponent(Person).setState(PersonState.Comming); person.zIndex = -1; this.node.addChild(person); this.personList[i] = person; let rand = Math.round(Math.random()); person.setPosition(this.bornPos[rand]); if (rand == 0) { person.getChildByName("renwu").scaleX = -0.5; } App.SpinManager.PlaySpinAnimation(person.getChildByName("renwu"), "newAnimation", true); cc.tween(person).to(this.personWalkTime, { position: this.personPos[i] }).call(() => { person.getChildByName("renwu").scaleX = 0.5; person.getComponent(Person).setState(PersonState.Waite); }).start(); this.createpPersonNum++; let smallLevel = App.DataManager.PassProgress[App.DataManager.CurrentIntoLevel]; gameScene.instance.updateLeftPeople(App.DataManager.personCount[App.DataManager.CurrentIntoLevel - 1][smallLevel - 1] - this.createpPersonNum); break; } } } } }