class Eletron extends AncestralVisualComum {
antesCriar() {
super.antesCriar();
this.orbital = this.dados.orbital;
this.cenario = this.dados.cenario;
this.geometria = this.cenario.geometriaEletron;
this.material = this.orbital.materialEletron;
this.cintilacoes = [];
this.primeiraCintilacao = null;
this.ultimaCintilacao = null;
this.numCintilacoes = 0;
this.maxCintilacoes = 1; // rever para mais
this.opacidadeInicial = 0.05;
this.decrescimo = this.opacidadeInicial / this.maxCintilacoes;
}
duranteDestruir() {
super.duranteDestruir();
// liberar eletrons
for (var i = this.cintilacoes.length-1; i >= 0; i--) {
var eletron3d = this.cintilacoes[i];
this.remover(eletron3d,eletron3d.malha);
eletron3d.malha = undefined;
//eletron3d.malha.material.dispose();
this.orbital.orbital3d.remove(eletron3d);
this.cintilacoes.pop();
eletron3d = undefined;
}
}
criarMaterialCintilacao() {
if (this.maxCintilacoes === 1) return this.material;
if (this.numCintilacoes === 0)
this.opacidade = 1;
else if(this.numCintilacoes === 1)
this.opacidade = this.opacidadeInicial;
var material = this.material;
//var material = new THREE.MeshPhongMaterial({color: this.material.color, transparent: true, opacity: this.opacidade, side: THREE.DoubleSide, depthWrite: false});
this.opacidade = this.opacidade - this.decrescimo;
return material;
}
criarCintilacao() {
var eletron3d = this.adicionar(this.orbital.orbital3d,new THREE.Object3D());
eletron3d.indiceCintilacao = this.cintilacoes.length;
eletron3d.material = this.criarMaterialCintilacao();
eletron3d.malha = this.adicionar(eletron3d,new THREE.Mesh(this.geometria,eletron3d.material));
eletron3d.malha.position.y = this.orbital.raio;
this.cintilacoes.push(eletron3d);
this.numCintilacoes++;
}
obterEletron3d() {
if (this.cintilacoes.length < this.maxCintilacoes) this.criarCintilacao();
this.cintilar();
return this.cintilacoes[0];
}
cintilar() {
for (var i = this.cintilacoes.length-1; i > 0; i--) {
var origem = this.cintilacoes[i-1];
var destino = this.cintilacoes[i];
destino.position.copy(origem.position);
destino.rotation.copy(origem.rotation);
destino.malha.position.copy(origem.malha.position);
destino.malha.rotation.copy(origem.malha.rotation);
}
}
}