/
RaskolnickOFF
/
3D
Обзор
Документация
Войти
/
RaskolnickOFF
/
3D
Код
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/source/core/RenderCleanup.js
67 строк
2 KB
RaskolnickOFF
Structure update
06 июн 2026, 03:18
06 июн 2026, 03:18
9bc1c25
Код
Авторство
О чём код?
// js/source/core/RenderCleanup.js — утилита для полной очистки THREE.js сцены /** * Утилита для безопасной очистки THREE.js сцены при загрузке сохранения. * Удаляет игровые объекты (враги, лут), но сохраняет землю, свет и камеру. */ export class RenderCleanup { /** * Имена объектов, которые НЕ удаляются при очистке сцены. * Сравнение по contains: если name содержит любую из этих строк — объект сохраняется. */ static PRESERVE_NAMES = ['GroundGroup', 'DirectionalLight', 'AmbientLight', 'SkyMesh']; /** * Очищает сцену от игровых объектов, сохраняя землю и свет. * @param {THREE.Scene} scene */ static clearScene(scene) { const toRemove = []; for (const child of scene.children) { const name = child.name || ''; const shouldPreserve = this.PRESERVE_NAMES.some(p => name.includes(p)); if (!shouldPreserve) { toRemove.push(child); } } for (const obj of toRemove) { this._disposeObject(obj); scene.remove(obj); } console.log(`[RenderCleanup] Removed ${toRemove.length} objects, preserved ${scene.children.length} objects`); } /** * Рекурсивно очищает объект и его потомков. * @private * @param {THREE.Object3D} obj */ static _disposeObject(obj) { // Очищаем geometry if (obj.geometry) { obj.geometry.dispose(); } // Очищаем material(ы) if (obj.material) { if (Array.isArray(obj.material)) { obj.material.forEach(m => m.dispose()); } else { obj.material.dispose(); } } // Рекурсивно очищаем все дочерние объекты if (obj.children && obj.children.length > 0) { const childrenCopy = [...obj.children]; for (const child of childrenCopy) { this._disposeObject(child); } } } }