fix(chargen): Campaign CC gate round 1 closeout — Group 1: real color wheel wiring

Lands Batch G's two STOPPED items, making the real palette-color swatch
wheel visually live instead of inert:

- UiButton and UiDatElement gain a per-instance Tint property threaded
  into every existing DrawSprite call (defaults to Vector4.One, so every
  pre-existing button/element is byte-identical unless a caller sets a
  non-identity tint).
- CharacterCreationAppearancePage now sets Tint directly on each color
  swatch button and the GradCircle element, replacing the Batch G
  flat-fill ChargenSwatchColorTile overlay outright — an opaque
  rectangle drawn on top can never reproduce retail's actual
  SurfaceWindow::BlitAndColor(..., Blit_Multiply, color) multiply blend,
  only a genuine per-instance sprite tint can, so the overlay approach is
  deleted rather than layered under the new mechanism.
- CharacterCreationUiController and RetailUiRuntime grow pass-through
  properties (AppearancePalSetSource/AppearanceClothingTableSource/
  AppearancePaletteColorSource) mirroring the existing PreviewControl
  seam, so LivePresentationComposition can wire a DAT-backed
  ChargenAppearanceCatalog into the Appearance page (wiring itself lands
  with the Group 3 commit, since it shares a file with an unrelated F16
  fix).

Register: AP-216/AP-217 RETIRED (161 -> now further reduced in later
commits) — both rows' remaining gaps are closed, not merely narrowed.
CharacterCreationAppearancePageSwatchColorTests updated for the new
Tint-based assertions (two pre-existing assertions were carried over
incorrectly from the old overlay-visibility model and are corrected).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-16 15:33:19 +02:00
parent 1f6365d3e5
commit e1d7d09599
7 changed files with 193 additions and 192 deletions

View file

@ -680,6 +680,41 @@ public sealed class RetailUiRuntime : IDisposable
}
}
/// <summary>Campaign CC gate round 1 closeout (Group 1, R2-5): the same
/// late-bound pattern as <see cref="ChargenPreviewControl"/> above, for
/// the real color-wheel/swatch-color mechanism's three DAT-backed seams
/// — see <see cref="AcDream.App.UI.Layout.CharacterCreationAppearancePage.PalSetSource"/>'s
/// own doc comment.</summary>
internal AcDream.Core.CharGen.IChargenPalSetSource? ChargenPalSetSource
{
get => CharacterCreationController?.AppearancePalSetSource;
set
{
if (CharacterCreationController is { } controller)
controller.AppearancePalSetSource = value;
}
}
internal AcDream.Core.CharGen.IChargenClothingTableSource? ChargenClothingTableSource
{
get => CharacterCreationController?.AppearanceClothingTableSource;
set
{
if (CharacterCreationController is { } controller)
controller.AppearanceClothingTableSource = value;
}
}
internal AcDream.Core.CharGen.IChargenPaletteColorSource? ChargenPaletteColorSource
{
get => CharacterCreationController?.AppearancePaletteColorSource;
set
{
if (CharacterCreationController is { } controller)
controller.AppearancePaletteColorSource = value;
}
}
/// <summary>CC6b-MOUNT: whether the Appearance page (specifically) is
/// the one currently showing — false, safely, before the screen mounts.
/// </summary>