import WaiMaiQingDan_Config from "./WaiMaiQingDan_Config"; import Common5 from "../../../Platform/th/Common5"; import EventMgr from "../../../FrameWork/Event/EventMgr"; import { ryw_Event } from "../../../FrameWork/Event/EventEnum"; import Game from "../../../Scripts/Game"; import Common from "../../../FrameWork/Util/Common"; const {ccclass, property} = cc._decorator; enum CaiDanStatus{ Up, Down } @ccclass export default class WaiMaiQingDan extends cc.Component { gameId:number = 0; gameInfo = null; touchZIdex = 999; curDanHao = 0;//当前单号 onLoad () { Common.Type = 0; Common.subLevel = 0; Common.GameSubTipConfigs=[Common5.gameConfig.zmGameConfig[Common5.selectGameNum].toolTip] Common.GameSubAnswerConfigs=[Common5.gameConfig.zmGameConfig[Common5.selectGameNum].answer] EventMgr.onEvent_custom(ryw_Event.timeOut, (tab) => { Game.ins.showFail(); }, this); this.gameId = Common5.gameConfig.zmGameConfig[Common5.selectGameNum].gameId this.gameInfo = WaiMaiQingDan_Config.getInstance().getGoodsInfo(this.gameId) } start () { this.initAllGoodsInfo() } //初始化所有物品 initAllGoodsInfo(){ let goodsNodeTab = this.node.getChildByName("goodsNode").children for(var i=0;i<goodsNodeTab.length;i++){ let goodsName = goodsNodeTab[i].name if(this.gameInfo.GoodsNode[goodsName]){ this.initGoodsNodeTouch(goodsNodeTab[i],this.gameInfo.GoodsNode[goodsName]) } } } //初始化物品触摸事件 initGoodsNodeTouch(node:cc.Node,attr){ var attrs = { startPos:node.getPosition(),//初始位置 attributeTab:attr }; node.attr(attrs); //开启触摸 if(this.gameInfo.GoodsNode[node.name].isCanTouch){ this.openTouchEvent(node) } } openTouchEvent(node){ node.on(cc.Node.EventType.TOUCH_START,this.touchStartNode,this) node.on(cc.Node.EventType.TOUCH_MOVE,this.touchMoveNode,this) node.on(cc.Node.EventType.TOUCH_CANCEL,this.touchEndNode,this) node.on(cc.Node.EventType.TOUCH_END,this.touchEndNode,this) } closeTouchEvent(node){ node.off(cc.Node.EventType.TOUCH_START,this.touchStartNode,this) node.off(cc.Node.EventType.TOUCH_MOVE,this.touchMoveNode,this) node.off(cc.Node.EventType.TOUCH_CANCEL,this.touchEndNode,this) node.off(cc.Node.EventType.TOUCH_END,this.touchEndNode,this) } touchStartNode(event){ Common5.playEffect("click") event.target.zIndex = this.touchZIdex++ } touchMoveNode(event){ //完成了组装 if(event.target.attributeTab.isFinishCompose){ return } let nodeLoc = event.getLocation() let nodePos = event.target.parent.convertToNodeSpaceAR(nodeLoc) event.target.setPosition(nodePos) } touchEndNode(event){ //这里是个补丁,不用合成直接打包的情况 if(this.gameInfo.GoodsNode[event.target.name].LinkName == "" && !event.target.attributeTab.isFinishCompose){ this.setComposeSpFrame(event.target,event.target.attributeTab.ComposeStr) event.target.setPosition(event.target.startPos) return } //完成了组装 if(event.target.attributeTab.isFinishCompose){ let flagIndex = this.getFinishGoodsFlagIndex(event.target.attributeTab.ComposeStr) this.closeTouchEvent(event.target) this.moveToWaiMaiXiang(event.target,flagIndex) return } //当前类型节点是否与其他节点类型匹配 let curNodeTypeName = event.target.attributeTab.TypeName for(var key in this.gameInfo.GoodsNode){ if(this.gameInfo.GoodsNode[key].LinkName && this.gameInfo.GoodsNode[key].LinkName != "" && this.gameInfo.GoodsNode[key].LinkName == curNodeTypeName){ //位置是否正确 let targetNode = this.getNodeByName(key) if(targetNode.active && Common5.checkIntersectsBox(targetNode,event.target)){ console.log("合成成功") Common5.playEffect("success2") event.target.active = false this.setComposeSpFrame(targetNode,event.target.attributeTab.ComposeStr) return } } } console.log("zindex还原") event.target.zIndex = -1 event.target.setPosition(event.target.startPos) } //获取完成物品的flagIndex getFinishGoodsFlagIndex(composeStr){ for(var key in this.gameInfo.ComposeSpFrame){ if(composeStr == this.gameInfo.ComposeSpFrame[key].TypeName){ return this.gameInfo.ComposeSpFrame[key].flagIndex } } } //获取物品节点 getNodeByName(nameStr){ let node = this.node.getChildByName("goodsNode").getChildByName(nameStr) return node } //获取克隆的物品组合后的spriteFrame getCloneComposeSpFrame(composeStr){ for(var key in this.gameInfo.ComposeSpFrame){ if(this.gameInfo.ComposeSpFrame[key].TypeName == composeStr){ let cloneNode = cc.instantiate(this.node.getChildByName("composeNode").getChildByName(key)) return cloneNode.getComponent(cc.Sprite).spriteFrame } } } //设置物品组合后的spriteFrame setComposeSpFrame(targetNode,composeStr){ let composeFrame = this.getCloneComposeSpFrame(composeStr) targetNode.getComponent(cc.Sprite).spriteFrame = composeFrame //完成组合,类型名也变成合成后的名 targetNode.attributeTab.isFinishCompose = true this.checkIsCanComposeAgain(targetNode,composeStr) //播放合成特效 let composeSpine = this.node.getChildByName("composeSpine") Common5.setNodeToTargetPos(composeSpine,targetNode) composeSpine.active = true composeSpine.getComponent(sp.Skeleton).setAnimation(0,"dianjiyanwu",false) composeSpine.getComponent(sp.Skeleton).setCompleteListener((trackEntry,loopCount)=>{ composeSpine.active = false }) } //检查是否合成后的物品还可以合成(是的话,更改合成后的属性) checkIsCanComposeAgain(targetNode,composeStr){ for(var key in this.gameInfo.GoodsNode){ if(this.gameInfo.GoodsNode[key].LinkName == composeStr){ targetNode.attributeTab.TypeName = composeStr targetNode.attributeTab.LinkName = this.gameInfo.GoodsNode[key].TypeName targetNode.attributeTab.ComposeStr = this.gameInfo.GoodsNode[key].ComposeStr targetNode.attributeTab.isFinishCompose = false return } } } //移动至外卖盒 moveToWaiMaiXiang(node,flagIndex){ let fixedArea = this.node.getChildByName("waiMaiXiangNode").getChildByName("fixedArea_"+this.curDanHao) this.moveToTargetPosInTime(node,fixedArea,flagIndex) } //指定时间移动到特定位置 moveToTargetPosInTime(curNode,targetNode,flagIndex){ let timeNum = 0.4 //目标节点的本地坐标 let targetLocalPos = targetNode.getPosition() //目标节点的世界坐标 let targetWorldPos = targetNode.parent.convertToWorldSpaceAR(targetLocalPos) //目标节点相对于当前节点父节点的本地坐标 let localPos = curNode.parent.convertToNodeSpaceAR(targetWorldPos) cc.tween(curNode) .to(timeNum,{x:localPos.x,y:localPos.y}) .call(()=>{ Common5.playEffect("success") this.setCaiDanBgUpOrDown(CaiDanStatus.Up) }) .delay(0.2) .call(()=>{ this.setCaiDanFlagVisible(flagIndex) }) .start() } //设置菜单上标记 setCaiDanFlagVisible(flagIndex){ this.node.getChildByName("caiDanNode").getChildByName("caiDanBg").getChildByName("selectFlag_"+flagIndex).active = true this.checkIsFinishTask() } checkIsFinishTask(){ this.curDanHao++ if(this.curDanHao >= this.gameInfo.CaiDanSum){ console.log("完成任务===") Game.ins.showSuccess(); } } setCaiDanBgUpOrDown(status){ let caiDanBg = this.node.getChildByName("caiDanNode").getChildByName("caiDanBg") let offsetY = 0 if(status == CaiDanStatus.Up){ offsetY = 0 }else if(status == CaiDanStatus.Down){ offsetY = -260 } cc.tween(caiDanBg) .to(0.3,{y:offsetY}) .start() } onClickKongBaiArea(){ this.setCaiDanBgUpOrDown(CaiDanStatus.Down) } onClickCaiDanArea(){ this.setCaiDanBgUpOrDown(CaiDanStatus.Up) } }