// Learn TypeScript: // - https://docs.cocos.com/creator/2.4/manual/en/scripting/typescript.html // Learn Attribute: // - https://docs.cocos.com/creator/2.4/manual/en/scripting/reference/attributes.html // Learn life-cycle callbacks: // - https://docs.cocos.com/creator/2.4/manual/en/scripting/life-cycle-callbacks.html import { ryw_Event } from "../../FrameWork/Event/EventEnum"; import EventMgr from "../../FrameWork/Event/EventMgr"; import User from "../../FrameWork/User/User"; import AppPlatform from "../../FrameWork/Util/AppPlatform"; import Common5 from "../../Platform/th/Common5"; import LevelUpManager from "../Manager/LevelUpManager"; import UserManager from "../Manager/UserManager"; // import buildManager from "../Manager/buildManager"; import PrefabManage, { GameType } from "../PrefabManager/PrefabManage"; import ViewManageConfig from "../PrefabManager/ViewManageConfig"; import PinTuFinish from "./PinTuFinish"; const { ccclass, property } = cc._decorator; @ccclass export default class PinTuStart extends cc.Component { @property(cc.Node) areaMove: cc.Node = null; @property(cc.Node) areaFangzhi: cc.Node = null; areaMoveArray: cc.Node[] = [] //因为会随着zindex的变化children会改变所以直接用数组存起来 pituNum = 0 pituMaxNum = 0 name = '' nodeZindex = 1 isAutoPin = false setPintuName(name) { this.name = name } // LIFE-CYCLE CALLBACKS: pintuArray = null // onLoad () {} checkMove = null // manHanQuanXiFragmentMap = [ // [1,1709], // [2,1713], // [3,1712], // [4,1710], // [5,1714], // [6,1716], // [7,1715], // [8,1711] // ] miaozhuanAllLab: cc.Label = null findAreaFangzhiNode: cc.Node = null start() { EventMgr.onEvent_custom(ryw_Event.ExitBtnEvent, () => { if (User.getStatistics('smallgameptCurGoLevel') > 0) { PrefabManage.loadPrefabByType(GameType.SuccessGetMoney, null, (prefab) => { prefab.getComponent('SuccessGetMoney').setViewDate("", 1, 5) }) } }, this) // let isEnterManhan = buildManager.getIsEnterManHan(this.name) // let buildName = buildManager.getBuildNameByCaipuName(this.name) let shouyi = 10//buildManager.getBuildIncome(buildName) let lay = this.node.getChildByName('完成拼图').getChildByName('lay') this.miaozhuanAllLab = lay.getChildByName('lab1').getComponent(cc.Label) this.miaozhuanAllLab.string = Common5.getNumberChangeHanzi(shouyi * 15) + '' this.checkMove = this.node.getChildByName('checkMove') let pintuArray = []//User.getPintuArray() // if( !pintuArray[ this.name ] ){ let temp = [] for (let i = 0; i < this.areaFangzhi.childrenCount; i++) { let temp2 = [] if (i == 0 || i == this.areaFangzhi.childrenCount - 1) { temp2 = [i, i] } else { temp2 = [i, -1] } temp.push(temp2) } pintuArray[this.name] = temp // User.setPintuArray(pintuArray) this.pintuArray = pintuArray[this.name] // }else{ // this.pintuArray = pintuArray[ this.name ] // } console.log(this.pintuArray, 'pintuArray++++++++++===') PrefabManage.preloadPrefabArray([ViewManageConfig.PinTuFinish]) this.pituMaxNum = this.areaMove.childrenCount this.refreshBtn() this.randFangzhiPosi() // if(isEnterManhan){ // //拼图 // let btn = this.node.getChildByName('按钮自动拼图') // btn.active = false // this.node.getChildByName('完成拼图').active = false // for(let i = 0; i= this.pituMaxNum) { this.showResult() } } randFangzhiPosi() { for (let i = 0; i < this.areaMove.childrenCount; i++) { if (this.areaMove.children[i].active = true) { let randPosX = Common5.getRandomNum(-220, 220) let randPosY = Common5.getRandomNum(-50, 50) let node = this.areaMove.children[i] // node.scale = 0.5 node.setPosition(cc.v2(randPosX, randPosY)) node.angle = Common5.getRandomNum(-20, 20) node['recoveryPosi'] = node.getPosition() node['recoveryAngle'] = node.angle node['recoveryScale'] = node.scale node['registerIndex'] = i node['moveStart'] = true //注册节点 // node['targetNode'] = this.areaFangzhi.children[i] // this.areaFangzhi.children[i].active = false // node.active = true this.openTouchEvent(node) } } } openTouchEvent2(node) { node.on(cc.Node.EventType.TOUCH_END, this.touchEndNode2, this) } closeTouchEvent2(node) { node.on(cc.Node.EventType.TOUCH_END, this.touchEndNode2, this) } touchEndNode2(event) { // //发现碎片 // let mabu = this.node.getChildByName('发光碎片').getChildByName('mabu') // if(mabu){ // mabu.active = true // mabu.getComponent(sp.Skeleton).setAnimation(0, 'ma', false) // this.scheduleOnce(()=>{ // mabu.active = false // this.node.getChildByName('满汉全席碎片').active = true // this.node.getChildByName('发光碎片').active = false // let index = buildManager.getIsEnterManHanSuiPianIndex(this.name) // this.areaFangzhi.children[index].active = false // PrefabManage.showTextTips('获得,满汉全席碎片'+(index-3)) // this.closeTouchEvent2(event.target) // this.checkTaskFinsh() // },1.5) // } } 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: cc.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) { // event.target.scale = 1 // event.target.angle = 0 event.target.zIndex = this.nodeZindex++ cc.tween(event.target) .to(0.1, { scale: 1, angle: 0 }) .start() } touchMoveNode(event) { let target = event.target let posi = event.getLocation()//世界坐标 posi = target.parent.convertToNodeSpaceAR(posi) target.setPosition(posi) } getPosiNode(fromNode, toNode) { return fromNode.parent.convertToNodeSpaceAR(cc.v2(toNode.convertToWorldSpaceAR(cc.v2(0, 0)))) } touchEndNode(event) { let target = event.target; let registerIndex = target['registerIndex']; if (Common5.checkIntersectsBox(target, this.checkMove)) { for (let i = 0; i < this.pintuArray.length; i++) { //找到那个图片 if (this.pintuArray[i][1] == registerIndex) { this.pintuArray[i][1] = -1 break } } this.countPintuNum() this.nodeMoveToRecovery(target, target["recoveryPosi"], target["recoveryAngle"], target['recoveryScale']) } else { //可能有多个重合的拼图 //找出距离最近的拼图 let findMinLeng = 0 let findMinNode: cc.Node = null let posi: cc.Vec2 = event.getLocation() let findX = -1 for (let i = 0; i < this.areaFangzhi.childrenCount; i++) { if (Common5.checkIntersectsBox(target, this.areaFangzhi.children[i])) { let targetLocalPos = this.areaFangzhi.children[i].getPosition() //目标节点的世界坐标 let targetWorldPos = this.areaFangzhi.children[i].parent.convertToWorldSpaceAR(targetLocalPos) let targetLocalPos2 = target.getPosition() //目标节点的世界坐标 let targetWorldPos2 = target.parent.convertToWorldSpaceAR(targetLocalPos2) let dis = targetWorldPos2.sub(targetWorldPos).mag() if (findMinLeng == 0) { findMinLeng = dis findMinNode = this.areaFangzhi.children[i] findX = i } if (findMinLeng > dis) { findMinLeng = dis findMinNode = this.areaFangzhi.children[i] findX = i } } } if (findMinNode) { if (this.pintuArray[findX][1] == -1) { // console.log('直接进行位置转移') let posi = Common5.getNodeToTargetPos(target, findMinNode) cc.tween(target) .to(0.2, { x: posi.x, y: posi.y }) .start() if (target['moveStart']) { //直接移动 console.log('直接进行位置转移2 直接移动') } else { //原来的地方也需要重新变为空 console.log('直接进行位置转移2 原来的地方也需要重新变为空') for (let i = 0; i < this.pintuArray.length; i++) { //找到那个图片 if (this.pintuArray[i][1] == registerIndex) { this.pintuArray[i][1] = -1 break } } } this.pintuArray[findX][1] = registerIndex //当前拼图状态 this.countPintuNum() target['moveStart'] = false } else if (this.pintuArray[findX][1] != -1) { if (target['moveStart']) { //重叠的话上面的图片回到原位,当前图片移动到这上面 console.log('重叠的话上面的图片回到原位,当前图片移动到这上面') let findChongdieIndex = this.pintuArray[findX][1] let findChongdieNode = this.areaMoveArray[findChongdieIndex] this.nodeMoveToRecovery(findChongdieNode, findChongdieNode["recoveryPosi"], findChongdieNode["recoveryAngle"], findChongdieNode['recoveryScale']) this.pintuArray[findX][1] = registerIndex //当前拼图状态 this.countPintuNum() let posi = Common5.getNodeToTargetPos(target, findMinNode) target['moveStart'] = false cc.tween(target) .to(0.2, { x: posi.x, y: posi.y }) .start() } else { //交换图片 console.log('交换图片,交换位置') target['moveStart'] = false let findChongdieIndex = this.pintuArray[findX][1] let findChongdieNode = this.areaMoveArray[findChongdieIndex] let findTargetIndex = -1 for (let i = 0; i < this.pintuArray.length; i++) { //找到那个图片 if (this.pintuArray[i][1] == registerIndex) { findTargetIndex = i break } } //交换数据 this.pintuArray[findTargetIndex][1] = findChongdieIndex this.pintuArray[findX][1] = registerIndex //交换位置 this.countPintuNum() let posi = Common5.getNodeToTargetPos(target, findMinNode) cc.tween(target) .to(0.2, { x: posi.x, y: posi.y }) .start() let findMinNode2 = this.areaFangzhi.children[this.pintuArray[findTargetIndex][0]] let posi2 = Common5.getNodeToTargetPos(findChongdieNode, findMinNode2) cc.tween(findChongdieNode) .to(0.2, { x: posi2.x, y: posi2.y }) .start() } } } } } autoPintu(target, findMinNode, findX) { let registerIndex = target['registerIndex']; if (findMinNode) { if (this.pintuArray[findX][1] == -1) { // console.log('直接进行位置转移') let posi = Common5.getNodeToTargetPos(target, findMinNode) cc.tween(target) .to(0.2, { x: posi.x, y: posi.y }) .start() if (target['moveStart']) { //直接移动 console.log('直接进行位置转移2 直接移动') } else { //原来的地方也需要重新变为空 console.log('直接进行位置转移2 原来的地方也需要重新变为空') for (let i = 0; i < this.pintuArray.length; i++) { //找到那个图片 if (this.pintuArray[i][1] == registerIndex) { this.pintuArray[i][1] = -1 break } } } this.pintuArray[findX][1] = registerIndex //当前拼图状态 this.countPintuNum() target['moveStart'] = false } else if (this.pintuArray[findX][1] != -1) { if (target['moveStart']) { //重叠的话上面的图片回到原位,当前图片移动到这上面 console.log('重叠的话上面的图片回到原位,当前图片移动到这上面') let findChongdieIndex = this.pintuArray[findX][1] let findChongdieNode = this.areaMoveArray[findChongdieIndex] this.nodeMoveToRecovery(findChongdieNode, findChongdieNode["recoveryPosi"], findChongdieNode["recoveryAngle"], findChongdieNode['recoveryScale']) this.pintuArray[findX][1] = registerIndex //当前拼图状态 this.countPintuNum() let posi = Common5.getNodeToTargetPos(target, findMinNode) target['moveStart'] = false cc.tween(target) .to(0.2, { x: posi.x, y: posi.y }) .start() } else { //交换图片 console.log('交换图片,交换位置') target['moveStart'] = false let findChongdieIndex = this.pintuArray[findX][1] let findChongdieNode = this.areaMoveArray[findChongdieIndex] let findTargetIndex = -1 for (let i = 0; i < this.pintuArray.length; i++) { //找到那个图片 if (this.pintuArray[i][1] == registerIndex) { findTargetIndex = i break } } //交换数据 this.pintuArray[findTargetIndex][1] = findChongdieIndex this.pintuArray[findX][1] = registerIndex //交换位置 this.countPintuNum() let posi = Common5.getNodeToTargetPos(target, findMinNode) cc.tween(target) .to(0.2, { x: posi.x, y: posi.y }) .start() let findMinNode2 = this.areaFangzhi.children[this.pintuArray[findTargetIndex][0]] let posi2 = Common5.getNodeToTargetPos(findChongdieNode, findMinNode2) cc.tween(findChongdieNode) .to(0.2, { x: posi2.x, y: posi2.y }) .start() } } } } showResult() { //取消注册 for (let i = 0; i < this.areaMoveArray.length; i++) { this.closeTouchEvent(this.areaMoveArray[i]) } // let pintuArray = User.getPintuArray() // delete pintuArray[ this.name ] // User.setPintuArray(pintuArray) // let buildName = buildManager.getBuildNameByCaipuName(this.name) // buildManager.setPintuFinish(buildName) //任务的拼图菜谱和这个name // let pinTuId = buildManager.getBuildIdByName(buildName) // TaskManager.checkIsFinishPinTuTask(pinTuId) // TaskManager.checkIsFinishPinTuTaskArray() //检测拼图多个 let faguang = this.node.getChildByName('发光') let xingxing = this.node.getChildByName('星星') faguang.zIndex = 9999 faguang.active = true xingxing.active = true faguang.getComponent(sp.Skeleton).setAnimation(0, 'animation', false) this.scheduleOnce(() => { PrefabManage.loadPrefabByType(GameType.PinTuFinish, null, (prefabNode) => { prefabNode.getComponent(PinTuFinish).setPintuName(this.name); this.node.removeFromParent() this.node.destroy() }) }, 1.5) } nodeMoveToRecovery(node, oldPosi: cc.Vec2, angleNum: number, scaleNum: number) { node['moveStart'] = true cc.tween(node) .to(0.1, { x: oldPosi.x, y: oldPosi.y, angle: angleNum, scale: scaleNum }) .start() } refreshBtn() { let btn = this.node.getChildByName('按钮自动拼图') let adIcon = btn.getChildByName('蓝色按钮视频') let lab = btn.getChildByName('lab').getComponent(cc.Label) // let buildName = buildManager.getBuildNameByCaipuName(this.name) let num = 5//buildManager.getFreePintuNum(buildName) if (num > 0) { adIcon.active = false lab.string = num + '/5' } else { adIcon.active = true lab.string = '0/5' } } addPintuTime() { let btn = this.node.getChildByName('按钮自动拼图') let adIcon = btn.getChildByName('蓝色按钮视频') // let buildName = buildManager.getBuildNameByCaipuName(this.name) if (adIcon.active) { let tab = { onClose: (finish) => { if (finish) { Common5.ReportDY("inLevel", "自动拼图-AD-增加次数"); // buildManager.setFreePintuNum(buildName,5) this.refreshBtn() } else { Common5.showTips_custom("广告未观看完"); } }, onFailed: () => { } } AppPlatform.playVideo_custom(tab) } else { //自动拼图 if (this.isAutoPin) { PrefabManage.showTextTips('不要操作太快哦!') return } this.isAutoPin = true // let num = buildManager.getFreePintuNum(buildName) // num-- // buildManager.setFreePintuNum(buildName,num) this.refreshBtn() let findIndex = 0 for (let i = 0; i < this.pintuArray.length; i++) { let array = this.pintuArray[i] if (array[0] != array[1]) { findIndex = i break } } let target = null for (let i = 0; i < this.areaMoveArray.length; i++) { if (this.areaMoveArray[i]['registerIndex'] == this.pintuArray[findIndex][0]) { target = this.areaMoveArray[i] break } } //找出不对劲的图片给他摆正 this.scheduleOnce(() => { this.isAutoPin = false }, 0.2) if (!target) { return } let findMinNode = this.areaFangzhi.children[this.pintuArray[findIndex][0]] //找到移动的地方 cc.tween(target) .to(0.1, { scale: 1, angle: 0 }) .start() this.autoPintu(target, findMinNode, this.pintuArray[findIndex][0]) //fix me // let findNode = null // for(let i=0;i 0) { UserManager.addMoney(LevelUpManager.levelUpSpned(), this.node) } this.node.removeFromParent() this.node.destroy() } }