MatchMaster/assets/Script/ItemGuide.ts
2026-09-24 20:46:42 +08:00

164 lines
6.8 KiB
TypeScript

import JiaZai from "./JiaZai";
import MapConroler from "./Map";
const { ccclass, property } = cc._decorator;
@ccclass
export default class ItemGuide extends cc.Component {
static _instance: any;
time: number = 0;
//需要替换的三个道具节点
@property([cc.Node])
itemList: cc.Node[] = [];
@property(cc.Node)
itemGuide: cc.Node = null;
//道具节点的图片
@property([cc.SpriteFrame])
itemSpriteList: cc.SpriteFrame[] = [];
//飞的目标节点
@property([cc.Node])
targetNode: cc.Node[] = [];
onLoad() {
if (cc.fx.GameConfig.GM_INFO.level + 1 == 8) {
this.itemList[0].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[0];
this.itemList[1].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[1];
this.itemList[2].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[2];
this.itemList[3].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[12];
} else if (cc.fx.GameConfig.GM_INFO.level + 1 == cc.fx.GameConfig.getPropUnlockLevel("time")) {
this.itemList[0].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[3];
this.itemList[1].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[4];
this.itemList[2].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[5];
this.itemList[3].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[12];
} else if (cc.fx.GameConfig.GM_INFO.level + 1 == cc.fx.GameConfig.getPropUnlockLevel("magic")) {
this.itemList[0].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[6];
this.itemList[1].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[7];
this.itemList[2].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[8];
this.itemList[3].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[12];
}
else if (cc.fx.GameConfig.shouldShowWinStreakGuide() && !cc.fx.GameConfig.usesRainbowWinStreakUI()) {
this.itemList[0].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[9];
this.itemList[1].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[10];
this.itemList[2].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[11];
this.itemList[3].getComponent(cc.Sprite).spriteFrame = this.itemSpriteList[13];
}
}
onEnable() {
if (cc.fx.GameConfig.shouldShowWinStreakGuide() && cc.fx.GameConfig.usesRainbowWinStreakUI()) {
// guide2 素材直接挂在场景的 itemSpriteList[14..20]。
const images = this.itemSpriteList.slice(14, 21);
if (images.length !== 7 || images.some(frame => !frame)) {
cc.error("guidet 缺少 guide2 图片绑定");
return;
}
this.showRainbowWinStreakGuide(images);
}
}
private showRainbowWinStreakGuide(images: cc.SpriteFrame[]) {
const [title, bottle, text, rays, ribbon, glow, button] = images;
const [titleNode, bottleNode, textNode, raysNode] = this.itemList;
[title, bottle, text, rays].forEach((frame, index) => {
this.itemList[index].getComponent(cc.Sprite).spriteFrame = frame;
});
this.node.getChildByName("btn_lq").getComponent(cc.Sprite).spriteFrame = button;
titleNode.setPosition(0, 710);
bottleNode.setPosition(0, 150);
textNode.setPosition(0, -360);
raysNode.setPosition(0, 150);
this.node.getChildByName("btn_lq").setPosition(0, -590);
const addDecoration = (name: string, frame: cc.SpriteFrame, zIndex: number) => {
let node = this.node.getChildByName(name);
if (!node) {
node = new cc.Node(name);
node.addComponent(cc.Sprite).spriteFrame = frame;
this.node.addChild(node);
} else {
node.getComponent(cc.Sprite).spriteFrame = frame;
}
node.setContentSize(frame.getOriginalSize());
node.setPosition(0, 150);
node.zIndex = zIndex;
node.active = true;
};
addDecoration("rainbowGlow", glow, 1);
bottleNode.zIndex = 2;
addDecoration("rainbowRibbon", ribbon, 3);
}
start() {
}
//关闭引导
closeGuide() {
const gameInfo = cc.fx.GameConfig.GM_INFO;
const level = gameInfo.level + 1;
const showPropGuide = (level === 8 && gameInfo.hammerFirst)
|| (level === cc.fx.GameConfig.getPropUnlockLevel("time") && gameInfo.freezeFirst)
|| (level === cc.fx.GameConfig.getPropUnlockLevel("magic") && gameInfo.magicAFirst);
const map = MapConroler._instance;
this.node.children.forEach((item) => {
item.active = false;
})
this.node.children[0].active = true;
this.node.children[0].getComponent(cc.Sprite).spriteFrame = null;
this.itemGuide.active = true;
this.itemGuide.zIndex = 1000;
//获取目标节点的位置并且转换到itemGuide的位置的层级
let index = 0;
if (cc.fx.GameConfig.GM_INFO.level + 1 == 8) {
cc.fx.GameConfig.GM_INFO.hammerFirst = false;
index = 0;
} else if (cc.fx.GameConfig.GM_INFO.level + 1 == cc.fx.GameConfig.getPropUnlockLevel("time")) {
cc.fx.GameConfig.GM_INFO.freezeFirst = false;
index = 1;
} else if (cc.fx.GameConfig.GM_INFO.level + 1 == cc.fx.GameConfig.getPropUnlockLevel("magic")) {
cc.fx.GameConfig.GM_INFO.magicAFirst = false;
index = 2;
}
else if (cc.fx.GameConfig.shouldShowWinStreakGuide()) {
cc.fx.GameConfig.GM_INFO.winStreakFirst = false;
index = 0;
}
let pos = this.targetNode[index].convertToWorldSpaceAR(cc.Vec3.ZERO);
pos = this.node.convertToNodeSpaceAR(pos);
this.itemGuide.zIndex = 1000;
//同时改变大小和位置
if (MapConroler && MapConroler._instance) {
MapConroler._instance.setPropNum();
}
// if (this.itemGuide.active == true) {
cc.tween(this.itemGuide)
.to(0.9, { scale: 0.3, position: pos }) // 同时执行
.call(() => {
if (this.node) {
this.node.active = false;
}
if (MapConroler && MapConroler._instance) {
MapConroler._instance.setPropNum();
}
if (showPropGuide && cc.isValid(map) && MapConroler._instance === map) {
map.showPropGuideMask(level);
}
})
.start();
// }
}
//显示引导
showGuide() {
this.node.active = true;
this.node.children[0].active = true;
}
// update (dt) {}
}