class OrbitalLobular extends OrbitalAncestral {
antesCriar() {
super.antesCriar();
this.config = {numPartes: 10,numPartesCone: 8,numPartesEsfera: 2};
this.alturaCone = this.raio / this.config.numPartes * this.config.numPartesCone;
this.raioEsfera = this.raio/ this.config.numPartes * this.config.numPartesEsfera;
this.meioRaio = this.raio / 2;
this.criarEixosDirecoes();
this.geometriaCone = this.cenario.criarGeometriaCone(this.raioEsfera,0,this.alturaCone,128,128,true,doisPi,doisPi,this);
this.geometriaEsfera = this.cenario.criarGeometriaEsfera(this.raioEsfera,128,128,0,doisPi,0,meioPi,this);
this.geometriaTorus = undefined;
}
criarEixosDirecoes() {
}
criarLobulo(criarTorus) {
this.lobulo = new THREE.Object3D();
this.lobulo.cone = this.adicionar(this.lobulo,this.criarConeLobulo());
this.lobulo.esfera = this.adicionar(this.lobulo,this.criarEsferaLobulo());
var yc = this.meioRaio - (this.raioEsfera / 2);
this.lobulo.cone.position.y = yc;
this.lobulo.esfera.position.y = yc + (this.alturaCone / 2);
if (criarTorus) {
this.lobulo.torus = this.adicionar(this.lobulo,this.criarTorus());
} else {
this.lobulo.torus = undefined
}
return this.lobulo;
}
criarLobulos(angulos,torus) {
for (var i = 0; i < angulos.length; i++) {
var lobulo = this.criarLobulo(torus);
lobulo.rotation.z = angulos[i];
this.AdicionarNaNuvem(lobulo);
}
}
preparar() {
super.preparar();
var aux = this.eixosDirecoes[this.numEletronsOrbital-1];
this.eixo = aux[0];
this.direcao = aux[1];
}
criarNuvem() {
super.criarNuvem();
}
duranteDestruirNuvem() {
super.duranteDestruirNuvem();
for (var i = (this.nuvem.length-1); i >= 0; i--) {
var lobulo = this.nuvem[i];
this.remover(lobulo,lobulo.cone);
lobulo.cone = undefined;
this.remover(lobulo,lobulo.esfera);
lobulo.esfera = undefined;
if (lobulo.torus) {
this.remover(lobulo,lobulo.torus);
lobulo.torus = undefined;
}
this.remover(this.orbital3d,lobulo);
this.nuvem[i] = undefined;
this.nuvem.pop();
}
}
rotacionar() {
super.rotacionar();
this.orbital3d.rotation.set(0,0,0);
}
movimentarEletrons() {
// if (this.nuvem.length < 3) return;
super.movimentarEletrons();
var lobulo = this.nuvem[this.proximo++];
if (this.proximo === this.nuvem.length) this.proximo = 0;
var eletron = this.eletrons[0];
var eletron3d = eletron.obterEletron3d();
eletron3d.rotation.copy(lobulo.rotation);
eletron3d.malha.position.y = Math.random() * this.raio;
eletron3d.malha.position.x = (eletron3d.malha.position.y > this.alturaCone) ?
(Math.cos(Math.asin((eletron3d.malha.position.y - this.alturaCone) / this.raioEsfera)) * this.raioEsfera) :
(eletron3d.malha.position.y * this.raioEsfera) / this.raio;
eletron3d.rotation.y = Math.random() * doisPi;
}
criarEsferaLobulo(raio) {
return this.cenario.criarMalha(this.geometriaEsfera,this.material[0],this);
//return new THREE.Mesh(this.geometriaEsfera,this.material[0]);
}
criarConeLobulo() {
return this.cenario.criarMalha(this.geometriaCone,this.material[1],this);
//return new THREE.Mesh(this.geometriaCone,this.material[1]);
}
criarTorus() {
var raioTorusInterno = this.raio / 20;
var raioTorusExterno = raioTorusInterno * 2;
var distanciaTorus = -raioTorusInterno;
if (!this.geometriaTorus)
this.geometriaTorus = this.cenario.criarGeometriaTorus(raioTorusExterno,raioTorusInterno,128,128,/*Math.PI*/doisPi,this);
return this.cenario.criarMalha(this.geometriaTorus,this.material[0],this);
//var torus = new THREE.Mesh(this.geometriaTorus,this.material[0]);
torus.position.y = distanciaTorus;
torus.rotation.x = meioPi;
return torus;
}
}