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(); }
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(); }