tick method
Implementation
@override
void tick() {
final buffer = StringBuffer();
// Randomize drop starting points
for (var c = 0; c < cols; c++) {
if (_drops[c] == -1 &&
(c + DateTime.now().millisecondsSinceEpoch) % 5 == 0) {
_drops[c] = 0;
}
}
// Build line by line
for (var r = 0; r < rows; r++) {
final lineBuffer = StringBuffer();
for (var c = 0; c < cols; c++) {
if (_drops[c] == r) {
final char = _chars[(r + c) % _chars.length];
lineBuffer.write(char);
} else {
lineBuffer.write(' ');
}
}
buffer.write(lineBuffer.toString());
if (r < rows - 1) buffer.write('\n');
}
// Advance drops down
for (var c = 0; c < cols; c++) {
if (_drops[c] >= 0) {
_drops[c]++;
if (_drops[c] >= rows) _drops[c] = -1;
}
}
write(buffer.toString());
}