/// A polyomino with fixed orientation (no rotation at play time, genre /// convention). Offsets are normalized cell positions relative to the /// top-left anchor. class Piece { const Piece({ required this.id, required this.offsets, required this.colorId, this.weight = 1.0, this.tier = 1, }); final String id; final List<(int, int)> offsets; final int colorId; /// Base draw weight; stage generator profiles scale this. final double weight; /// Difficulty tier 1 (easy to fit) .. 3 (demanding). final int tier; int get size => offsets.length; @override String toString() => 'Piece($id)'; }