"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; })();