feat: extend SeasonTheme with visual identity fields (ARGB ints)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,18 +1,62 @@
|
||||
import 'stage.dart';
|
||||
|
||||
/// Visual identity of a season. Colors are int ARGB so this file stays
|
||||
/// pure Dart (architecture guard forbids Flutter imports here).
|
||||
class SeasonTheme {
|
||||
const SeasonTheme({required this.tileSet, required this.background});
|
||||
const SeasonTheme({
|
||||
this.tileSet = 'spring',
|
||||
this.background = '',
|
||||
this.backgroundGradient = defaultGradient,
|
||||
this.accentColor = 0xFFFF7EB3,
|
||||
this.particleType = 'petals',
|
||||
this.tilePalette,
|
||||
this.boardTint,
|
||||
});
|
||||
|
||||
factory SeasonTheme.fromJson(Map<String, dynamic> json) => SeasonTheme(
|
||||
tileSet: json['tileSet'] as String,
|
||||
background: json['background'] as String,
|
||||
tileSet: (json['tileSet'] as String?) ?? 'spring',
|
||||
background: (json['background'] as String?) ?? '',
|
||||
backgroundGradient: json['backgroundGradient'] != null
|
||||
? [for (final c in json['backgroundGradient'] as List) c as int]
|
||||
: defaultGradient,
|
||||
accentColor: (json['accentColor'] as int?) ?? 0xFFFF7EB3,
|
||||
particleType: (json['particleType'] as String?) ?? 'petals',
|
||||
tilePalette: json['tilePalette'] != null
|
||||
? [for (final c in json['tilePalette'] as List) c as int]
|
||||
: null,
|
||||
boardTint: json['boardTint'] as int?,
|
||||
);
|
||||
|
||||
/// Season 1 "First Bloom": deep navy dusk.
|
||||
static const defaultGradient = [0xFF0E1430, 0xFF16204A, 0xFF2A2E5E];
|
||||
|
||||
static const fallback = SeasonTheme();
|
||||
|
||||
final String tileSet;
|
||||
final String background;
|
||||
|
||||
Map<String, dynamic> toJson() =>
|
||||
{'tileSet': tileSet, 'background': background};
|
||||
/// Top-to-bottom screen gradient, int ARGB.
|
||||
final List<int> backgroundGradient;
|
||||
final int accentColor;
|
||||
|
||||
/// petals | snow | leaves | none
|
||||
final String particleType;
|
||||
|
||||
/// Optional 8-color tile override; null = built-in candy palette.
|
||||
final List<int>? tilePalette;
|
||||
|
||||
/// Optional board background override.
|
||||
final int? boardTint;
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'tileSet': tileSet,
|
||||
'background': background,
|
||||
'backgroundGradient': backgroundGradient,
|
||||
'accentColor': accentColor,
|
||||
'particleType': particleType,
|
||||
if (tilePalette != null) 'tilePalette': tilePalette,
|
||||
if (boardTint != null) 'boardTint': boardTint,
|
||||
};
|
||||
}
|
||||
|
||||
/// A season's full content: metadata, theme, and its stages. The unit of
|
||||
|
||||
Reference in New Issue
Block a user