import { _decorator, Component, Node, SpriteFrame, find, Sprite, Vec3, UITransform, EventHandler } from 'cc'; import { DataSystem } from '../core/data/DataSystem'; import { ResourceLoader } from '../core/resourceManager/ResourceLoader'; import { Sound } from '../core/sound/Sound'; import { WindowSystem } from '../core/ui/window/WindowSystem'; import { Utils } from '../core/utils/Utils'; import { UserData } from '../data/UserData'; import { LevelBonusData } from '../levelBonus/LevelBonusData'; import { UserInfo } from '../main/UserInfo'; import { Trajectory } from './Trajectory'; const { ccclass, property, requireComponent } = _decorator; @ccclass('PrizeFly') @requireComponent(ResourceLoader) export class PrizeFly extends Component { @property({ tooltip: "飞行动画结束回调", type: EventHandler }) public tweenBack: EventHandler; @property({ tooltip: "粮草飞行节点", type: Node }) private money: Node; @property({ tooltip: "元宝飞行节点", type: Node }) private diamond: Node; @property({ tooltip: "元宝飞行节点点将台元宝", type: Node }) private diamondRecruit: Node; @property({ tooltip: "元宝飞行节点抽卡页元宝", type: Node }) private diamondRecruitGeneral: Node; @property({ tooltip: "红包币飞行节点", type: Node }) private bonus: Node; @property({ tooltip: "关卡红包飞行节点", type: Node }) private redBox: Node; @property({ tooltip: "威望石飞行节点", type: Node }) private prestige: Node; @property({ tooltip: "音效节点", type: Sound }) private sound: Sound; private backTimes = 6; private prizeNum = 0;//奖品数目 private prizeType = 0;//奖品类型 start() { } //窗口打开回调 public async setData(data: { type: number, num: number, position: Vec3, isWorldPos: boolean }) { this.prizeNum = data.num; this.prizeType = data.type; let targetNode: Node = null; let iconType = 0; switch (this.prizeType) { case 1://粮草 iconType = 3; targetNode = this.money; // targetNode = find("Canvas/界面层/底部布局/底部按钮/训练"); break; case 2://元宝 iconType = 6; targetNode = this.diamond; // targetNode = find("Canvas/界面层/点将按钮/当前元宝信息/元宝图标"); break; case 3://红包币 iconType = 1; targetNode = this.bonus; // targetNode = find("Canvas/界面层/玩家信息/红包币框/红包图标"); break; case 4://关卡红包 iconType = 9; targetNode = this.redBox; break case 5://元宝飞行节点点将台元宝 iconType = 6; targetNode = this.diamondRecruit; break case 6://元宝飞行节点抽卡页元宝 iconType = 6; targetNode = this.diamondRecruitGeneral; break case 7://威望石飞行节点 iconType = 8; targetNode = this.prestige; break default: WindowSystem.close(this.node); return; } let img = await this.getComponent(ResourceLoader).load("image/icons/icon" + iconType + "/spriteFrame", SpriteFrame); this.prizeType == 4 && (this.backTimes = 1); for (let i = 0; i < this.backTimes; i++) { let node = new Node(); //附加图片组件 node.addComponent(Sprite); node.getComponent(Sprite).spriteFrame = img; node.addComponent(Trajectory); if (data.position) { data.isWorldPos ? node.worldPosition = this.node.getComponent(UITransform).convertToNodeSpaceAR(data.position) : node.setPosition(data.position); } else { node.setPosition(new Vec3(0, 105, 0)); } let trajectory = node.getComponent(Trajectory); trajectory.startPoint = node.position; trajectory.ctrl1Point = new Vec3(Utils.random_both(80, -80) + node.position.x, Utils.random_both(0, -200) + node.position.y); trajectory.ctrl2Point = new Vec3(Utils.random_both(50, -50) + node.position.x, Utils.random_both(100, -100) + node.position.y); trajectory.endPoint = this.node.getComponent(UITransform).convertToNodeSpaceAR(targetNode.getWorldPosition()); trajectory.backFn = this.tweenBack; this.node.addChild(node); } this.prizeType != 4 && this.sound.play(); } public backFn() { this.backTimes--; if (!this.backTimes) { this.prizeType == 4 && this.sound.play(1); WindowSystem.close(this.node); } } onDestroy() { switch (this.prizeType) { case 1://粮草 DataSystem.getData(UserData).money += this.prizeNum; break; case 2://元宝 DataSystem.getData(UserData).diamond += this.prizeNum; break; case 3://红包币 DataSystem.getData(UserData).bonus += this.prizeNum; break; case 4: DataSystem.getData(LevelBonusData).showSaveTimes += this.prizeNum; break; case 5://元宝 DataSystem.getData(UserData).diamond += this.prizeNum; break; case 6://元宝 DataSystem.getData(UserData).diamond += this.prizeNum; break; case 7://威望石 DataSystem.getData(UserData).prestige += this.prizeNum; break; } } }