Each channel panel (Albedo, Metallic+Smoothness, Occlusion, Emission)
gets a CanvasGroup whose alpha follows its toggle: 1.0 when enabled,
0.5 when disabled. Ensured at runtime in WirePanel (no prefab re-bake),
so both the prefab and code-gen paths behave identically. Panel_BrushSize
has no toggle and is left untouched.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drag a panel from anywhere on its surface (header, padding, labels,
background) instead of only the header. Dragging is cancelled when the
press starts on an interactable (Selectable toggle/slider or the color
picker's UiPointerSurface), so widgets stay fully operable. Clamping is
now anchor/pivot-agnostic, computed from the panel's real corners, so
panels anchored bottom-center stay reachable in every screen corner.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Split the single HUD panel into four independent per-channel sub-panels
plus a global brush-size panel, each a standalone RectTransform with its
own header (drag-handle ready). PaintHud now binds to a baked layout
prefab via recursive name lookup instead of building everything in code,
with a code-gen fallback. HsvColorPicker gains Rebind() to re-apply the
procedural gradient sprites and drag relays that a prefab cannot serialize.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a code-driven HUD that appears in paint mode and binds live to the
active MeshPainter: four channel toggles, HSV pickers for albedo and
emission, sliders for metallic/smoothness/occlusion, emission intensity
and brush size. The HUD self-assembles its own overlay canvas and event
system at runtime.
Add a ModeChanged event to GameModeManager so the HUD can follow the
active mode, and guard MeshPainter against painting through the UI.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>