import { _decorator, Component, Mask, Node, RichText, Size, Tween, tween, UIOpacity, UITransform, v3, Vec3 } from 'cc'; import LocalizedLabel from '../i18n/LocalizedLabel'; import { BlockController } from './Block/BlockController'; import { BlocksAll, GridBoardData } from './Block/BlockData'; import GlobalData from './GlobalData'; import { GridBlockMgr } from './GridBlockMgr'; import { LocalStorageMgr } from './LocalStorageMgr'; import { TouchMgr } from './TouchMgr'; const { ccclass, property } = _decorator; @ccclass('Guide') export class Guide extends Component { /** 单例模式 */ private static _ins: Guide; constructor() { super(); Guide._ins = this; } public static get ins(): Guide { if (!Guide._ins) { Guide._ins = new Guide(); } return Guide._ins; } newComerReward: any = null; @property(Mask) private mask: Mask = null; @property(Node) shade: Node = null; @property(UITransform) toucher: UITransform; @property(UITransform) private pointer: UITransform = null; @property(Node) block: Node = null; @property(Node) diolog: Node = null; @property(RichText) diologLabel: RichText = null guideindex1: number[] = [3, 3]; guideindex2: number[] = [3, 3]; guideindex3: number[] = [4, 3]; @property(Node) guidenode: Node = null; guideTarPos: Vec3 = null; @property(Node) selecnode: Node = null; selecOriPos: Vec3 = null; // @property(Node) // uiGuideNode1: Node = null; // uiGuideNodePos1: Vec3 = null; // @property(Node) // uiGuideNode2: Node = null; // uiGuideNodePos2: Vec3 = null; // @property(Node) // uiGuideNode3: Node = null; // uiGuideNodePos3: Vec3 = null; @property(Node) PopPage: Node = null; boardeffectTimes: number = 1; protected start(): void { // log(GlobalData.isCommer) if (GlobalData.isCommer) { this.runGuide(); } } runGuide() { if (!GlobalData.isCommer) { this.node.active = false; return; } TouchMgr.ins.resumePromptBlock(); // Tween.stopAll(); Tween.stopAllByTarget(this.toucher.node); Tween.stopAllByTarget(this.block); // tween(this.toucher.node).stop() // tween(this.block).stop() this.guideTarPos = TouchMgr.ins.getNodeAToNodeBPoint(this.guidenode, this.node); this.selecOriPos = TouchMgr.ins.getNodeAToNodeBPoint(this.selecnode, this.node); // this.uiGuideNodePos1 = TouchMgr.ins.getNodeAToNodeBPoint(this.uiGuideNode1, this.node); // console.log(LocalStorageMgr.getItem(LocalStorageMgr.isCommer_key, true)); // console.log(LocalStorageMgr.getItem(LocalStorageMgr.guideRecord_key, 1)); if (GlobalData.guideRecord == 1) { GridBlockMgr.ins.generateBoard(GridBoardData.customizeBoardData1); GridBlockMgr.ins.generareGuideSelectionBlock([BlocksAll[45], BlocksAll[45], BlocksAll[45]]); this.guide1(); } else if (GlobalData.guideRecord == 2) { GridBlockMgr.ins.generateBoard(GridBoardData.customizeBoardData2); GridBlockMgr.ins.generareGuideSelectionBlock([BlocksAll[10], BlocksAll[10], BlocksAll[10]]); this.guide2(); } else if (GlobalData.guideRecord == 3) { GridBlockMgr.ins.generateBoard(GridBoardData.customizeBoardData3); GridBlockMgr.ins.generareGuideSelectionBlock([BlocksAll[11], BlocksAll[11], BlocksAll[11]]); this.guide3(); } else if (GlobalData.guideRecord == 4) { this.guide4(); } } //第一步引导 guide1() { this.toucher.node.active = true this.diolog.active = true; this.diolog.setPosition(v3(0, 500, 0)); this.diologLabel.string = '拖动方块,填满整行可进行消除'; // let localizedLabel = this.diologLabel.node.getComponent(LocalizedLabel); // localizedLabel.setTextKeyAndOption("guide_Rtext_1"); this.block.active = true; this.block.setPosition(this.selecOriPos); this.toucher.node.setPosition(this.selecOriPos.add(v3(100, -60, 0))); this.block.getComponent(BlockController).updateBlockSet(false, BlocksAll[45], 150); this.block.getComponent(BlockController).addBlockOffset(2); this.pointer.node.setPosition(v3(0, 0, 0)) tween(this.toucher.node) .delay(0.2) .by(1, { position: v3(0, this.guideTarPos.y - this.selecOriPos.y, 0) }) .delay(0.2) .by(0.01, { position: v3(0, -(this.guideTarPos.y - this.selecOriPos.y), 0) }) .union() .repeatForever() .start() tween(this.block) .delay(0.2) .by(1, { position: v3(0, this.guideTarPos.y - this.selecOriPos.y, 0) }) .delay(0.2) .by(0.01, { position: v3(0, -(this.guideTarPos.y - this.selecOriPos.y), 0) }) .union() .repeatForever() .start() } guide2() { //这只是展示手指移动 this.toucher.node.active = true this.diolog.active = true; this.diolog.setPosition(v3(0, 500, 0)); this.diologLabel.string = '点击方块可旋转90°,不限次数哦'; this.block.active = true; this.block.setPosition(this.selecOriPos); this.toucher.node.setPosition(this.selecOriPos.add(v3(100, -60, 0))); this.block.getComponent(BlockController).updateBlockSet(false, BlocksAll[7], 150); this.block.getComponent(BlockController).addBlockOffset(2); this.pointer.node.setPosition(v3(0, 0, 0)) // this.guideTarPos.add3f(0, -55, 0); tween(this.toucher.node) .delay(0.2) .by(1, { position: v3(0, this.guideTarPos.y - this.selecOriPos.y - 55, 0) }) .delay(0.2) .by(0.01, { position: v3(0, -(this.guideTarPos.y - this.selecOriPos.y) + 55, 0) }) .union() .repeatForever() .start() tween(this.block) .delay(0.2) .by(1, { position: v3(0, this.guideTarPos.y - this.selecOriPos.y - 55, 0) }) .delay(0.2) .by(0.01, { position: v3(0, -(this.guideTarPos.y - this.selecOriPos.y) + 55, 0) }) .union() .repeatForever() .start() } guide3() { this.toucher.node.active = true this.diolog.active = true; this.diolog.setPosition(v3(0, 500, 0)); this.diologLabel.string = '当行与列同时被砖块填满,会一起消除'; this.block.active = true; this.block.setPosition(this.selecOriPos); this.toucher.node.setPosition(this.selecOriPos.add(v3(100, -60, 0))); this.block.getComponent(BlockController).updateBlockSet(false, BlocksAll[11], 150); this.block.getComponent(BlockController).addBlockOffset(2); this.pointer.node.setPosition(v3(0, 0, 0)) tween(this.toucher.node) .delay(0.2) .by(1, { position: v3(0, this.guideTarPos.y - this.selecOriPos.y - 55, 0) }) .delay(0.2) .by(0.01, { position: v3(0, -(this.guideTarPos.y - this.selecOriPos.y) + 55, 0) }) .union() .repeatForever() .start() tween(this.block) .delay(0.2) .by(1, { position: v3(0, this.guideTarPos.y - this.selecOriPos.y - 55, 0) }) .delay(0.2) .by(0.01, { position: v3(0, -(this.guideTarPos.y - this.selecOriPos.y) + 55, 0) }) .union() .repeatForever() .start() } async guide4() { GridBlockMgr.ins.generateBoard_effect(GridBoardData.customizeBoardData4); this.scheduleOnce(() => { GridBlockMgr.ins.generateSelectionBlock(false, [BlocksAll[15], BlocksAll[2], BlocksAll[15]]) }, 1); this.node.active = true; this.block.active = false; this.toucher.node.active = false this.diolog.active = true; this.diolog.setPosition(v3(0, 0, 0)); this.diolog.getComponent(UIOpacity).opacity = 0; tween(this.diolog.getComponent(UIOpacity)) .to(0.5, { opacity: 255 }) .delay(2) .to(0.5, { opacity: 0 }) .call(() => { this.node.active = false; }) .start() } completeCurGuide(record) { GlobalData.guideRecord = record; LocalStorageMgr.setItem(LocalStorageMgr.guideRecord_key, GlobalData.guideRecord); this.runGuide(); if (GlobalData.guideRecord >= 5) { GlobalData.isCommer = false; LocalStorageMgr.setItem(LocalStorageMgr.isCommer_key, GlobalData.isCommer); } } }