mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
148 lines
4.4 KiB
JavaScript
148 lines
4.4 KiB
JavaScript
import BaseSerializer from '../BaseSerializer';
|
|
import Object3DSerializer from '../core/Object3DSerializer';
|
|
import TexturesSerializer from '../texture/TexturesSerializer';
|
|
import ParticleEmitter from '../../object/component/ParticleEmitter';
|
|
|
|
/**
|
|
* ParticleEmitterSerializer
|
|
* @author tengge / https://github.com/tengge1
|
|
*/
|
|
function ParticleEmitterSerializer() {
|
|
BaseSerializer.call(this);
|
|
}
|
|
|
|
ParticleEmitterSerializer.prototype = Object.create(BaseSerializer.prototype);
|
|
ParticleEmitterSerializer.prototype.constructor = ParticleEmitterSerializer;
|
|
|
|
ParticleEmitterSerializer.prototype.toJSON = function (obj) {
|
|
var json = Object3DSerializer.prototype.toJSON.call(this, obj);
|
|
|
|
json.children.length = 0;
|
|
|
|
var group = json.userData.group;
|
|
var emitter = json.userData.emitter;
|
|
|
|
json.userData.group = {
|
|
texture: (new TexturesSerializer()).toJSON(group.texture),
|
|
maxParticleCount: group.maxParticleCount
|
|
};
|
|
|
|
json.userData.emitter = {
|
|
position: {
|
|
value: {
|
|
x: emitter.position.value.x,
|
|
y: emitter.position.value.y,
|
|
z: emitter.position.value.z
|
|
},
|
|
spread: {
|
|
x: emitter.position.spread.x,
|
|
y: emitter.position.spread.y,
|
|
z: emitter.position.spread.z
|
|
}
|
|
},
|
|
velocity: {
|
|
value: {
|
|
x: emitter.velocity.value.x,
|
|
y: emitter.velocity.value.y,
|
|
z: emitter.velocity.value.z
|
|
},
|
|
spread: {
|
|
x: emitter.velocity.spread.x,
|
|
y: emitter.velocity.spread.y,
|
|
z: emitter.velocity.spread.z
|
|
}
|
|
},
|
|
acceleration: {
|
|
value: {
|
|
x: emitter.acceleration.value.x,
|
|
y: emitter.acceleration.value.y,
|
|
z: emitter.acceleration.value.z
|
|
},
|
|
spread: {
|
|
x: emitter.acceleration.spread.x,
|
|
y: emitter.acceleration.spread.y,
|
|
z: emitter.acceleration.spread.z
|
|
}
|
|
},
|
|
color: {
|
|
value: [
|
|
emitter.color.value[0].getHex(),
|
|
emitter.color.value[1].getHex(),
|
|
emitter.color.value[2].getHex(),
|
|
emitter.color.value[3].getHex()
|
|
]
|
|
},
|
|
size: {
|
|
value: emitter.size.value,
|
|
spread: emitter.size.spread
|
|
},
|
|
particleCount: emitter.particleCount,
|
|
maxAge: {
|
|
value: emitter.maxAge.value,
|
|
spread: emitter.maxAge.spread
|
|
}
|
|
};
|
|
|
|
return json;
|
|
};
|
|
|
|
ParticleEmitterSerializer.prototype.fromJSON = function (json) {
|
|
var groupJson = json.userData.group;
|
|
var emitterJson = json.userData.emitter;
|
|
|
|
var group = new SPE.Group({
|
|
texture: {
|
|
value: (new TexturesSerializer()).fromJSON(groupJson.texture)
|
|
},
|
|
maxParticleCount: groupJson.maxParticleCount
|
|
});
|
|
|
|
var emitter = new SPE.Emitter({
|
|
maxAge: {
|
|
value: emitterJson.maxAge.value
|
|
},
|
|
position: {
|
|
value: new THREE.Vector3().copy(emitterJson.position.value),
|
|
spread: new THREE.Vector3().copy(emitterJson.position.spread)
|
|
},
|
|
|
|
acceleration: {
|
|
value: new THREE.Vector3().copy(emitterJson.acceleration.value),
|
|
spread: new THREE.Vector3().copy(emitterJson.acceleration.spread)
|
|
},
|
|
|
|
velocity: {
|
|
value: new THREE.Vector3().copy(emitterJson.velocity.value),
|
|
spread: new THREE.Vector3().copy(emitterJson.velocity.spread)
|
|
},
|
|
|
|
color: {
|
|
value: [
|
|
new THREE.Color(emitterJson.color.value[0]),
|
|
new THREE.Color(emitterJson.color.value[1]),
|
|
new THREE.Color(emitterJson.color.value[2]),
|
|
new THREE.Color(emitterJson.color.value[3])
|
|
]
|
|
},
|
|
|
|
size: {
|
|
value: emitterJson.size.value.slice(),
|
|
spread: emitterJson.size.spread.slice()
|
|
},
|
|
|
|
particleCount: emitterJson.particleCount
|
|
});
|
|
|
|
var obj = new ParticleEmitter(group, emitter);
|
|
|
|
delete json.userData.group;
|
|
delete json.userData.emitter;
|
|
|
|
Object3DSerializer.prototype.fromJSON.call(this, json, obj);
|
|
|
|
obj.userData.group.tick(0);
|
|
|
|
return obj;
|
|
};
|
|
|
|
export default ParticleEmitterSerializer; |