import gameScene from "./gameScene"; import { App } from "./Manager/App"; import { SoundManager } from "./Manager/SoundManager"; import Beef, { FoodType } from "./Beef"; const {ccclass, property} = cc._decorator; export enum PersonState { None = 0, Comming, Waite, FullOut, HungryOut, }; @ccclass export default class Person extends cc.Component { @property(cc.ProgressBar) pBar: cc.ProgressBar = null; @property([cc.Prefab]) foodKindPerfabs: cc.Prefab[] = []; @property(cc.Node) meun: cc.Node = null; @property(cc.Node) love: cc.Node = null; m_state = PersonState.Comming; leftTime = 50; m_pause = false; foodNum = 3; foodList: cc.Node[] = []; foodTypeList: FoodType[] = []; foodPos: cc.Vec2[] = [cc.v2(-105, 70), cc.v2(-105, 25), cc.v2(-105, -20)]; // LIFE-CYCLE CALLBACKS: onLoad () { this.meun.active = false; this.love.active = false; // 点餐的数量 // this.foodNum = Math.ceil(Math.random() * 3); for (let i = 0; i < this.foodNum; i++) { this.foodTypeList[i] = FoodType.None; } this.leftTime -= App.DataManager.CurrentIntoLevel; } start () { } public setState(state: PersonState){ this.m_state = state; if(state == PersonState.Waite){ this.meun.active = true; this.love.active = true; App.SpinManager.PlaySpinAnimation(this.love, "newAnimation", true); let guideGood = [0, 1, 2]; let foodKind = App.DataManager.levelFoodKind[App.DataManager.CurrentIntoLevel - 1]; for (let i = 0; i < this.foodNum; i++) { let foodIndex = Math.floor(Math.random() * foodKind); if(App.DataManager.guideStep < 5){ foodIndex = guideGood[i]; } let food = cc.instantiate(this.foodKindPerfabs[foodIndex]); food.setScale(0.5); food.setPosition(this.foodPos[i]); this.node.addChild(food); this.foodList[i] = food; this.foodTypeList[i] = foodIndex + 1; } this.pBar.progress = 1; if(!this.m_pause){ cc.tween(this.pBar).to(this.leftTime, {progress: 0}).call(()=>{ this.setState(PersonState.HungryOut); }).start(); } } else if(state == PersonState.FullOut){ App.DataManager.MissionComplete[2]++; App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.list_missionComplete, App.DataManager.MissionComplete); cc.Tween.stopAllByTarget(this.pBar); this.meun.active = false; this.love.active = false; } else if(state == PersonState.HungryOut){ // gameFail gameScene.instance.GameFail(); } } public getFoodWorldPos(foodt: FoodType): cc.Vec2{ for (let i = 0; i < this.foodNum; i++) { if(this.foodTypeList[i] == foodt){ this.addFoodCoin(foodt); this.foodTypeList[i] = FoodType.None; cc.tween(this.foodList[i]).delay(0.5).call(()=>{ this.foodList[i].removeFromParent(); this.foodList[i] = null; }).start(); return this.node.convertToWorldSpaceAR(this.foodPos[i]); } } } addFoodCoin(foodt: FoodType){ switch(foodt){ case FoodType.PureSteak: App.DataManager.MissionComplete[0]++; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[0][App.DataManager.foodLevel[0]]; break; case FoodType.Drink: App.DataManager.MissionComplete[1]++; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[1][App.DataManager.foodLevel[1]]; break; case FoodType.CocumberSteak: App.DataManager.MissionComplete[0]++; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[0][App.DataManager.foodLevel[0]]; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[2][App.DataManager.foodLevel[2]]; break; case FoodType.TomatoSteak: App.DataManager.MissionComplete[0]++; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[0][App.DataManager.foodLevel[0]]; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[3][App.DataManager.foodLevel[3]]; break; case FoodType.YellowSteak: App.DataManager.MissionComplete[0]++; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[0][App.DataManager.foodLevel[0]]; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[4][App.DataManager.foodLevel[4]]; break; case FoodType.RedSteak: App.DataManager.MissionComplete[0]++; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[0][App.DataManager.foodLevel[0]]; gameScene.instance.curLevelWinCoin += App.DataManager.foodSoldCoin[5][App.DataManager.foodLevel[5]]; break; } App.LocalStorageUtil.setJsonObj(App.LocalStorageUtil.list_missionComplete, App.DataManager.MissionComplete); gameScene.instance.updateWinCoin(); App.SoundManager.playEffect(SoundManager.addCoin); } public judgeFoodFull(): boolean{ for (let i = 0; i < this.foodNum; i++) { // console.log("aaa------judgeFoodFull----", this.foodTypeList[i]); if(this.foodTypeList[i] != FoodType.None) { return false; } } return true; } update (dt) { if(this.m_state != PersonState.Waite) return; if(!this.m_pause){ this.leftTime -= dt; } } }