forked from LeenkxTeam/LNXSDK
Update
This commit is contained in:
@ -139,11 +139,6 @@ class ParticleSystemCPU {
|
|||||||
scaleElementsCount = getRampElementsLength();
|
scaleElementsCount = getRampElementsLength();
|
||||||
scaleRampSizeFactor = getRampSizeFactor();
|
scaleRampSizeFactor = getRampSizeFactor();
|
||||||
|
|
||||||
Scene.active.notifyOnInit(function () {
|
|
||||||
var i: Int;
|
|
||||||
for (i in 0...count) addToPool();
|
|
||||||
});
|
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0: // Emission
|
case 0: // Emission
|
||||||
loopAnim = {
|
loopAnim = {
|
||||||
@ -163,17 +158,20 @@ class ParticleSystemCPU {
|
|||||||
if (loop) start();
|
if (loop) start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Scene.active.notifyOnInit(function () {
|
||||||
|
if (autoStart) start();
|
||||||
|
});
|
||||||
case 1: // Hair
|
case 1: // Hair
|
||||||
Scene.active.notifyOnInit(function () {
|
Scene.active.notifyOnInit(function () {
|
||||||
var i: Int;
|
|
||||||
for (i in 0...count) spawnParticle();
|
for (i in 0...count) spawnParticle();
|
||||||
});
|
});
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
Scene.active.notifyOnInit(function () {
|
Scene.active.notifyOnInit(function () {
|
||||||
if (autoStart) start();
|
for (i in 0...count) addToPool();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,54 +242,54 @@ class ParticleSystemCPU {
|
|||||||
|
|
||||||
o.visible = true;
|
o.visible = true;
|
||||||
|
|
||||||
var normFactor: FastFloat = 1 / 32767;
|
var normFactor: FastFloat = 1 / 32767;
|
||||||
var scalePos: FastFloat = owner.data.scalePos;
|
var scalePos: FastFloat = owner.data.scalePos;
|
||||||
var scalePosParticle: FastFloat = cast(o, MeshObject).data.scalePos;
|
var scalePosParticle: FastFloat = cast(o, MeshObject).data.scalePos;
|
||||||
|
|
||||||
// TODO: add all properties from Blender's UI
|
// TODO: add all properties from Blender's UI
|
||||||
switch (emitFrom) {
|
switch (emitFrom) {
|
||||||
case 0: // Vertices
|
case 0: // Vertices
|
||||||
var pa: TVertexArray = owner.data.geom.positions;
|
var pa: TVertexArray = owner.data.geom.positions;
|
||||||
var i: Int = Std.int(Math.random() * (pa.values.length / pa.size));
|
var i: Int = Std.int(Math.random() * (pa.values.length / pa.size));
|
||||||
var loc: Vec4 = new Vec4(pa.values[i * pa.size] * normFactor, pa.values[i * pa.size + 1] * normFactor, pa.values[i * pa.size + 2] * normFactor, 1);
|
var loc: Vec4 = new Vec4(pa.values[i * pa.size] * normFactor, pa.values[i * pa.size + 1] * normFactor, pa.values[i * pa.size + 2] * normFactor, 1);
|
||||||
|
|
||||||
if (!localCoords) {
|
if (!localCoords) {
|
||||||
loc.applyQuat(objectRot);
|
loc.applyQuat(objectRot);
|
||||||
loc.add(objectPos);
|
loc.add(objectPos);
|
||||||
}
|
}
|
||||||
o.transform.loc.setFrom(loc);
|
o.transform.loc.setFrom(loc);
|
||||||
case 1: // Faces
|
case 1: // Faces
|
||||||
var positions: Int16Array = owner.data.geom.positions.values;
|
var positions: Int16Array = owner.data.geom.positions.values;
|
||||||
var ia: Uint32Array = owner.data.geom.indices[Std.random(owner.data.geom.indices.length)];
|
var ia: Uint32Array = owner.data.geom.indices[Std.random(owner.data.geom.indices.length)];
|
||||||
var faceIndex: Int = Std.random(Std.int(ia.length / 3));
|
var faceIndex: Int = Std.random(Std.int(ia.length / 3));
|
||||||
|
|
||||||
var i0 = ia[faceIndex * 3 + 0];
|
var i0 = ia[faceIndex * 3 + 0];
|
||||||
var i1 = ia[faceIndex * 3 + 1];
|
var i1 = ia[faceIndex * 3 + 1];
|
||||||
var i2 = ia[faceIndex * 3 + 2];
|
var i2 = ia[faceIndex * 3 + 2];
|
||||||
|
|
||||||
var v0: Vec3 = new Vec3(positions[i0 * 4], positions[i0 * 4 + 1], positions[i0 * 4 + 2]);
|
var v0: Vec3 = new Vec3(positions[i0 * 4], positions[i0 * 4 + 1], positions[i0 * 4 + 2]);
|
||||||
var v1: Vec3 = new Vec3(positions[i1 * 4], positions[i1 * 4 + 1], positions[i1 * 4 + 2]);
|
var v1: Vec3 = new Vec3(positions[i1 * 4], positions[i1 * 4 + 1], positions[i1 * 4 + 2]);
|
||||||
var v2: Vec3 = new Vec3(positions[i2 * 4], positions[i2 * 4 + 1], positions[i2 * 4 + 2]);
|
var v2: Vec3 = new Vec3(positions[i2 * 4], positions[i2 * 4 + 1], positions[i2 * 4 + 2]);
|
||||||
|
|
||||||
var pos: Vec3 = randomPointInTriangle(v0, v1, v2);
|
var pos: Vec3 = randomPointInTriangle(v0, v1, v2);
|
||||||
|
|
||||||
var loc: Vec4 = new Vec4(pos.x, pos.y, pos.z, 1).mult(normFactor);
|
var loc: Vec4 = new Vec4(pos.x, pos.y, pos.z, 1).mult(normFactor);
|
||||||
if (!localCoords) {
|
if (!localCoords) {
|
||||||
loc.applyQuat(objectRot);
|
loc.applyQuat(objectRot);
|
||||||
loc.add(objectPos);
|
loc.add(objectPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
o.transform.loc.setFrom(loc);
|
o.transform.loc.setFrom(loc);
|
||||||
case 2: // Volume
|
case 2: // Volume
|
||||||
var scaleFactorVolume: Vec4 = new Vec4().setFrom(owner.transform.dim);
|
var scaleFactorVolume: Vec4 = new Vec4().setFrom(owner.transform.dim);
|
||||||
scaleFactorVolume.mult(0.5);
|
scaleFactorVolume.mult(0.5);
|
||||||
var loc: Vec4 = new Vec4((Math.random() * 2.0 - 1.0) * scaleFactorVolume.x, (Math.random() * 2.0 - 1.0) * scaleFactorVolume.y, (Math.random() * 2.0 - 1.0) * scaleFactorVolume.z, 1);
|
var loc: Vec4 = new Vec4((Math.random() * 2.0 - 1.0) * scaleFactorVolume.x, (Math.random() * 2.0 - 1.0) * scaleFactorVolume.y, (Math.random() * 2.0 - 1.0) * scaleFactorVolume.z, 1);
|
||||||
|
|
||||||
if (!localCoords) {
|
if (!localCoords) {
|
||||||
loc.applyQuat(objectRot);
|
loc.applyQuat(objectRot);
|
||||||
loc.add(objectPos);
|
loc.add(objectPos);
|
||||||
}
|
}
|
||||||
o.transform.loc.setFrom(loc);
|
o.transform.loc.setFrom(loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
particleScale = 1 - scaleRandom * Math.random();
|
particleScale = 1 - scaleRandom * Math.random();
|
||||||
@ -369,17 +367,6 @@ class ParticleSystemCPU {
|
|||||||
|
|
||||||
particlePhysics.set(o, physics);
|
particlePhysics.set(o, physics);
|
||||||
o.transform.buildMatrix();
|
o.transform.buildMatrix();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setVelocityHair(object: Object, velocity: Vec4, randQuat: Quat, phaseQuat: Quat) {
|
|
||||||
var dir: Vec4 = velocity.clone().normalize();
|
|
||||||
var yaw: FastFloat = Math.atan2(-dir.x, dir.y);
|
|
||||||
var pitch: FastFloat = Math.asin(dir.z);
|
|
||||||
var targetRot: Quat = new Quat().fromEuler(pitch, 0, yaw);
|
|
||||||
|
|
||||||
targetRot.mult(randQuat);
|
|
||||||
object.transform.rot.setFrom(targetRot.mult(phaseQuat));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateParticles() {
|
function updateParticles() {
|
||||||
@ -415,13 +402,22 @@ class ParticleSystemCPU {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setVelocityHair(object: Object, velocity: Vec4, randQuat: Quat, phaseQuat: Quat) {
|
||||||
|
var dir: Vec4 = velocity.clone().normalize();
|
||||||
|
var yaw: FastFloat = Math.atan2(-dir.x, dir.y);
|
||||||
|
var pitch: FastFloat = Math.asin(dir.z);
|
||||||
|
var targetRot: Quat = new Quat().fromEuler(pitch, 0, yaw);
|
||||||
|
|
||||||
|
targetRot.mult(randQuat);
|
||||||
|
object.transform.rot.setFrom(targetRot.mult(phaseQuat));
|
||||||
|
}
|
||||||
|
|
||||||
// Linear interpolation
|
// Linear interpolation
|
||||||
function interpolateRampValue(normalizedAge: FastFloat, positions: Array<FastFloat>, colors: Array<FastFloat>): FastFloat {
|
function interpolateRampValue(normalizedAge: FastFloat, positions: Array<FastFloat>, colors: Array<FastFloat>): FastFloat {
|
||||||
if (positions.length == 0) return 1.0;
|
if (positions.length == 0) return 1.0;
|
||||||
if (normalizedAge <= positions[0]) return colors[0];
|
if (normalizedAge <= positions[0]) return colors[0];
|
||||||
if (normalizedAge >= positions[positions.length - 1]) return colors[colors.length - 1];
|
if (normalizedAge >= positions[positions.length - 1]) return colors[colors.length - 1];
|
||||||
|
|
||||||
var i: Int;
|
|
||||||
for (i in 0...(positions.length - 1)) {
|
for (i in 0...(positions.length - 1)) {
|
||||||
if (normalizedAge >= positions[i] && normalizedAge <= positions[i + 1]) {
|
if (normalizedAge >= positions[i] && normalizedAge <= positions[i + 1]) {
|
||||||
var t: FastFloat = (normalizedAge - positions[i]) / (positions[i + 1] - positions[i]);
|
var t: FastFloat = (normalizedAge - positions[i]) / (positions[i + 1] - positions[i]);
|
||||||
@ -535,17 +531,17 @@ class ParticleSystemCPU {
|
|||||||
var v = c.sub(a);
|
var v = c.sub(a);
|
||||||
return a.add(u.mult(x).add(v.mult(y)));
|
return a.add(u.mult(x).add(v.mult(y)));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
typedef TParticlePhysics = {
|
typedef TParticlePhysics = {
|
||||||
var velocity: Vec4;
|
var velocity: Vec4;
|
||||||
var gravity: Vec3;
|
var gravity: Vec3;
|
||||||
var lifetime: Float;
|
var lifetime: Float;
|
||||||
var age: Float;
|
var age: Float;
|
||||||
var hasScaleRamp: Bool;
|
var hasScaleRamp: Bool;
|
||||||
var baseScale: Vec4;
|
var baseScale: Vec4;
|
||||||
var rampPositions: Array<FastFloat>;
|
var rampPositions: Array<FastFloat>;
|
||||||
var rampColors: Array<FastFloat>;
|
var rampColors: Array<FastFloat>;
|
||||||
var scaleRampSizeFactor: FastFloat;
|
var scaleRampSizeFactor: FastFloat;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|||||||
Reference in New Issue
Block a user