diff --git a/README.md b/README.md index ceb66787a..745bec3d8 100644 --- a/README.md +++ b/README.md @@ -294,14 +294,14 @@ Choose a first-run mission, or try these in order. The GIFs show Google Photorea ![Tracking the ISS along its orbital path as it crosses over Ukraine](docs/media/14-iss-over-ukraine.gif) -6. **Switch the optics.** Tap `1`–`7` — CRT, NVG, FLIR — and the whole live planet re-renders through a different sensor. +6. **Switch the optics.** Tap `1`–`6` — CRT, NVG, FLIR — and the whole live planet re-renders through a different sensor. ![Cycling a dense live globe through CRT, FLIR, and NVG in one continuous view](docs/media/01-style-sweep.gif) 7. **Talk to it** _(needs an OpenAI key)_: _"Take me to LAX and select the nearest airborne aircraft."_ 8. **Come home.** Hit **Reset Globe** — or just say _"zoom out to a globe view."_ -**Keyboard:** `1`–`7` visual styles · `H` HUD · `D` detection · `C` cockpit · `` ` `` frame rate · `Esc` out. Trackpad pinch zooms the globe. +**Keyboard:** `1`–`6` visual styles · `H` HUD · `D` detection · `C` cockpit · `` ` `` frame rate · `Esc` out. Trackpad pinch zooms the globe. --- diff --git a/scripts/package-boundaries.json b/scripts/package-boundaries.json index 8aabedc08..b49872430 100644 --- a/scripts/package-boundaries.json +++ b/scripts/package-boundaries.json @@ -964,7 +964,8 @@ "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", - "src/ui/unitLabels.js" + "src/ui/unitLabels.js", + "src/visualStylePolicy.js" ], "external": ["cesium"] }, diff --git a/src/director/document.test.mjs b/src/director/document.test.mjs index c0b8b0935..9294abb7b 100644 --- a/src/director/document.test.mjs +++ b/src/director/document.test.mjs @@ -135,6 +135,15 @@ test('document byte, nesting, collection, finite-number and string bounds are en ); }); +test('a shot saved with the retired Snow style migrates to Normal', () => { + const project = fixture(); + project.scenes[0].shots[0].visual = { style: 'snow' }; + const migrated = normalizeProject( + parseSceneDocument(JSON.stringify(project)), + ); + assert.equal(migrated.scenes[0].shots[0].visual.style, 'normal'); +}); + test('captured scope and extended detection edits survive migration', () => { const project = fixture(); project.scenes[0].shots[0].visual = { diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index 4594275cc..502b50605 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -1700,7 +1700,6 @@ "Thermal": "Termico", "Anime": "Anime", "Noir": "Noir", - "Snow": "Neve", "Current cockpit vision style: {style}. Activate for next style.": "Stile di visione attuale del cockpit: {style}. Attiva per lo stile successivo.", "Current style: {style} — click for next": "Stile attuale: {style}. Clic per il successivo", "Collapse Contact panel": "Comprimi il pannello Contatto", @@ -2781,7 +2780,6 @@ "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Simula il contrasto termico in stile FLIR. Alza Ironbow per il colore.", "Apply bright cel-shaded color and illustrated outlines.": "Applica colori vivaci cel-shaded e contorni illustrati.", "Apply high-contrast monochrome film-noir grading.": "Applica un color grading noir monocromatico ad alto contrasto.", - "Add a cold, snowy whiteout treatment to the scene.": "Aggiungi alla scena un effetto freddo di nevicata e whiteout.", "MAP SOURCE": "FONTE MAPPA", "Map source": "Fonte mappa", "Style": "Stile", diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index 087aeb106..f139e517a 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -1700,7 +1700,6 @@ "Thermal": "Térmico", "Anime": "Anime", "Noir": "Noir", - "Snow": "Neve", "Current cockpit vision style: {style}. Activate for next style.": "Estilo atual de visão da cabine: {style}. Ative para o próximo estilo.", "Current style: {style} — click for next": "Estilo atual: {style} — clique para o próximo", "Collapse Contact panel": "Recolher painel de contato", @@ -2783,7 +2782,6 @@ "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Simular contraste térmico estilo FLIR. Aumente o Ironbow para ter cor.", "Apply bright cel-shaded color and illustrated outlines.": "Aplicar cores vivas em cel shading e contornos ilustrados.", "Apply high-contrast monochrome film-noir grading.": "Aplicar gradação monocromática de filme noir com alto contraste.", - "Add a cold, snowy whiteout treatment to the scene.": "Adicionar à cena um efeito frio de nevasca branca.", "MAP SOURCE": "FONTE DO MAPA", "Map source": "Fonte do mapa", "Style": "Estilo", diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 338a4fcc7..2e6fa95c0 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -1723,7 +1723,6 @@ "Thermal": "Тепловізор", "Anime": "Аніме", "Noir": "Нуар", - "Snow": "Сніг", "Current cockpit vision style: {style}. Activate for next style.": "Поточний візуальний стиль у кабіні: {style}. Активуйте, щоб перейти до наступного.", "Current style: {style} — click for next": "Поточний стиль: {style} — клацніть для наступного", "Collapse Contact panel": "Згорнути панель контактів", @@ -2850,7 +2849,6 @@ "Simulate FLIR-style thermal contrast. Turn up Ironbow for color.": "Імітує тепловий контраст у стилі FLIR. Для кольору збільште Ironbow.", "Apply bright cel-shaded color and illustrated outlines.": "Застосовує яскраву мультяшну заливку та ілюстровані контури.", "Apply high-contrast monochrome film-noir grading.": "Застосовує висококонтрастну чорно-білу обробку в стилі нуар.", - "Add a cold, snowy whiteout treatment to the scene.": "Додає до сцени холодний ефект снігової імли.", "MAP SOURCE": "ДЖЕРЕЛО КАРТИ", "Map source": "Джерело карти", "Style": "Стиль", diff --git a/src/scenes/project.js b/src/scenes/project.js index eb3084962..f2297afaf 100644 --- a/src/scenes/project.js +++ b/src/scenes/project.js @@ -7,6 +7,7 @@ import { BLOOM_SCALE_VERSION, decodeBloomIntensity, } from '../bloom.js'; +import { RETIRED_STYLES } from '../visualStylePolicy.js'; /** @constant {number} Current schema version for project migration */ export const PROJECT_VERSION = SCENE_DOCUMENT_VERSION; @@ -262,7 +263,9 @@ export function normalizeShot( ...(rawShot?.dataPackIds ? { dataPackIds: [...rawShot.dataPackIds] } : {}), ...(rawShot?.move ? { move: deepClone(rawShot.move) } : {}), visual: { - style: visual.style || 'normal', + style: RETIRED_STYLES.includes(visual.style) + ? 'normal' + : visual.style || 'normal', bloom: normalizeBloomState(bloom, { projectVersion, fallbackIntensity: 50,