12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { BasicShapeEmitter } from './BasicShapeEmitter'
- const xrFrameSystem = wx.getXrFrameSystem();
- // 返回v1到v2间的随机值
- function randomBetween(v1, v2, randomSeed = Math.random()) {
- if (v1 === v2) {
- return v1;
- } else {
- return randomSeed * Math.abs(v1 - v2) + Math.min(v1, v2);
- }
- };
- // 控制粒子在箱型区域内进行发射
- export default class BoxShapeEmitter extends BasicShapeEmitter {
- public direction: xrFrameSystem.Vector3;
- public direction2: xrFrameSystem.Vector3;
- // 箱型区域的坐标起始点
- public minEmitBox: xrFrameSystem.Vector3;
- // 箱型区域的坐标终点
- public maxEmitBox: xrFrameSystem.Vector3;
- constructor() {
- super();
- this.direction = xrFrameSystem.Vector3.createFromNumber(0, 1.0, 0);
- this.direction2 = xrFrameSystem.Vector3.createFromNumber(0, 1.0, 0);
- this.minEmitBox = xrFrameSystem.Vector3.createFromNumber(-0.5, -0.5, -0.5);
- this.maxEmitBox = xrFrameSystem.Vector3.createFromNumber(0.5, 0.5, 0.5);
- }
- // 决定粒子起始的运动方向
- public startDirection(worldMatrix, direction) {
- var randX = randomBetween(this.direction.x, this.direction2.x);
- var randY = randomBetween(this.direction.y, this.direction2.y);
- var randZ = randomBetween(this.direction.z, this.direction2.z);
- var temp = xrFrameSystem.Vector3.createFromNumber(randX, randY, randZ);
- direction.set(temp.normalize().transformDirection(worldMatrix));
- }
- // 决定粒子起始的运动位置
- public startPosition(worldMatrix, position: xrFrameSystem.Vector3) {
- var randX = randomBetween(this.minEmitBox.x, this.maxEmitBox.x);
- var randY = randomBetween(this.minEmitBox.y, this.maxEmitBox.y);
- var randZ = randomBetween(this.minEmitBox.z, this.maxEmitBox.z);
- var temp = xrFrameSystem.Vector3.createFromNumber(randX, randY, randZ);
- position.set(temp.applyMatrix4(worldMatrix));
- }
- }
|