import Role from "./Role"; import Bot from "./Bot"; import Saw from "./Saw"; import Settlement from "../Panel/Settlement"; const {ccclass, property} = cc._decorator; @ccclass export default class Controller extends cc.Component { roles:Role[] = new Array(); saws:cc.Node[] = new Array(); gameOver:boolean = false; onLoad(){ window.controller = this; cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE); cc.director.getPhysicsManager().enabled = true; cc.director.getCollisionManager().enabled = true; // cc.director.getCollisionManager().enabledDebugDraw = true; } startGame(){ let playerIndex = Math.floor(Math.random()*4); let positions = [cc.v2(-450,180),cc.v2(-150,120),cc.v2(150,120),cc.v2(450,180)]; for(let i=0;i<4;i++){ this.createRole(positions.shift(),i,i==playerIndex?false:true); } this.showStartCountDownAnimation(this.node,()=>{ this.createSaw(cc.v2(0,250),cc.v2(-1000,0),1000); this.createSaw(cc.v2(0,250),cc.v2(-700,-700),1000); this.createSaw(cc.v2(0,250),cc.v2(700,-700),1000); this.createSaw(cc.v2(0,250),cc.v2(1000,0),1000); }); cc.find('Canvas/KeyBoardPanel').active = true; } createRole(position:cc.Vec2,index:number,isBot:boolean){ let node = cc.instantiate(window.resource.pf_Role); node.setPosition(position); let role = node.addComponent(Role); role.index = index; window.map.node.addChild(node); if(!isBot){ role.activeDeltaGreen(); window.playerRole = role; } this.roles.push(role); if(isBot){ node.addComponent(Bot); } } destroyRole(role:Role){ if(this.roles.indexOf(role)>-1){ let ary = new Array(); this.roles.forEach((elem)=>{ if(elem!=role){ ary.push(elem); } }); this.roles = ary; role.node.destroy(); } if(this.roles.length==1){ let index = this.roles[0].index setTimeout(()=>{ this.showSettlementPanel(index); },360); } } showSettlementPanel(index:number){ this.gameOver = true; let panel = cc.find('Canvas/SettlementPanel'); panel.active = true; panel.getComponent(Settlement).showWinner(index); } createSaw(position:cc.Vec2, linearVelocity:cc.Vec2, angularVelocity:number){ let node = cc.instantiate(window.resource.pf_Saw); node.setPosition(position); node.addComponent(Saw); node.getComponent(cc.RigidBody).linearVelocity = linearVelocity; node.getComponent(cc.RigidBody).angularVelocity = angularVelocity; window.map.node.addChild(node); this.saws.push(node); } destroySaw(saw:cc.Node){ if(this.saws.indexOf(saw)>-1){ let ary = new Array(); this.saws.forEach((elem)=>{ if(elem!=saw){ ary.push(elem); } }); this.saws = ary; saw.destroy(); } } showStartCountDownAnimation(parent:cc.Node,callback:Function):void{ for(let i=3;i>=0;i--){ this.scheduleOnce(()=>{ let node = new cc.Node(); node.addComponent(cc.Sprite).spriteFrame = window.resource['sf_StartCountDownAnimation'][i]; node.zIndex = 10; node.setScale(2.5); node.setPosition(0,150); parent.addChild(node); node.runAction(cc.sequence(cc.scaleBy(0.6,0.8).easing(cc.easeBackInOut()),cc.callFunc(()=>{ node.destroy(); if(i==0&&callback){ callback(); } },this))); },3-i); } } }