You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.6 KiB
146 lines
5.6 KiB
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;
|
|
}
|
|
}
|