class HmAncestral {
constructor (_dados) {
if (_dados) {
this.dados = _dados;
var _this = this;
Object.keys(_dados).forEach(
function(_nomeObj) {
_this[_nomeObj] = _dados[_nomeObj];
});
this.preparar();
this.criar();
}
}
get incluir(){
return true;
}
preparar() {
}
criar() {
}
}
function criarPastaObjeto3d(_pai, _guiPai, _nome) {
_pai.controles = {
pai: _pai,
posicaoX: _pai.object3d.position.x,
posicaoY: _pai.object3d.position.y,
posicaoZ: _pai.object3d.position.z,
rotacaoX: _pai.object3d.rotation.x,
rotacaoY: _pai.object3d.rotation.y,
rotacaoZ: _pai.object3d.rotation.z
};
var _folder = _guiPai.addFolder(_nome);
_folder.posicao = _folder.addFolder("posição " + _nome);
_folder.posicao.add(_pai.controles, 'posicaoX', -300, 300).onChange(function(e) {
this.object.pai.controles.posicaoX = e;
this.object.pai.object3d.position.x = e;
});
_folder.posicao.add(_pai.controles, 'posicaoY', -300, 300).onChange(function(e) {
this.object.pai.controles.posicaoY = e;
this.object.pai.object3d.position.y = e;
});
_folder.posicao.add(_pai.controles, 'posicaoZ', -300, 300).onChange(function(e) {
this.object.pai.controles.posicaoZ = e;
this.object.pai.object3d.position.z = e;
});
_folder.rotacao = _folder.addFolder("rotação " + _nome);
_folder.rotacao.add(_pai.controles, 'rotacaoX', 0, 2 * Math.PI).onChange(function(e) {
this.object.pai.controles.rotacaoX = e;
this.object.pai.object3d.rotation.x = e;
});
_folder.rotacao.add(_pai.controles, 'rotacaoY', 0, 2 * Math.PI).onChange(function(e) {
this.object.pai.controles.rotacaoY = e;
this.object.pai.object3d.rotation.y = e;
});
_folder.rotacao.add(_pai.controles, 'rotacaoZ', 0, 2 * Math.PI).onChange(function(e) {
this.object.pai.controles.rotacaoZ = e;
this.object.pai.object3d.rotation.z = e;
});
return _folder;
}
class HmAncestralObject3d extends HmAncestral {
constructor(_dados) {
super(_dados);
}
classe() {
return null;
}
// object3d = new THREE.Object3D();
preparar() {
super.preparar();
this.object3d = new THREE.Object3D();
//this.object3d = new THREE.Object3D();
}
criar() {
super.criar();
var classe = this.classe();
if (classe) this.criarObjeto(classe);
this.criarMalha();
}
criarGeometria() {
return null;
}
criarMaterial() {
return null;
}
criarMalha() {
this.geometria = this.criarGeometria();
this.material = this.criarMaterial();
if (this.geometria && this.material)
this.malha = this.criarObjetoMesh(new THREE.Mesh(this.geometria,this.material));
return this.malha;
}
criarObjeto(_objeto,_vetor) {
var _obj = (typeof _objeto === "function") ? new _objeto(this) : _objeto;
this.object3d.add(_obj.object3d);
if (_vetor) { _vetor.push(_obj); }
return _obj;
}
criarObjetoMesh(_objeto,_vetor) {
return this.criarObjeto({object3d: _objeto},_vetor);
}
interceptado(_x,_y) {
return false;
}
vetorExternoInterceptado(_vetor,_x,_y) {
this._vetor.find(function(_obj){return _obj.interceptado(_x,_y)});
}
}
var HIPERMUSEU = {};
HIPERMUSEU.carregar = function(_url, _nomeArquivo) {
var _hmHipermuseu = null;
$.ajax({
url: _url + "json/json-hipermuseu-01e.json" + _nomeArquivo,
async: false,
success: function(_configHipermuseu) {
_hmHipermuseu = new HmHipermuseu(_configHipermuseu);
_obj3D.hmHipermuseu = _hmHipermuseu;
_obj3D.cena.add(_hmHipermuseu.object3d);
}
});
return _hmHipermuseu;
};
class HmHipermuseu extends HmAncestralObject3d {
constructor(_configHipermuseu) {
super({configHipermuseu: _configHipermuseu});
}
classe() {
return HmMuseus;
}
preparar() {
super.preparar();
this.cfg = this.configHipermuseu;
this.gui = (true || _obj3D.apresentarGUI) ? new dat.GUI() : null;
if (this.cfg.ativar_luz_hemisferica) {
this.luzHemisferica = this.criarObjeto(HmLuzHemisferica);
}
if (this.cfg.ativar_luz_ambiente) {
this.luzAmbiente = this.criarObjeto(HmLuzAmbiente);
}
if (this.cfg.ativar_luz_direcional) {
this.luzDirecional = this.criarObjeto(HmLuzDirecional);
}
if (this.cfg.ativar_chao) this.chao = this.criarObjeto(HmChao);
if (this.cfg.ativar_ceu) this.ceu = this.criarObjeto(HmCeu);
};
}
class HmAncestralObject3dVetor extends HmAncestralObject3d {
constructor(_dados) {
super(_dados);
}
preparar() {
super.preparar();
this.vetor = [];
}
criar () {
var classe = this.classe();
var cfg = this.cfg;
if (cfg && classe) this.criarVetor(cfg,classe);
}
criarObjetoVetor(_objeto) {
return this.criarObjeto(_objeto,this.vetor);
}
criarVetor(config,funcaoObjVetor) {
var _this = this;
config.forEach(
function(_obj,_indice) {
var _objVetor = new funcaoObjVetor(_this,_indice);
if (_objVetor.incluir) _this.criarObjeto(_objVetor,_this.vetor);});
}
vetorInterceptado(vetor,_x,_y) {
this.vetor.find(function(_obj){return _obj.quadroInterceptado(_x,_y)});
}
}
class HmLuzHemisferica extends HmAncestralObject3d {
constructor(_hipermuseu) {
super({hipermuseu: _hipermuseu});
}
preparar() {
super.preparar();
this.cfg = this.hipermuseu.cfg.luz_hemisferica;
this.gui = criarPastaObjeto3d(this,this.hipermuseu.gui,"luz hemisférica");
//this.criarLuzHemisferica();
}
criar() {
super.criar();
var c = this.cfg;
this.luz = this.criarObjetoMesh(new THREE.HemisphereLight(c.corCeu,c.corChao,c.intensidade)).object3d;
/*
this.luz = new THREE.HemisphereLight(
this.cfg.corCeu,
this.cfg.corChao,
this.cfg.intensidade);
this.object3d.add(this.luz);
*/
this.luz.color.setHSL(0.6, 1, 0.6);
this.luz.groundColor.setHSL(0.095, 1, 0.75);
this.luz.position.set(0, 500, 0);
}
}