Example #1
0
void Cell::rotate(int a)
{
  angle += a;
  changed = true;
  while(angle >= 45)
  {
    angle -= 90;
    int newdirs = Free;
    if(ddirs & U)
      newdirs |= R;
    if(ddirs & R)
      newdirs |= D;
    if(ddirs & D)
      newdirs |= L;
    if(ddirs & L)
      newdirs |= U;
    setDirs(Dirs(newdirs));
  }
  while(angle < -45)
  {
    angle += 90;
    int newdirs = Free;
    if(ddirs & U)
      newdirs |= L;
    if(ddirs & R)
      newdirs |= U;
    if(ddirs & D)
      newdirs |= R;
    if(ddirs & L)
      newdirs |= D;
    setDirs(Dirs(newdirs));
  }
  update();
}
Example #2
0
void Cell::rotate(int a)
{
    if((ddirs == Free) || (ddirs == None))
        return;

    rotationProgress += a;
    changed = true;
    while(rotationProgress >= 45)
    {
	rotationProgress -= 90;
	int newdirs = Free;
	if(ddirs & U) newdirs |= R;
	if(ddirs & R) newdirs |= D;
	if(ddirs & D) newdirs |= L;
	if(ddirs & L) newdirs |= U;
	setDirs(Dirs(newdirs));
    }
    while(rotationProgress < -45)
    {
	rotationProgress += 90;
	int newdirs = Free;
	if(ddirs & U) newdirs |= L;
	if(ddirs & R) newdirs |= U;
	if(ddirs & D) newdirs |= R;
	if(ddirs & L) newdirs |= D;
	setDirs(Dirs(newdirs));
    }
    update();
}