onLinesCleared method
Returns a new ScoreState after clearing linesCleared lines.
level is used for point multipliers.
Implementation
ScoreState onLinesCleared(ScoreState state, int linesCleared, int level) {
if (linesCleared == 0) {
return state.copyWith(combo: 0, backToBack: false);
}
final bool isTetris = linesCleared == 4;
final bool b2b = isTetris && state.backToBack;
int base = _basePoints(linesCleared) * level;
if (b2b) base = (base * 1.5).toInt();
int comboBonus = 0;
if (state.combo > 0) comboBonus = 50 * state.combo * level;
return state.copyWith(
score: state.score + base + comboBonus,
combo: state.combo + 1,
backToBack: isTetris,
);
}