1002 lines
37 KiB
TypeScript
1002 lines
37 KiB
TypeScript
/**
|
||
* 挑战游戏 节点
|
||
*/
|
||
|
||
import AudioManager from "../../Tools/AudioManager";
|
||
import Define from "../../Tools/Define";
|
||
import GameResMgr, { soundName, uiPreName } from "../../Tools/GameResMgr";
|
||
import PlayData, { GameState } from "../../Tools/PlayData";
|
||
import AdsApiMgr, { plaformName } from "../../Tools/Sdk/ads/AdsApiMgr";
|
||
import Utils from "../../Tools/Utils";
|
||
import gameStorage from "../../Tools/gameStorage";
|
||
import TipsManager from "../TipsManager";
|
||
import ChallengeSuccessSc from "./ChallengeSuccessSc";
|
||
import TimeOutPanelSc from "./TimeOutPanelSc";
|
||
import kapaiSc from "./kapaiSc";
|
||
import {TrackingManager, TrackingType} from "../../Tracking/TrackingManager";
|
||
|
||
const {ccclass, property} = cc._decorator;
|
||
|
||
@ccclass
|
||
export default class ChallengeGameSc extends cc.Component {
|
||
|
||
@property(cc.Prefab)
|
||
dikuang:cc.Prefab = null
|
||
|
||
@property(cc.Prefab)
|
||
kapaiPre:cc.Prefab = null
|
||
|
||
@property(cc.Node)
|
||
dizuo:cc.Node = null
|
||
|
||
@property(cc.Node) //用于移动卡牌 过渡节点 ,移动卡牌的时候 ,卡牌在最高层
|
||
moveNode:cc.Node = null
|
||
|
||
@property(cc.Node)
|
||
notouch:cc.Node = null
|
||
|
||
@property(cc.Layout)
|
||
dizuolayout:cc.Layout = null
|
||
|
||
@property(cc.Label)
|
||
guanstr:cc.Label = null
|
||
|
||
@property(cc.Label)
|
||
timestr:cc.Label = null
|
||
|
||
@property(cc.Label)
|
||
bushustr:cc.Label = null
|
||
|
||
dizuoState = [] //底座状态 0未解锁,1解锁
|
||
|
||
levelNum = 0
|
||
mixlevelNum = 0
|
||
maxlevelNum = 0
|
||
moveUp = 15
|
||
|
||
selectNodeArr = [] //选中的节点
|
||
selectIndex = -1
|
||
mubiaoIndex = -1
|
||
|
||
allNodeArr = []
|
||
|
||
posXY = [[-72,0], [-24,0], [24,0], [72,0]]
|
||
|
||
//posY = [0, -20, -40, -60, -80, -100, -120, -140, -160, -180]
|
||
|
||
maxKaPaiNum = 4 //一个框最多放置 数量
|
||
|
||
linshijiesuo = 0 //可用于临时解锁的id
|
||
|
||
linshiOperatorNum = [] //
|
||
|
||
time01 = 0.01
|
||
|
||
weizhigailv = 1
|
||
|
||
gameconfigdata = null
|
||
|
||
allkapaisezhi = []
|
||
|
||
needHeCheng = 0 //需要达成条件的个数
|
||
shengyukapaizuhe = 0
|
||
|
||
yushuLabel:cc.Label = null
|
||
|
||
operateNum = 0
|
||
|
||
countdown = 600 //倒计时10分钟
|
||
useTime = 0
|
||
|
||
operateRecord = [] //操作记录
|
||
|
||
bushuIndex = 0 //步数计数
|
||
|
||
zuhenum = 0
|
||
|
||
onLoad () {
|
||
//关卡数据
|
||
PlayData.Instance.storageGameDate = gameStorage.Instance.getShengJiCheckOutData()
|
||
PlayData.Instance.guanqia = PlayData.Instance.storageGameDate[0]
|
||
this.countdown = PlayData.Instance.storageGameDate[1]
|
||
this.useTime = 600 - this.countdown
|
||
this.bushuIndex = PlayData.Instance.storageGameDate[6]
|
||
this.updateBuShuIndex(this.bushuIndex)
|
||
this.operateNum = 0
|
||
this.operateRecord = []
|
||
PlayData.Instance.gamestate = GameState.start
|
||
|
||
this.notouch.active = !1
|
||
|
||
let guan = PlayData.Instance.guanqia
|
||
|
||
this.gameconfigdata = Define.cl_gamedata[0] //Define.cl_gamedata[guan]
|
||
|
||
console.log('打印配置信息', Define.cl_gamedata[0])
|
||
|
||
this.zuhenum = this.gameconfigdata.zuhenum + PlayData.Instance.guanqia * 5
|
||
|
||
console.log('游戏组合数量', this.zuhenum)
|
||
|
||
this.dizuolayout.spacingX = this.gameconfigdata.spacex
|
||
this.dizuolayout.spacingY = this.gameconfigdata.spacey
|
||
|
||
this.guanstr.string = '关卡' + (guan+1)
|
||
this.updateTime(this.countdown)
|
||
//this.timestr.string = '00:00'
|
||
|
||
this.schedule(()=>{
|
||
if(PlayData.Instance.gamestate != GameState.gaming) return
|
||
this.countdown --
|
||
this.useTime++
|
||
PlayData.Instance.storageGameDate[1] = this.countdown
|
||
this.updateTime(this.countdown)
|
||
}, 1, cc.macro.REPEAT_FOREVER)
|
||
}
|
||
|
||
start () {
|
||
AdsApiMgr.Instance.recording_Video_Start()
|
||
this.initGameConfig()
|
||
//this.initGame()
|
||
}
|
||
|
||
/**
|
||
* 初始化一些配置
|
||
*/
|
||
initGameConfig(){
|
||
let shuzu = []
|
||
|
||
this.dizuoState = PlayData.Instance.storageGameDate[2]
|
||
for (let index = 0; index < this.dizuoState.length; index++) {
|
||
const element = this.dizuoState[index];
|
||
let dikuang = cc.instantiate(this.dikuang)
|
||
dikuang.scale = this.gameconfigdata.dizuoscale
|
||
dikuang.name = 'di' + index
|
||
//dikuang.on(cc.Node.EventType.TOUCH_END, this.kapainodeBtnClick, this)
|
||
dikuang.parent = this.dizuo
|
||
cc.find('mubiao', dikuang).active = !1
|
||
cc.find('duigou', dikuang).active = !1
|
||
if(element == 0){
|
||
cc.find('suo', dikuang).active = !0
|
||
cc.find('suoicon', dikuang).active = !0
|
||
cc.find('shipinTag', dikuang).active = !0
|
||
cc.find('yushukuang', dikuang).active = !1
|
||
}else if(element == 1){
|
||
cc.find('suo', dikuang).active = !1
|
||
cc.find('suoicon', dikuang).active = !1
|
||
cc.find('shipinTag', dikuang).active = !1
|
||
cc.find('yushukuang', dikuang).active = !1
|
||
}else if(element == 2){
|
||
cc.find('suo', dikuang).active = !0
|
||
cc.find('suoicon', dikuang).active = !0
|
||
cc.find('shipinTag', dikuang).active = !1
|
||
cc.find('yushukuang', dikuang).active = !1
|
||
}else if(element == 3){
|
||
cc.find('suo', dikuang).active = !0
|
||
cc.find('suoicon', dikuang).active = !1
|
||
cc.find('shipinTag', dikuang).active = !1
|
||
cc.find('yushukuang', dikuang).active = !0
|
||
}
|
||
if(index == this.dizuoState.length-1){
|
||
this.yushuLabel = cc.find('yushukuang/hechengshu', dikuang).getComponent(cc.Label)
|
||
}
|
||
}
|
||
|
||
if(PlayData.Instance.storageGameDate[3].length > 0){
|
||
this.allkapaisezhi = PlayData.Instance.storageGameDate[4]
|
||
this.scheduleOnce(()=>{this.initGame()}, 0.6)
|
||
}else{
|
||
/** 升级版本 begin */
|
||
let linshishuzu = []
|
||
this.needHeCheng = this.zuhenum
|
||
var sezhizuhe = []
|
||
if(PlayData.Instance.guanqia == 0){
|
||
sezhizuhe = [1,2,3,4,5,6,7,8]
|
||
}else if(PlayData.Instance.guanqia == 1){
|
||
sezhizuhe = [1,2,3,4,5,6,7,8,9,10,11,12,13]
|
||
}else if(PlayData.Instance.guanqia == 2){
|
||
sezhizuhe = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
|
||
}else {
|
||
let num = 20
|
||
sezhizuhe = Utils.getRandomValueDif(1,Define.totalSeZhi-1,20)
|
||
}
|
||
|
||
for (let index = 0; index < this.zuhenum; index++) {
|
||
let len = sezhizuhe.length-1
|
||
let randind = Utils.getRangeRandom(1, len)
|
||
//console.log('打印randind=',randind)
|
||
let randindex = sezhizuhe[randind]
|
||
let linshidata = [randindex, randindex, randindex, randindex]
|
||
linshishuzu = linshishuzu.concat(linshidata)
|
||
}
|
||
linshishuzu = Utils.shuffle(linshishuzu)
|
||
linshishuzu = Utils.shuffle(linshishuzu)
|
||
while(linshishuzu.length > 0){
|
||
let xiaozu = []
|
||
let zhi = linshishuzu.shift()
|
||
xiaozu.push(zhi)
|
||
zhi = linshishuzu.shift()
|
||
xiaozu.push(zhi)
|
||
zhi = linshishuzu.shift()
|
||
xiaozu.push(zhi)
|
||
zhi = linshishuzu.shift()
|
||
xiaozu.push(zhi)
|
||
this.allkapaisezhi.push(xiaozu)
|
||
}
|
||
this.scheduleOnce(()=>{this.initGame()}, 0.6)
|
||
//this.moveNode.scale = this.gameconfigdata.dizuoscale
|
||
/** 升级版本 end */
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 初始化
|
||
*/
|
||
initGame(){
|
||
if(PlayData.Instance.storageGameDate[3].length > 0){
|
||
for (let index = 0; index < this.dizuoState.length; index++) {
|
||
let di = cc.find('di'+index, this.dizuo)
|
||
let kapainode = cc.find('kapainode', di)
|
||
kapainode.removeAllChildren()
|
||
kapainode.on(cc.Node.EventType.TOUCH_END, this.kapainodeBtnClick, this)
|
||
|
||
let sezhinum = PlayData.Instance.storageGameDate[3][index]
|
||
if(sezhinum.length > 0){
|
||
for (let ind = 0; ind < sezhinum.length; ind++) {
|
||
const leixing = sezhinum[ind];
|
||
this.addNewKaPai(kapainode, leixing, true)
|
||
}
|
||
}
|
||
}
|
||
this.needHeCheng = PlayData.Instance.storageGameDate[5]
|
||
this.yushuLabel.string = '' + this.allkapaisezhi.length
|
||
}else{
|
||
let usenum = 0
|
||
for (let index = 0; index < this.dizuoState.length; index++) {
|
||
//const ele = this.dizuoState[index];
|
||
let di = cc.find('di'+index, this.dizuo)
|
||
let kapainode = cc.find('kapainode', di)
|
||
kapainode.removeAllChildren()
|
||
kapainode.on(cc.Node.EventType.TOUCH_END, this.kapainodeBtnClick, this)
|
||
|
||
PlayData.Instance.storageGameDate[3][index] = []
|
||
if(this.dizuoState[index] == 1 && -1 == this.gameconfigdata.kong.indexOf(index)){
|
||
let sezhinum = this.allkapaisezhi.shift()
|
||
PlayData.Instance.storageGameDate[3][index] = sezhinum
|
||
for (let index = 0; index < sezhinum.length; index++) {
|
||
const leixing = sezhinum[index];
|
||
this.addNewKaPai(kapainode, leixing, true)
|
||
}
|
||
usenum ++
|
||
}else if(index == (this.dizuoState.length-1)){
|
||
let sezhinum = this.allkapaisezhi.shift()
|
||
PlayData.Instance.storageGameDate[3][index] = sezhinum
|
||
for (let index = 0; index < sezhinum.length; index++) {
|
||
const leixing = sezhinum[index];
|
||
this.addNewKaPai(kapainode, leixing, true)
|
||
}
|
||
usenum ++
|
||
}
|
||
}
|
||
PlayData.Instance.storageGameDate[4] = this.allkapaisezhi
|
||
gameStorage.Instance.setShengJiCheckOutData(PlayData.Instance.storageGameDate)
|
||
this.yushuLabel.string = '' + this.allkapaisezhi.length
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 视频解锁 卡槽
|
||
*/
|
||
videoJieSuoDiZuo(num){
|
||
this.dizuoState[num] = 1
|
||
this.linshiOperatorNum[num] = 0
|
||
let di = cc.find('di'+num, this.dizuo)
|
||
let suo = cc.find('suo', di)
|
||
suo.active = !1
|
||
|
||
cc.find('suoicon', di).active = !1
|
||
cc.find('shipinTag', di).active = !1
|
||
|
||
PlayData.Instance.storageGameDate[2][num] = 1
|
||
gameStorage.Instance.setShengJiCheckOutData(PlayData.Instance.storageGameDate)
|
||
|
||
// if(num == 11){
|
||
// this.linshijiesuo = 9
|
||
// }else{
|
||
// this.linshijiesuo = num + 1
|
||
// }
|
||
// if(this.dizuoState[this.linshijiesuo] == 0){
|
||
// let nextsuo = cc.find('di'+(this.linshijiesuo) + '/suo', this.dizuo).getComponent(cc.Sprite)
|
||
// cc.resources.load('kapaikuang/dikuang3', cc.SpriteFrame, (err, assert)=>{
|
||
// if(err) return console.error(err)
|
||
// nextsuo.spriteFrame = assert as cc.SpriteFrame
|
||
// })
|
||
// }
|
||
|
||
AudioManager.playEffect(soundName.kaikacao)
|
||
}
|
||
|
||
/**
|
||
* 点击一堆牌
|
||
*/
|
||
kapainodeBtnClick(t){
|
||
|
||
//开始游戏 计时
|
||
PlayData.Instance.gamestate = GameState.gaming
|
||
|
||
let moveUp = this.moveUp
|
||
let parentname:string = t.currentTarget.parent.name
|
||
let chaifen = parentname.split('di')
|
||
let e = chaifen[1]
|
||
if(this.selectIndex == -1){
|
||
if(this.dizuoState[Number(e)] == 2){return}
|
||
if(this.dizuoState[Number(e)] == 0){ //未解锁
|
||
var self = this
|
||
AdsApiMgr.Instance.motivational_Video_Show(()=>{
|
||
self.videoJieSuoDiZuo(Number(e))
|
||
}, ()=>{})
|
||
return
|
||
}
|
||
if(t.currentTarget.children.length > 0){
|
||
AudioManager.playEffect(soundName.xuanka)
|
||
let selectTarget = t.currentTarget
|
||
let lastnode = selectTarget.children[selectTarget.children.length - 1]
|
||
let lastnodesc:kapaiSc = lastnode.getComponent(kapaiSc)
|
||
this.selectIndex = Number(e) //选中的
|
||
for (let index = selectTarget.children.length; index > 0; index--) {
|
||
let zinode = selectTarget.children[index-1]
|
||
let sc:kapaiSc = zinode.getComponent(kapaiSc)
|
||
|
||
if(sc.kaNum != lastnodesc.kaNum){
|
||
break
|
||
}else{
|
||
zinode.y += moveUp
|
||
//this.selectNodeArr.push(zinode)
|
||
this.selectNodeArr.push(zinode)
|
||
//zinode.getComponent(cc.Animation).play()
|
||
}
|
||
}
|
||
|
||
if(this.selectNodeArr.length == 4){
|
||
this.kapaiReset()
|
||
this.operateRecord = []
|
||
this.heChengKaPai(selectTarget, this.selectIndex)
|
||
this.notouch.active = !0
|
||
}else{
|
||
this.operateRecord[2] = selectTarget
|
||
}
|
||
}
|
||
}else{
|
||
if(this.dizuoState[Number(e)] == 2){return this.kapaiReset()}
|
||
if(this.dizuoState[Number(e)] == 0){return TipsManager.Instance.createTips('未解锁')}
|
||
|
||
if(this.selectIndex == Number(e)){ //点击相同位置,复位
|
||
AudioManager.playEffect(soundName.xuanka)
|
||
this.kapaiReset()
|
||
}else{ //移到对应的位置
|
||
this.mubiaoIndex = Number(e)
|
||
this.operateRecord[0] = []
|
||
if(t.currentTarget.children.length >= this.maxKaPaiNum){ //点击的位置满了
|
||
this.kapaiReset(1)
|
||
return
|
||
}else if(t.currentTarget.children.length == 0){ //点击的位置 没有卡牌 ,选中的全部移动
|
||
this.bushuIndex++
|
||
this.updateBuShuIndex(this.bushuIndex)
|
||
let moveindex = 0
|
||
for (let index = this.selectNodeArr.length; index > 0; index--) {
|
||
const element = this.selectNodeArr[index-1];
|
||
//element.getComponent(cc.Animation).stop()
|
||
//element.scale = 1
|
||
this.moveKaPai(element, t.currentTarget)
|
||
this.operateRecord[0].push(element)
|
||
moveindex ++
|
||
}
|
||
if(cc.find('di' + this.selectIndex + '/duigou', this.dizuo).active == !0){
|
||
cc.find('di' + this.selectIndex + '/duigou', this.dizuo).active = !1
|
||
this.needHeCheng++
|
||
}
|
||
let kapainode = cc.find('di' + this.selectIndex + '/kapainode', this.dizuo)
|
||
this.scheduleOnce(()=>{this.checkWenHao(kapainode)}, this.selectNodeArr.length*this.time01+0.2)
|
||
this.selectIndex = -1
|
||
this.selectNodeArr = []
|
||
this.operateRecord[1] = t.currentTarget
|
||
return
|
||
}
|
||
|
||
this.bushuIndex++
|
||
this.updateBuShuIndex(this.bushuIndex)
|
||
|
||
let mubiaochildren = t.currentTarget.children
|
||
let selectchildren = this.selectNodeArr
|
||
let mubiaonode = mubiaochildren[mubiaochildren.length - 1]
|
||
let mubiaonodesc = mubiaonode.getComponent(kapaiSc)
|
||
let selectnode = selectchildren[0]
|
||
let selectnodesc = selectnode.getComponent(kapaiSc)
|
||
|
||
let parent = selectnode.parent
|
||
let cha = parent.children.length - selectchildren.length
|
||
|
||
if(selectnodesc.kaNum == mubiaonodesc.kaNum){ //选中和要放置的位置最上面的卡牌一样 可以移动
|
||
let moveindex = 0
|
||
let totalnum = t.currentTarget.children.length
|
||
let duoyu = 0
|
||
for (let index = this.selectNodeArr.length; index > 0; index--) {
|
||
const element = this.selectNodeArr[index-1];
|
||
//element.getComponent(cc.Animation).stop()
|
||
//element.scale = 1
|
||
if(totalnum + moveindex >= this.maxKaPaiNum){
|
||
element.x = this.posXY[cha + duoyu][0]
|
||
element.y = this.posXY[cha + duoyu][1]
|
||
duoyu++
|
||
}else{
|
||
let zongtime = 0
|
||
if((totalnum + this.selectNodeArr.length) > this.maxKaPaiNum){
|
||
let yushu = this.maxKaPaiNum - totalnum
|
||
zongtime = yushu * this.time01
|
||
}else{
|
||
zongtime = this.selectNodeArr.length * this.time01
|
||
}
|
||
//let deltime = 0.1*moveindex
|
||
this.moveKaPai(element, t.currentTarget)
|
||
this.operateRecord[0].push(element)
|
||
moveindex ++
|
||
}
|
||
}
|
||
|
||
if(cc.find('di' + this.selectIndex + '/duigou', this.dizuo).active == !0){
|
||
cc.find('di' + this.selectIndex + '/duigou', this.dizuo).active = !1
|
||
this.needHeCheng++
|
||
}
|
||
let kapainode = cc.find('di' + this.selectIndex + '/kapainode', this.dizuo)
|
||
this.scheduleOnce(()=>{this.checkWenHao(kapainode)}, this.selectNodeArr.length*this.time01+0.2)
|
||
|
||
this.selectIndex = -1
|
||
this.selectNodeArr = []
|
||
|
||
this.operateRecord[1] = t.currentTarget
|
||
}else{
|
||
this.kapaiReset(1)
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 卡牌复位
|
||
*/
|
||
kapaiReset(leixing?){
|
||
let movetime = 0.04
|
||
let mx = 5
|
||
for (let index = 0; index < this.selectNodeArr.length; index++) {
|
||
const zinode = this.selectNodeArr[index];
|
||
const px = zinode.x
|
||
if(leixing == 1){
|
||
AudioManager.playEffect(soundName.dingdong)
|
||
zinode.getComponent(cc.Animation).stop()
|
||
zinode.scale = 0.85
|
||
cc.tween(zinode)
|
||
.to(movetime, {x:px-mx})
|
||
.to(movetime, {x:px})
|
||
.to(movetime, {x:px+mx})
|
||
.to(movetime, {x:px})
|
||
.to(movetime, {x:px-mx})
|
||
.to(movetime, {x:px})
|
||
.to(movetime, {x:px+mx})
|
||
.to(movetime, {x:px})
|
||
.call(()=>{
|
||
zinode.y -= this.moveUp
|
||
})
|
||
.start()
|
||
}else{
|
||
zinode.getComponent(cc.Animation).stop()
|
||
zinode.scale = 0.85
|
||
zinode.y -= this.moveUp
|
||
}
|
||
|
||
}
|
||
this.selectIndex = -1
|
||
this.selectNodeArr = []
|
||
}
|
||
|
||
/**
|
||
* 移动卡牌
|
||
* @param znode
|
||
* @param nodeparent
|
||
* @param deltime
|
||
*/
|
||
moveKaPai(znode, nodeparent){
|
||
let chaifen = nodeparent.parent.name.split('di')
|
||
let weizhi = chaifen[1]
|
||
let newpos0 = znode.parent.convertToWorldSpaceAR(znode.position)
|
||
let newpos1 = this.moveNode.convertToNodeSpaceAR(newpos0) //this.moveNode 是个过渡节点 保障移动的节点在最上层
|
||
znode.x = newpos1.x
|
||
znode.y = newpos1.y
|
||
znode.parent = this.moveNode
|
||
let key = nodeparent.children.length-1+this.moveNode.children.length
|
||
let newpos22 = cc.v2(this.posXY[key][0], this.posXY[key][1])
|
||
let newpos2 = nodeparent.convertToWorldSpaceAR(newpos22)
|
||
let newpos3 = this.moveNode.convertToNodeSpaceAR(newpos2)
|
||
let newpos4 = cc.v3(newpos3.x,newpos3.y,0)
|
||
|
||
var self = this
|
||
cc.tween(znode)
|
||
.to(0.12,{position:newpos4})
|
||
.call(()=>{
|
||
AudioManager.playEffect(soundName.moveka)
|
||
znode.position = cc.v3(self.posXY[nodeparent.children.length][0], self.posXY[nodeparent.children.length][1], 0)
|
||
znode.parent = nodeparent
|
||
if(nodeparent.children.length == self.maxKaPaiNum){
|
||
let tongse = !0
|
||
let lastnode = nodeparent.children[nodeparent.children.length - 1]
|
||
let lastnodesc:kapaiSc = lastnode.getComponent(kapaiSc)
|
||
for (let index = 0; index <nodeparent.children.length; index++) {
|
||
const element = nodeparent.children[index];
|
||
let elsc:kapaiSc = element.getComponent(kapaiSc)
|
||
if(elsc.kaNum != lastnodesc.kaNum){
|
||
tongse = !1
|
||
break
|
||
}
|
||
}
|
||
if(tongse == !0){
|
||
this.operateRecord = []
|
||
this.heChengKaPai(nodeparent, weizhi)
|
||
this.notouch.active = !0
|
||
}
|
||
}
|
||
})
|
||
.start()
|
||
}
|
||
|
||
/**
|
||
* 卡牌合成消失
|
||
* @param nodeparent
|
||
*/
|
||
heChengKaPai(nodeparent, weizhi?){
|
||
let childrenarr = nodeparent.children
|
||
for (let index = 0; index < childrenarr.length; index++) {
|
||
const ele = childrenarr[index];
|
||
cc.tween(ele)
|
||
.delay(0.1*(4-index))
|
||
.removeSelf()
|
||
.start()
|
||
AudioManager.playEffect(soundName.hecheng)
|
||
}
|
||
//合成消失后 发牌或者锁格子
|
||
this.scheduleOnce(()=>{
|
||
if(this.needHeCheng > 0){//发牌
|
||
this.needHeCheng --
|
||
this.notouch.active = !1
|
||
this.fapaiOperate(nodeparent, weizhi)
|
||
if(this.needHeCheng <= 0){
|
||
this.notouch.active = !0
|
||
|
||
//let openState = gameStorage.Instance.getChallengeCheckOpenState()
|
||
//openState[PlayData.Instance.guanqia+1] = 1
|
||
//gameStorage.Instance.setChallengeCheckOpenState(openState)
|
||
|
||
PlayData.Instance.guanqia++
|
||
gameStorage.Instance.resetShengJiCheckOutData(PlayData.Instance.guanqia)
|
||
AdsApiMgr.Instance.setImRankData_Num('' + PlayData.Instance.guanqia)
|
||
|
||
PlayData.Instance.gamestate = GameState.end
|
||
this.schedule(()=>{
|
||
this.addYanHua()
|
||
}, 0.8, cc.macro.REPEAT_FOREVER)
|
||
this.scheduleOnce(()=>{
|
||
AdsApiMgr.Instance.recording_Video_End()
|
||
let newnode:cc.Node = cc.instantiate(GameResMgr.Instance.uiPre[uiPreName.challengeSuccess])
|
||
newnode.parent = this.node
|
||
let sc = newnode.getComponent(ChallengeSuccessSc)
|
||
let str = Utils.secondsFormat(this.useTime, false)
|
||
sc.showPanel(str)
|
||
}, 1)
|
||
}
|
||
}
|
||
}, 0.6)
|
||
}
|
||
|
||
/**
|
||
* 发牌操作
|
||
* @param nodeparent
|
||
* @param fapaiweizhi 需要发牌的位置
|
||
*/
|
||
fapaiOperate(nodeparent,fapaiweizhi){
|
||
let diname = 'di' + (this.gameconfigdata.dikuangnum - 1)
|
||
let kapainode = cc.find(diname + '/kapainode' , this.dizuo)
|
||
let len = kapainode.children.length
|
||
|
||
if(len > 0){
|
||
for (let index = 0; index < kapainode.children.length; index++) {
|
||
const element = kapainode.children[index];
|
||
this.selectNodeArr.push(element)
|
||
}
|
||
}else{
|
||
this.closeDiKuang(fapaiweizhi)
|
||
return console.log('没有存储的卡牌')
|
||
}
|
||
|
||
let moveindex = 0
|
||
for (let index = this.selectNodeArr.length; index > 0; index--) {
|
||
const element = this.selectNodeArr[index-1];
|
||
this.moveKaPai(element, nodeparent)
|
||
moveindex ++
|
||
}
|
||
|
||
this.selectIndex = -1
|
||
this.selectNodeArr = []
|
||
|
||
if(this.allkapaisezhi.length <= 0){
|
||
this.closeDiKuang(this.gameconfigdata.dikuangnum - 1)
|
||
return
|
||
} //无剩余卡牌
|
||
|
||
this.scheduleOnce(()=>{
|
||
AudioManager.playEffect(soundName.fapai)
|
||
let sezhinum = this.allkapaisezhi.shift()
|
||
PlayData.Instance.storageGameDate[4] = this.allkapaisezhi
|
||
this.storageCheckOutData()
|
||
for (let index = 0; index < sezhinum.length; index++) {
|
||
const leixing = sezhinum[index];
|
||
this.addNewKaPai(kapainode, leixing, true)
|
||
}
|
||
//this.shengyukapaizuhe--
|
||
this.yushuLabel.string = '' + this.allkapaisezhi.length
|
||
}, 0.3)
|
||
|
||
}
|
||
|
||
/**
|
||
* 关闭底框
|
||
* @param id
|
||
*/
|
||
closeDiKuang(id){
|
||
PlayData.Instance.storageGameDate[2][id] = 2
|
||
this.storageCheckOutData()
|
||
|
||
this.dizuoState[id] = 2
|
||
let dikuang = cc.find('di' + id, this.dizuo)
|
||
cc.find('suo', dikuang).active = !0
|
||
cc.find('suoicon', dikuang).active = !0
|
||
}
|
||
|
||
/**
|
||
* 添加新牌
|
||
* @param parentnode 父节点
|
||
* @param kanum 卡牌num
|
||
*/
|
||
addNewKaPai(parentnode, kanum, isfapai = false){
|
||
let newnode:cc.Node = cc.instantiate(this.kapaiPre)
|
||
newnode.scale = 0.85
|
||
newnode.parent = parentnode
|
||
let kapaisc = newnode.getComponent(kapaiSc)
|
||
kapaisc.setKaNum(kanum)
|
||
if(isfapai == !0){
|
||
newnode.y = -cc.winSize.height/2 - parentnode.parent.y
|
||
cc.tween(newnode)
|
||
.to(0.2, {position:cc.v3(this.posXY[parentnode.children.length-1][0],this.posXY[parentnode.children.length-1][1],0) })
|
||
.call(()=>{
|
||
if(parentnode.children.length >= this.maxKaPaiNum){ //添加卡牌满10
|
||
let tongse = !0
|
||
let lastnode = parentnode.children[parentnode.children.length - 1]
|
||
let lastnodesc:kapaiSc = lastnode.getComponent(kapaiSc)
|
||
|
||
for (let index = 0; index <parentnode.children.length; index++) {
|
||
const element = parentnode.children[index];
|
||
let elsc:kapaiSc = element.getComponent(kapaiSc)
|
||
if(elsc.kaNum != lastnodesc.kaNum){
|
||
tongse = !1
|
||
break
|
||
}
|
||
}
|
||
//同色
|
||
if(tongse == !0){
|
||
let dizuo = parentnode.parent
|
||
}else{
|
||
let dizuo = parentnode.parent
|
||
}
|
||
}
|
||
})
|
||
.start()
|
||
}else{ //合成产生新牌
|
||
newnode.x = this.posXY[parentnode.children.length-1][0]
|
||
newnode.y = this.posXY[parentnode.children.length-1][1]
|
||
newnode.opacity = 0
|
||
newnode.scale = 0
|
||
cc.tween(newnode)
|
||
.to(0.1,{opacity:255, scale:1})
|
||
.start()
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检测是否有问号
|
||
*/
|
||
checkWenHao(kapainode){
|
||
let childrennode = kapainode.children
|
||
let selectarr = []
|
||
if(childrennode.length > 0){
|
||
let lastnode = childrennode[childrennode.length-1]
|
||
let lastnodesc = lastnode.getComponent(kapaiSc)
|
||
if(lastnodesc.kaNum == 0){
|
||
for (let ind = childrennode.length; ind > 0; ind--) {
|
||
const element = childrennode[ind-1];
|
||
let elsc:kapaiSc = element.getComponent(kapaiSc)
|
||
if(elsc.kaNum != lastnodesc.kaNum){
|
||
break
|
||
}else{
|
||
selectarr.push(element)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//let leixing = Utils.getRangeRandom(this.mixlevelNum, this.levelNum - 2)
|
||
for (let index = 0; index < selectarr.length; index++) {
|
||
|
||
let sc = selectarr[index].getComponent(kapaiSc)
|
||
sc.setKaNum(sc.bianshu)
|
||
sc.node.scale = 0
|
||
cc.tween(sc.node)
|
||
.to(0.1, {scale:1})
|
||
.start()
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 更新时间
|
||
* @param index
|
||
*/
|
||
updateTime(index){
|
||
let str = Utils.secondsFormat(index, false)
|
||
this.timestr.string = '' + str
|
||
if(index == 0){ //时间到了
|
||
AdsApiMgr.Instance.recording_Video_End()
|
||
PlayData.Instance.gamestate = GameState.wait
|
||
let newnode = cc.instantiate(GameResMgr.Instance.uiPre[uiPreName.timeOutPanel])
|
||
newnode.parent = cc.director.getScene()
|
||
let sc = newnode.getComponent(TimeOutPanelSc)
|
||
sc.setGameSc(this)
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 更新步数
|
||
* @param index
|
||
*/
|
||
updateBuShuIndex(index){
|
||
this.bushustr.string = '步数:' + index
|
||
}
|
||
|
||
// update (dt) {}
|
||
|
||
/**
|
||
* 添加烟花
|
||
*/
|
||
addYanHua(){
|
||
let winSize = cc.winSize
|
||
let xx = Utils.getRangeRandom(-winSize.width/2+50, winSize.width/2-50)
|
||
let yy = Utils.getRangeRandom(-winSize.height/2+50, winSize.height/2-50)
|
||
|
||
let newyanhua:cc.Node = cc.instantiate(GameResMgr.Instance.uiPre[uiPreName.yanhua])
|
||
newyanhua.position = cc.v3(xx, yy, 0)
|
||
newyanhua.parent = this.node
|
||
|
||
// let ani = newyanhua.getComponent(sp.Skeleton)
|
||
// let skinid = Utils.getRangeRandom(1, 5)
|
||
// ani.setSkin('' + skinid)
|
||
|
||
cc.tween(newyanhua)
|
||
.delay(0.8)
|
||
.removeSelf()
|
||
.start()
|
||
}
|
||
|
||
/**
|
||
* 按钮点击
|
||
* @param t
|
||
* @param e
|
||
*/
|
||
uiBntClickCallBack(t, e){
|
||
var self = this
|
||
if(e == 'chehui'){
|
||
TrackingManager.send(TrackingType.Retract);
|
||
|
||
if(this.operateRecord.length > 0){
|
||
AdsApiMgr.Instance.motivational_Video_Show(()=>{
|
||
self.cancelOperate()
|
||
self.operateRecord = []
|
||
}, ()=>{})
|
||
}else{
|
||
TipsManager.Instance.createTips('无操作可撤回')
|
||
}
|
||
}else if(e == 'daluan'){
|
||
TrackingManager.send(TrackingType.Shuffle);
|
||
|
||
self.operateRecord = []
|
||
AdsApiMgr.Instance.motivational_Video_Show(()=>{
|
||
self.daluanOperate()
|
||
}, ()=>{})
|
||
}else if(e == 'tishi'){
|
||
|
||
}else if(e == 'guizi'){
|
||
TrackingManager.send(TrackingType.Cabinet);
|
||
|
||
self.addGuiZiOperate()
|
||
self.operateRecord = []
|
||
// AdsApiMgr.Instance.motivational_Video_Show(()=>{
|
||
// }, ()=>{})
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 撤回操作
|
||
*/
|
||
cancelOperate(){
|
||
let selectnode = this.operateRecord[0]
|
||
for (let index = 0; index < selectnode.length; index++) {
|
||
const element = selectnode[index];
|
||
this.moveKaPai(element, this.operateRecord[2])
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 打乱操作
|
||
*/
|
||
daluanOperate(){
|
||
let linshiNodeArr = []
|
||
let linshidata = []
|
||
this.notouch.active = !0
|
||
for (let index = 0; index < this.dizuoState.length-1; index++) {
|
||
let state = this.dizuoState[index]
|
||
if(state == 1){
|
||
let diname = 'di' + index
|
||
let kapainode = cc.find(diname + '/kapainode' , this.dizuo)
|
||
|
||
linshidata[index] = kapainode.children.length
|
||
|
||
while(kapainode.children.length > 0){
|
||
let element = kapainode.children[0]
|
||
let newpos0 = element.parent.convertToWorldSpaceAR(element.position)
|
||
let newpos1 = this.moveNode.convertToNodeSpaceAR(newpos0) //this.moveNode 是个过渡节点 保障移动的节点在最上层
|
||
element.position = newpos1
|
||
element.parent = this.moveNode
|
||
cc.tween(element)
|
||
.to(0.2, {position:cc.v3(0,0,0)})
|
||
.start()
|
||
linshiNodeArr.push(element)
|
||
}
|
||
|
||
}else{
|
||
linshidata[index] = 0
|
||
}
|
||
}
|
||
linshiNodeArr = Utils.shuffle(linshiNodeArr)
|
||
|
||
this.scheduleOnce(()=>{
|
||
for (let index = 0; index < linshidata.length; index++) {
|
||
const numarr = linshidata[index];
|
||
let diname = 'di' + index
|
||
let kapainode = cc.find(diname + '/kapainode' , this.dizuo)
|
||
for (let ind = 0; ind < numarr; ind++) {
|
||
let kapai = linshiNodeArr.pop()
|
||
//kapai.parent = kapainode
|
||
//kapai.position = cc.v3(0,0,0)
|
||
let key = ind //nodeparent.children.length-1+this.moveNode.children.length
|
||
let newpos22 = cc.v2(this.posXY[key][0], this.posXY[key][1])
|
||
let newpos2 = kapainode.convertToWorldSpaceAR(newpos22)
|
||
let newpos3 = this.moveNode.convertToNodeSpaceAR(newpos2)
|
||
let newpos4 = cc.v3(newpos3.x,newpos3.y,0)
|
||
var self = this
|
||
cc.tween(kapai)
|
||
.to(0.12, {position:newpos4})
|
||
.call(()=>{
|
||
kapai.position = cc.v3(self.posXY[kapainode.children.length][0], self.posXY[kapainode.children.length][1], 0)
|
||
kapai.parent = kapainode
|
||
})
|
||
.start()
|
||
}
|
||
}
|
||
this.notouch.active = !1
|
||
},0.3)
|
||
}
|
||
|
||
/**
|
||
* 添加柜子操作
|
||
*/
|
||
addGuiZiOperate(){
|
||
let canOperate = !1
|
||
let shengyukongwei = []
|
||
let selectindex = -1
|
||
let selectkapainode = null
|
||
let xiaoshu = 4
|
||
for (let index = 0; index < this.dizuoState.length - 1; index++) {
|
||
let state = this.dizuoState[index]
|
||
if(state == 1){
|
||
let diname = 'di' + index
|
||
let kapainode = cc.find(diname + '/kapainode' , this.dizuo)
|
||
if(kapainode.children.length > 0 && kapainode.children.length != 4){
|
||
if(xiaoshu > kapainode.children.length){
|
||
xiaoshu = kapainode.children.length
|
||
selectindex = index
|
||
selectkapainode = kapainode
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(selectindex != -1){
|
||
var self = this
|
||
AdsApiMgr.Instance.motivational_Video_Show(()=>{
|
||
self.addGuiZiMoveKaPai(selectkapainode, selectindex)
|
||
}, ()=>{})
|
||
}else{
|
||
TipsManager.Instance.createTips('无需操作')
|
||
}
|
||
}
|
||
/**
|
||
* 添加柜子 操作 分配卡牌
|
||
* @param selectnode
|
||
* @param selectindex
|
||
*/
|
||
addGuiZiMoveKaPai(selectnode, selectindex){
|
||
// let selectArr = []
|
||
// for (let index = 0; index < selectnode.children.length; index++) {
|
||
// const element = selectnode.children[index];
|
||
// selectArr.push(element)
|
||
// }
|
||
var self = this
|
||
let totalnum = selectnode.children.length
|
||
let yidongindex = 0
|
||
|
||
for (let index = 0; index < this.dizuoState.length-1; index++) {
|
||
let state = this.dizuoState[index]
|
||
if(state == 1){
|
||
let diname = 'di' + index
|
||
let kapainode = cc.find(diname + '/kapainode' , this.dizuo)
|
||
if(kapainode.children.length > 0 && kapainode.children.length != 4 && index != selectindex){
|
||
let chanum = 4 - kapainode.children.length
|
||
for (let ind = 0; ind < chanum; ind++) {
|
||
if(totalnum > yidongindex){
|
||
const element = selectnode.children[yidongindex]
|
||
cc.tween(element)
|
||
.delay(0.2* yidongindex)
|
||
.call(()=>{
|
||
self.moveKaPai(element, kapainode)
|
||
})
|
||
.start()
|
||
yidongindex ++
|
||
}else{
|
||
break
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 存储关卡数据
|
||
*/
|
||
storageCheckOutData(){
|
||
PlayData.Instance.storageGameDate[3] = []
|
||
for (let index = 0; index < this.dizuoState.length; index++) {
|
||
PlayData.Instance.storageGameDate[3][index] = []
|
||
let di = cc.find('di'+index, this.dizuo)
|
||
let kapainode = cc.find('kapainode', di)
|
||
let children = kapainode.children
|
||
if(children.length > 0){
|
||
for (let ind = 0; ind < children.length; ind++) {
|
||
const element = children[ind];
|
||
let sc = element.getComponent(kapaiSc)
|
||
PlayData.Instance.storageGameDate[3][index].push(sc.kaNum)
|
||
}
|
||
}
|
||
}
|
||
PlayData.Instance.storageGameDate[2] = this.dizuoState
|
||
PlayData.Instance.storageGameDate[5] = this.needHeCheng
|
||
PlayData.Instance.storageGameDate[6] = this.bushuIndex
|
||
gameStorage.Instance.setShengJiCheckOutData(PlayData.Instance.storageGameDate)
|
||
}
|
||
}
|