import { _decorator, Component, Node, sp, tween, v3 } from 'cc'; import { DataSystem } from '../core/data/DataSystem'; import { ResourceLoader } from '../core/resourceManager/ResourceLoader'; import { BitmapFont } from '../core/ui/BitmapFont'; import { ConfigData } from '../data/ConfigData'; import { Hero } from './Hero'; const { ccclass, property } = _decorator; @ccclass('LeaderSkillShow') export class LeaderSkillShow extends Component { @property({ type: ResourceLoader, tooltip: "资源加载组件" }) res: ResourceLoader; @property({ type: sp.Skeleton, tooltip: "背景特效" }) bgEffect: sp.Skeleton; @property({ type: sp.Skeleton, tooltip: "统帅特效" }) leaderEffect: sp.Skeleton; @property({ type: BitmapFont, tooltip: "艺术字" }) artlabel: BitmapFont; public showOverHandler: Function; public async setData(skillID: number, heroID: number, cb: Function) { this.showOverHandler = cb; let resName = DataSystem.getData(ConfigData)["general"][heroID]["hero_res"]; let spData = await this.res.load("spine/hero/" + resName, sp.SkeletonData); this.leaderEffect.skeletonData = spData; this.leaderEffect.setAnimation(0, "run", true); tween(this.leaderEffect.node).to(1, { position: v3(0, 0, 0) }).call(async () => { this.bgEffect.setAnimation(0, "animation", false); this.leaderEffect.setAnimation(0, "attack", false); let skillName = DataSystem.getData(ConfigData)["skill"][110000 + skillID]["name"]; let nameArray = skillName.split(""); for (let i = 0; i < nameArray.length; i++) { await this.setLabel(nameArray[i]); } this.scheduleOnce(() => { this.onShowOver(); }, 0.3); }).start(); } /**设置文字 */ private setLabel(name: string) { return new Promise(async (resolve: (data: any) => void) => { this.artlabel.string += name; this.scheduleOnce(() => { resolve(null); }, 0.15); }); } /**特写结束 */ private onShowOver(): void { this.showOverHandler && this.showOverHandler(); this.node.destroy(); } }