大侠
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

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;
}
}