HollowBond/Public/ecma/Materials/Debug/RoomMaterialDebug.ecma.js

76 lines
2.3 KiB
JavaScript

"use strict";
const RoomMaterialDebug = (function(){
const RoomMaterialDebug = function(hollow_bond){
const face_cache = {},
edge_cache = {};
/**
* Material de las caras translúcidas de la habitación según la distancia al piso enfocado.
* @param {number} [dist=0] - Distancia en pisos |floor - current_floor|
* @returns {THREE.MeshBasicMaterial}
*/
this.get_face_material = (dist = 0) => {
const key = String(dist);
if(!face_cache[key]){
// Piso activo: opacidad moderada; pisos lejanos: decaimiento progresivo
const opacity = dist === 0 ? 0.35 : Math.max(0.06, 0.22 / (dist * 1.5));
face_cache[key] = new THREE.MeshBasicMaterial({
color : 0x9333ea, // Púrpura característico de habitaciones
transparent : true,
opacity : opacity,
depthWrite : false
});
}
return face_cache[key];
};
/**
* Material para perfilar las aristas ortogonales de la habitación.
* @param {number} [dist=0]
* @returns {THREE.LineBasicMaterial}
*/
this.get_edge_material = (dist = 0) => {
const key = String(dist);
if(!edge_cache[key]){
const opacity = dist === 0 ? 0.85 : Math.max(0.12, 0.5 / (dist * 1.4));
edge_cache[key] = new THREE.LineBasicMaterial({
color : 0xd8b4fe, // Lavanda brillante para aristas
transparent : true,
opacity : opacity,
depthWrite : false
});
}
return edge_cache[key];
};
// Fallback rápido compatible
this.get = () => this.get_face_material(0);
this.reset = () => {
for(const k in face_cache){
if(face_cache[k]){
face_cache[k].dispose();
delete face_cache[k];
}
}
for(const k in edge_cache){
if(edge_cache[k]){
edge_cache[k].dispose();
delete edge_cache[k];
}
}
};
};
return RoomMaterialDebug;
})();