Add ocean color override to graphics settings (#4269)

## What

Adds a **Terrain** section to the graphics settings modal with a color
picker and a hex-code text field (paste a `#rrggbb` code) for the
**ocean** (deep water) color.

## Details

- The picked color sets the *shallow-water base*; the existing per-depth
brightness gradient is preserved (deeper water still darkens).
- Only deep water is affected — shoreline water and land are untouched.
- Follows the same override pattern as every other graphics setting: the
default lives in `render-settings.json` (`terrain.oceanColor`), the
override is a field in `GraphicsOverrides`, and `applyGraphicsOverrides`
copies it into the live `RenderSettings`.
- Rebased on #4271 (settings resolved before renderer construction): the
terrain texture **bakes the resolved ocean color at construction**, so a
saved override shows on load with no special-casing. Terrain is baked
into a GPU texture rather than read per-frame, so a *live* change still
triggers an explicit `view.rebuildTerrain()`.
- Resetting graphics overrides clears it back to the default ocean
color.

## Testing
Verified live in a headless singleplayer game:
- A **saved** ocean override renders green deep-water on load, baked at
construction with no settings-change event fired.
- A mid-game color change recolors the deep ocean instantly, gradient
preserved, shoreline/land untouched.

`tsc` and ESLint clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Evan
2026-06-13 21:13:46 -07:00
committed by GitHub
parent 54a7042303
commit 8b9bda1c8b
11 changed files with 172 additions and 15 deletions
+3
View File
@@ -540,6 +540,8 @@
"name_cull_desc": "Hide names smaller than this size",
"name_cull_label": "Minimum name size",
"name_scale_label": "Name Scale",
"ocean_color_desc": "Base color of ocean.",
"ocean_color_label": "Ocean color",
"rail_distance_desc": "How far zoomed out train tracks remain visible",
"rail_distance_label": "Train track draw distance",
"rail_thickness_desc": "How wide train tracks are drawn",
@@ -551,6 +553,7 @@
"section_map": "Map",
"section_name_labels": "Name Labels",
"section_structure_icons": "Structure Icons",
"section_terrain": "Terrain",
"territory_alpha_desc": "How opaque the territory fill is (lower lets terrain show through)",
"territory_alpha_label": "Territory opacity",
"territory_sat_desc": "How vivid the territory fill colors are (lower mutes them)",