void TestScene::CreateOnionSkins() { // current part Part *editPart = ¤tAnimation->parts[selectedPartIndex]; if (editPart) { Entity *editEntity = editPart->entity; Sprite *editSprite = editPart->sprite; int currentFrame = int(animationFrame); const int numFramesToPreview = 5; for (int i = 0; i < numFramesToPreview; i++) { int prevFrame = SafeFrameRange(currentFrame - i); int nextFrame = SafeFrameRange(currentFrame + i); const float dyeP = 0.25f; if (prevFrame != currentFrame) { Entity *entity = editPart->CreateEntity(textureSheet); eAnimation->Add(entity); editPart->ApplyFrameToEntity(prevFrame, entity); onionSkins.push_back(entity); float oldA = entity->color.a; entity->color = entity->color * (1.0f-dyeP) + Color::blue * dyeP; entity->color.a = oldA * (0.25f - 0.05f*i); } if (nextFrame != currentFrame) { // spawn part at next frame Entity *entity = editPart->CreateEntity(textureSheet); eAnimation->Add(entity); editPart->ApplyFrameToEntity(nextFrame, entity); onionSkins.push_back(entity); float oldA = entity->color.a; entity->color = entity->color * (1.0f-dyeP) + Color::red * dyeP; entity->color.a = oldA * (0.25f - 0.05f*i); } } } }