DrawableSurface *Sprite::getRotatedSurface(int index) { RotatedImage::RotationMap::const_iterator it = rotated[index]->rotationMap.find(actColor); DrawableSurface *ds; if (it == rotated[index]->rotationMap.end()) { // compute hue shift float baseHue, actHue, lum, sat; float hueShift; Color(51, 255, 153).getHSV(&baseHue, &sat, &lum); actColor.getHSV(&actHue, &sat, &lum); hueShift = actHue - baseHue; // rotate image ds = rotated[index]->orig->clone(); ds->shiftHSV(hueShift, 0.0f, 0.0f); // write back rotated[index]->rotationMap[actColor] = ds; } else { ds = it->second; } return ds; }