SHA256
Связи (pixel-aquarium): Умный фокус (Smart Zoom / «аквариум») — погружение в узел + LOD
Новая ветка для безопасного отката (от pixel-web). Режим «Вселенная», только лаборатория.
1. Гибрид клика: 1-й уровень → раскрытие ветки НА МЕСТЕ (как раньше); 2-й уровень+ → ПОГРУЖЕНИЕ.
2. Dive (умный наезд камеры, «аквариум», без перестройки графа):
- diveTo(node): пинит весь путь (предки до Ивана), ставит diveTargetId + diveZoom=1.7;
камера в tick плавно ЛЕТИТ и ЗУМИТ, центрируя узел (DIVE_FLY_K), узел ВЫРАСТАЕТ (×2.1 ~ герой).
- Глубина (contextTargetOf → depthScale/depthBlur/spotCur, лерп): Иван и боковые ветки
УМЕНЬШАЮТСЯ (root ×0.55) + уходят в BLUR 3px + тускнеют до 0.25 → задний план «аквариума».
- Нить-крошка: путь Иван→…→узел (divePathSet/onPath) горит ярким «световодом» — виден путь назад.
- Всплытие: повтор клика по цели → exitDive (камера/зум плавно к корню); клик по Ивану →
collapseAll (полный сброс + всплытие).
3. Pinch-to-Zoom + LOD 3-го уровня: при zoom≥1.55 видимые точки 3-го уровня дорисовываются как
читаемые аватарки (лицо+имя; updateLod/setNodeLod — пере-рендер DOM на пороге), при отдалении —
обратно в светящиеся точки. Узлам tier-3 добавлены фото-заглушки (pravatar) и имена.
Глубина — фейк-3D через масштаб + CSS-blur (GPU), без WebGL. Реальный путь /network-view не затронут:
dive только tier≥2 (в реале их нет), depthScale/Blur нейтральны по умолчанию, updateLod выходит при !hasDeep.
Бамп client.version → 1.2.146.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -47,9 +47,12 @@ function helpText() {
|
||||
'• Долгое нажатие — контекстное меню (в реальном пути «Связи»).',
|
||||
'• Чипы под шапкой — фильтры слоёв: Все / Семья / Друзья / Сияющие.',
|
||||
'• Чип «Вселенная» — режим «Интерактивная паутина» (глубина 2-3 уровней, фейковые связи).',
|
||||
' По умолчанию дальние связи скрыты. Наведи мышь/палец на узел — его микро-связи временно',
|
||||
' выплывают (превью), убери — втягиваются. Кликни/тапни узел — раскрытие ФИКСИРУЕТСЯ.',
|
||||
' Тап по центру (Ивану) — свернуть все ветки. Колесо мыши / щипок — зум. Свайп — pan.',
|
||||
' Наведи мышь/палец на узел 1-го уровня — его микро-связи временно выплывают (превью);',
|
||||
' клик/тап — раскрытие ФИКСИРУЕТСЯ. Клик по маленькому узлу 2-го уровня — «умный наезд»:',
|
||||
' камера летит к нему, он вырастает в центр, Иван уходит вглубь (нить-крошка назад горит).',
|
||||
' Клик по нему ещё раз — всплыть назад. Тап по центру (Ивану) — полный сброс.',
|
||||
' Колесо мыши / щипок двумя пальцами — зум; при сильном приближении точки 3-го уровня',
|
||||
' превращаются в аватарки. Свайп — pan.',
|
||||
'',
|
||||
'Доступные люди: Иван, Алиса, Павел, Елена, Дмитрий, Олег, Нина, Марина, Света, Кирилл.',
|
||||
].join('\n');
|
||||
@@ -104,8 +107,11 @@ function addDeepLevels(model) {
|
||||
for (let j = 0; j < k3; j += 1) {
|
||||
const id3 = `${id2}_d3_${j}`;
|
||||
const ang3 = (j / k3) * Math.PI * 2 + seed01(id2) * 0.9;
|
||||
// фото-лицо + имя для LOD: точка-звезда дорисуется в читаемую аватарку при сильном зуме
|
||||
const face3 = `https://i.pravatar.cc/100?img=${1 + Math.floor(seed01(id3 + 'p') * 70)}`;
|
||||
extra.push({
|
||||
id: id3, login: id3, name: '', avatar: null, photo: null, relationType: 'contact',
|
||||
id: id3, login: id3, name: DEEP_NAMES[Math.floor(seed01(id3 + 'n') * DEEP_NAMES.length)],
|
||||
avatar: null, photo: face3, relationType: 'contact',
|
||||
strength: 0.2, shining: seed01(id3) > 0.82, tier: 3, parentId: id2, deepAngle: ang3,
|
||||
});
|
||||
}
|
||||
@@ -192,9 +198,10 @@ export function renderNetworkLab({ navigate }) {
|
||||
// в режиме «Вселенная» вокруг нового центра процедурно генерится дальняя орбита.
|
||||
onNodeTap: (node) => {
|
||||
if (deepMode) {
|
||||
// режим «Интерактивная паутина»: НЕ меняем центр — клик ФИКСИРУЕТ раскрытие ветки (остаётся
|
||||
// открытой и после ухода курсора); повторный клик снимает фиксацию.
|
||||
graph.toggleExpand(node);
|
||||
// 2-й уровень+ → Smart Zoom (умный наезд камеры, «аквариум»): узел выплывает в центр,
|
||||
// Иван уходит вглубь, нить-крошка назад горит. 1-й уровень → раскрытие ветки НА МЕСТЕ.
|
||||
if ((node.tier || 1) >= 2) graph.diveTo(node);
|
||||
else graph.toggleExpand(node);
|
||||
return;
|
||||
}
|
||||
// обычный режим: перецентрирование на выбранного человека (+ трек прохождения)
|
||||
|
||||
Reference in New Issue
Block a user