class OrbitalAncestral extends AncestralComum {

	//-------------------------------------------------------------------------------------------------
	// A função "criar" é responsável por criar objetos das classes OrbitalS, OrbitalP, 
	// OrbitalD e OrbitalF, descendentes de OrbitalAncestral e que implementam os procedimentos
	// especificos nas respectivas funções descendentes de "criar". O orbital3d agrupa a nuvem 
	// contendo as porções de densidade da probabilidade de encontrar-se os elétrons nos átomos, mais os
	// eletróns que orbitam nestas nuvem.
	//-------------------------------------------------------------------------------------------------

	antesCriar() {
	   super.antesCriar();
	   this.atomo = this.dados.atomo;                             // Armazena-se o valor do argumento "atomo" na variável de classe "this.atomo".
	   this.cenario = this.dados.cenario;                             // Armazena-se o valor do argumento "atomo" na variável de classe "this.atomo".
	   this.raio = this.dados.raio;                               // Armazena-se o valor da variável de classe "atomo.raio" na variável de classe "this.raio".
	   this.material = this.dados.material;                       // Armazena-se a constante com o material a ser utilizado no orbital3d.
	   this.materialEletron = this.dados.materialEletron;
	   this.numEletronsOrbital = this.dados.numEletronsOrbital;
	   this.proximo = 0;
	}

	duranteCriar() {
	   super.duranteCriar();
	   this.preparar();
	   this.criarNuvem();
	   this.criarEletrons();
	   this.rotacionar();
	}

	duranteDestruir() {
	   super.duranteDestruir();
	   this.destruirEletrons();
	   this.destruirNuvem();
	}

	preparar() {
	   this.nuvem = [];
	   this.eletrons = [];
	   this.orbital3d = this.adicionar(this.atomo.atomo3d,new THREE.Object3D());
	}

	AdicionarNaNuvem(objeto) {
	   this.adicionar(this.orbital3d,objeto);	
	   //this.orbital3d.add(objeto);
	   this.nuvem.push(objeto);
	   return objeto;
	}

	criarNuvem() {}

	antesDestruirNuvem() {}

	duranteDestruirNuvem() {}

	depoisDestruirNuvem() {
	   this.remover(this.atomo.atomo3d,this.orbital3d);
	   this.orbital3d = undefined;
	   //this.atomo.atomo3d.remove(this.orbital3d);
	}

	destruirNuvem() {
	   this.antesDestruirNuvem();
	   this.duranteDestruirNuvem();
	   this.depoisDestruirNuvem();
	}

	criarEletron(){
	   this.eletron = new Eletron({orbital: this, cenario: this.cenario, criar: true});
	   this.eletrons.push(this.eletron);
	}

	criarEletrons() {
	   this.criarEletron();
	}

	destruirEletrons() {
	   for (var i = this.eletrons.length-1; i >=0; i--) {
		  this.eletrons[i].destruir();
		  this.eletrons.pop();
	   }
	}

	rotacionar() {}

	movimentarEletrons() {}
}