Files
rltn/test-wireframe-fix.js

165 lines
10 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Исправление проблемы с рамками коллайдеров
// Файл: test-wireframe-fix.js
console.log('🔧 Исправление проблемы с рамками коллайдеров');
console.log('');
console.log('❓ Проблема:');
console.log('У каждого коллайдера два объекта: один только рамка, другой полностью закрашен');
console.log('При перемещении только рамки не сохраняется перемещение');
console.log('При перемещении полностью закрашенного объекта всё сохраняется');
console.log('');
console.log('🔍 Причина проблемы:');
console.log('');
console.log('1. 🏗️ Структура коллайдеров:');
console.log(' - Каждый коллайдер состоит из основного меша (mesh) и рамки (line)');
console.log(' - Рамка добавляется как дочерний объект: mesh.add(line)');
console.log(' - При клике можно выбрать либо основной меш, либо рамку');
console.log('');
console.log('2. 🎯 Проблема выбора:');
console.log(' - Рамка (LineSegments) не имеет userData с параметрами коллайдера');
console.log(' - Только основной меш имеет правильные userData и обновляется в collidersRef');
console.log(' - При выборе рамки TransformControls прикрепляется к ней, но данные не сохраняются');
console.log('');
console.log('3. 💾 Проблема сохранения:');
console.log(' - updateColliderData работает только с основными мешами');
console.log(' - Рамки не участвуют в процессе сохранения');
console.log(' - Перемещение рамки не влияет на позицию основного меша');
console.log('');
console.log('✅ Исправления:');
console.log('');
console.log('1. 🎯 Улучшенная логика выбора:');
console.log(' - Raycaster теперь проверяет все объекты коллайдеров (меши + рамки)');
console.log(' - При клике по рамке автоматически выбирается родительский меш');
console.log(' - Проверка, что выбранный объект действительно является коллайдером');
console.log('');
console.log('2. 🔲 Опция отключения рамок:');
console.log(' - Новое состояние showWireframes для управления видимостью');
console.log(' - Функция toggleWireframes для переключения видимости');
console.log(' - Кнопка в UI для удобного управления');
console.log('');
console.log('3. 🏗️ Обновление создания коллайдеров:');
console.log(' - Новые коллайдеры учитывают настройку видимости рамок');
console.log(' - Дублированные коллайдеры учитывают настройку видимости рамок');
console.log(' - Загруженные коллайдеры учитывают настройку видимости рамок');
console.log('');
console.log('🔧 Технические детали:');
console.log('');
console.log('🎯 Логика выбора:');
console.log('- allColliderObjects = [основные меши, рамки]');
console.log('- if (clickedObject.type === "LineSegments") clickedObject = clickedObject.parent');
console.log('- Проверка через collidersRef.current.find(c => c.mesh === clickedObject)');
console.log('');
console.log('🔲 Управление рамками:');
console.log('- showWireframes: boolean состояние');
console.log('- toggleWireframes(): переключает видимость всех рамок');
console.log('- line.visible = showWireframes при создании');
console.log('- child.visible = newShowWireframes при переключении');
console.log('');
console.log('🏗️ Структура коллайдера:');
console.log('- mesh (основной меш с материалом)');
console.log('- mesh.children[0] (рамка LineSegments)');
console.log('- mesh.userData (параметры коллайдера)');
console.log('- collidersRef содержит ссылки на основные меши');
console.log('');
console.log('🧪 Как тестировать исправления:');
console.log('');
console.log('1. 🎯 Выбор коллайдеров:');
console.log(' - Загрузите редактор коллизий');
console.log(' - Попробуйте кликнуть по рамке коллайдера');
console.log(' - Проверьте консоль: "🎯 Кликнули по рамке, выбираем родительский меш"');
console.log(' - Убедитесь, что TransformControls прикрепился к основному мешу');
console.log(' - Переместите коллайдер и сохраните');
console.log(' - Перезагрузите страницу и проверьте, что позиция сохранилась');
console.log('');
console.log('2. 🔲 Переключение рамок:');
console.log(' - Нажмите кнопку "🔲 Скрыть рамки"');
console.log(' - Проверьте консоль: "🔲 Рамки отключены"');
console.log(' - Убедитесь, что все рамки исчезли');
console.log(' - Нажмите кнопку "🔲 Показать рамки"');
console.log(' - Проверьте консоль: "🔲 Рамки включены"');
console.log(' - Убедитесь, что все рамки появились');
console.log('');
console.log('3. 🆕 Создание с отключенными рамками:');
console.log(' - Отключите рамки');
console.log(' - Создайте новый коллайдер');
console.log(' - Убедитесь, что новый коллайдер создался без рамки');
console.log(' - Включите рамки');
console.log(' - Убедитесь, что рамка появилась у нового коллайдера');
console.log('');
console.log('4. 🔄 Дублирование с отключенными рамками:');
console.log(' - Отключите рамки');
console.log(' - Дублируйте существующий коллайдер');
console.log(' - Убедитесь, что дублированный коллайдер создался без рамки');
console.log(' - Включите рамки');
console.log(' - Убедитесь, что рамка появилась у дублированного коллайдера');
console.log('');
console.log('5. 💾 Сохранение перемещений:');
console.log(' - Кликните по рамке коллайдера');
console.log(' - Переместите его в новое место');
console.log(' - Нажмите "Сохранить сейчас"');
console.log(' - Перезагрузите страницу');
console.log(' - Убедитесь, что коллайдер остался в новом месте');
console.log('');
console.log('🎯 Ожидаемые результаты:');
console.log('');
console.log('✅ Выбор коллайдеров:');
console.log('- [ ] Клик по рамке выбирает основной меш');
console.log('- [ ] TransformControls прикрепляется к основному мешу');
console.log('- [ ] Перемещение рамки перемещает весь коллайдер');
console.log('- [ ] Сохранение работает корректно');
console.log('');
console.log('✅ Управление рамками:');
console.log('- [ ] Кнопка переключает видимость всех рамок');
console.log('- [ ] Новые коллайдеры учитывают настройку');
console.log('- [ ] Дублированные коллайдеры учитывают настройку');
console.log('- [ ] Загруженные коллайдеры учитывают настройку');
console.log('');
console.log('✅ Сохранение перемещений:');
console.log('- [ ] Перемещение через рамку сохраняется');
console.log('- [ ] Перемещение через основной меш сохраняется');
console.log('- [ ] Автоматическое сохранение работает');
console.log('- [ ] Ручное сохранение работает');
console.log('');
console.log('🔍 Отладочная информация:');
console.log('');
console.log('📊 В консоли должно появляться:');
console.log('- "🎯 Кликнули по рамке, выбираем родительский меш"');
console.log('- "🔲 Рамки включены/отключены"');
console.log('- "🎯 Выбран коллайдер: [объект]"');
console.log('');
console.log('🎯 Проверка структуры:');
console.log('- selected.type должен быть "Mesh" (не "LineSegments")');
console.log('- selected.userData должен содержать параметры коллайдера');
console.log('- selected.children[0].type должен быть "LineSegments"');
console.log('');
console.log('🚀 Исправления готовы к тестированию!');
console.log('Откройте: http://localhost:4000/enhanced-collision-editor');
console.log('Попробуйте кликнуть по рамке коллайдера и переместить его');