void LedMatrixBall::Update() { for (Ball *iBall = _balls, *eBall = _balls + kBalls ; iBall < eBall ; ++iBall) { iBall->Update() ; } for (unsigned short idx = 0 ; idx < LedMatrix::kSize ; ++idx) { unsigned char x, y ; LedMatrix::IdxToCoord(idx, x, y) ; unsigned char r = 0 ; unsigned char g = 0 ; unsigned char b = 0 ; for (Ball *iBall = _balls, *eBall = _balls + kBalls ; iBall < eBall ; ++iBall) { unsigned char bx = iBall->X() >> LedMatrix::kShiftX ; unsigned char by = iBall->Y() >> LedMatrix::kShiftY ; char dx = bx - x ; char dy = by - y ; if (dx < 0) dx = -dx ; if (dy < 0) dy = -dy ; if ((dx <= 1) && (dy <= 1)) { unsigned char d = dx + dy ; r = iBall->R(d) ; g = iBall->G(d) ; b = iBall->B(d) ; break ; } } SendDataByte(g) ; SendDataByte(r) ; SendDataByte(b) ; } }