예제 #1
0
파일: ball.cpp 프로젝트: MuellerA/Led-8x8
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) ;
  }
}