123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- const xrFrameSystem = wx.getXrFrameSystem();
- // 控制粒子颜色渐变
- export class ColorGradient {
- public gradient: number;
- public color: xrFrameSystem.Vector4;
- public color2: xrFrameSystem.Vector4;
- constructor(gradient, color, color2) {
- this.gradient = gradient;
- this.color = color;
- this.color2 = color2;
- }
- /**
- * 获取具体颜色属性值
- * @param {Vector4} 用于存储结果的临时变量
- */
- public getColor(colorTemp: xrFrameSystem.Vector4) {
- if (!this.color2) {
- colorTemp.x = this.color.x;
- colorTemp.y = this.color.y;
- colorTemp.z = this.color.z;
- colorTemp.w = this.color.w;
- return;
- }
- var lerp = Math.random();
- colorTemp.x = this.color.x + (this.color2.x - this.color.x) * lerp;
- colorTemp.y = this.color.y + (this.color2.y - this.color.y) * lerp;
- colorTemp.z = this.color.z + (this.color2.z - this.color.z) * lerp;
- colorTemp.w = this.color.w + (this.color2.w - this.color.w) * lerp;
- }
- }
- export class Color3Gradient {
- public gradient: number;
- public color: xrFrameSystem.Vector3;
- constructor(gradient, color) {
- this.gradient = gradient;
- this.color = color;
- }
- }
- // 控制粒子变化的属性
- export class FactorGradient {
- public gradient: number;
- public factor: number;
- public factor2: number;
- constructor(gradient, factor, factor2) {
- this.gradient = gradient;
- this.factor = factor;
- this.factor2 = factor2;
- }
- /**
- * 获取具体属性值
- * @return {number} 插值后的属性大小
- */
- public getFactor() {
- if (!this.factor2 || this.factor2 == this.factor) {
- return this.factor;
- }
- return this.factor + (this.factor2 - this.factor) * Math.random();
- }
- }
- export class BasicGradientMethod {
- /**
- * 从获取具体时刻的属性大小
- * @param {number} ratio 粒子所处生命周期的阶段
- * @param {Array} gradients 存储不同时刻指定属性变化的数组
- * @param {Callback} updateFunc 回调函数
- */
- public static GetCurrentGradient(ratio, gradients, updateFunc) {
- if (gradients[0].graident > ratio) {
- updateFunc(gradients[0], gradients[0], 1.0)
- return;
- }
- var lastIndex = gradients.length - 1;
- for (var index = 0; index < lastIndex; index++) {
- var currentGradient = gradients[index];
- var nextGradient = gradients[index + 1];
- if (ratio >= currentGradient.gradient && ratio <= nextGradient.gradient) {
- var lerp = (ratio - currentGradient.gradient) / (nextGradient.gradient - currentGradient.gradient);
- updateFunc(currentGradient, nextGradient, lerp);
- return;
- }
- }
- updateFunc(gradients[lastIndex], gradients[lastIndex], 1.0);
- }
- }
|