import { isValid, Vec2, Node, Vec3, tween, v2, UITransform, Sprite, Layers, Color } from "cc"; import { ESounds } from "../MesEvent/ESounds"; import { UIFromType } from "../Mgr_UI/Config/SysDefine"; import { PropType } from "../const/GameEnum"; import { IFlyCollectAct, IData } from "../const/GameInterface"; import MathUtils from "../ExUtils/MathUtils"; import { Global } from "../Global"; import UIMgr from "../Mgr_UI/UIMgr"; export default class FlyUtils{ static whitecolor:Color = new Color(255,255,255); static _FlycollectAct(cofig:IFlyCollectAct,scale:number = 1) { if(Array.isArray(cofig.data)){ for (let i = 0; i < cofig.data.length; i++) { const tData = cofig.data[i]; this._FlyIData(cofig.StartPoint,tData,scale); } }else{ this._FlyIData(cofig.StartPoint,cofig.data,scale); } } static _FlyIData(StartPoint:Vec3,data:IData,scale:number = 1) { let _node = UIMgr.Ins.getLayer(UIFromType.Tips); let eNode:Node = this.getHomeResNode(data); if (!eNode || !isValid(eNode)) {return;} StartPoint = _node.getComponent(UITransform).convertToNodeSpaceAR(StartPoint); let eNodeVec2 = eNode.getComponent(UITransform).convertToWorldSpaceAR(Vec3.ZERO); let ePoint = _node.getComponent(UITransform).convertToNodeSpaceAR(eNodeVec2); let time = 0.5; let num = data.num; let lamada = () => { if (!isValid(_node)) {return;} let an = num; let MaxCount = 30; switch (data.id) { case PropType.eGold: an = Math.min(num,5) break; default: an = Math.min(num,5) break; } /**限制最大数量 */ an = Math.min(an, MaxCount); if (an == 0) { an = 1; } let range: number[] = MathUtils.randomCircleRangeInt(an); for (let i = 0; i < an; i++) { let gems:Node = this.createSprite2(_node,data); if (!gems.parent) { gems.parent = _node; } gems.setScale(scale,scale); gems.setPosition(StartPoint.x,StartPoint.y); let dir = new Vec3(); Vec2.subtract(dir,ePoint,StartPoint); let length = dir.length(); dir = dir.normalize(); let agen = range[i]; let randomW = MathUtils.randomRangeInt(50, 80); let rannumx = Math.sin(agen) * randomW; let rannumy = Math.cos(agen) * randomW; let targetX: number = StartPoint.x + rannumx; let targetY: number = StartPoint.y + rannumy; let OffsetY = MathUtils.randomRangeInt(-15, 10); let beilv = 5; let MidX: number = StartPoint.x + dir.x * length * 0.5 + rannumx * beilv; let MidY: number = StartPoint.y + dir.y * length * 0.5 + OffsetY * beilv; tween(gems).sequence( tween(gems).to(0.1,{position:new Vec3(targetX, targetY,0)}), tween(gems).delay(0.02*(an-i)), CNodeUtils.bezierTo(gems,time,v2(targetX, targetY),v2(MidX, MidY),ePoint,null), tween(gems).delay(0.02*(an-i)), tween(gems).call(() => { gems.destroy(); }) ).start(); tween(gems).sequence( tween(gems).delay(0.1), tween(gems).delay(0.02*(an-i)), tween(gems).to(time,{scale:new Vec3(scale,scale)}), tween(gems).delay(0.1), tween(gems).call(()=>{}) ).start(); } Global.Audio.playEffect(ESounds.So_gems); } lamada(); } static getHomeResNode(data:IData):Node{ //let baseForm = UIMgr.Ins.getUIFrom("HomeUI"); return null; } /** * 创建一个精灵 * @param spriteFrame 当前的精灵 * @param parent 当前节点的父节点 * ***/ static createSprite(spriteFrame, parent: Node) { let node = new Node(); node.layer = Layers.Enum.UI_2D; let node_uiTransform = node.addComponent(UITransform) node.parent = parent; let sp = new Node(`sp`); sp.layer = Layers.Enum.UI_2D; let sp_uiTransform = sp.addComponent(UITransform); let sp_spr = sp.addComponent(Sprite) //CNodeUtils.SwitchTextureByData(sp_spr,Data) sp_spr.spriteFrame = spriteFrame; sp_spr.color = this.whitecolor; node.addChild(sp); node_uiTransform.width = sp_uiTransform.width; node_uiTransform.height = sp_uiTransform.height; return node; } /** * 创建一个精灵 * @param spriteFrame 当前的精灵 * @param parent 当前节点的父节点 * ***/ static createSprite2(parent: Node, Data: IData) { let node = new Node(); node.layer = Layers.Enum.UI_2D; let node_uiTransform = node.addComponent(UITransform) node.parent = parent; let sp = new Node(`sp`); sp.layer = Layers.Enum.UI_2D; let sp_uiTransform = sp.addComponent(UITransform); let sp_spr = sp.addComponent(Sprite) CNodeUtils.SwitchTextureByData(sp_spr, Data) node.addChild(sp); node_uiTransform.width = sp_uiTransform.width; node_uiTransform.height = sp_uiTransform.height; return node; } }