BeamUpAnim::BeamUpAnim (CompWindow *w, WindowEvent curWindowEvent, float duration, const AnimEffect info, const CompRect &icon) : Animation::Animation (w, curWindowEvent, duration, info, icon), ParticleAnim::ParticleAnim (w, curWindowEvent, duration, info, icon) { mLife = optValF (AnimationaddonOptions::BeamLife); mColor = optValC (AnimationaddonOptions::BeamColor); mSize = optValF (AnimationaddonOptions::BeamSize); mSpacing = optValI (AnimationaddonOptions::BeamSpacing); mSlowdown = optValF (AnimationaddonOptions::BeamSlowdown); }
SidekickAnim::SidekickAnim (CompWindow *w, WindowEvent curWindowEvent, float duration, const AnimEffect info, const CompRect &icon) : Animation::Animation (w, curWindowEvent, duration, info, icon), TransformAnim::TransformAnim (w, curWindowEvent, duration, info, icon), ZoomAnim::ZoomAnim (w, curWindowEvent, duration, info, icon) { // determine number of rotations randomly in [0.9, 1.1] range mNumRotations = optValF (AnimationOptions::SidekickNumRotations) * (1.0f + 0.2f * rand () / RAND_MAX - 0.1f); CompRect outRect (mAWindow->savedRectsValid () ? mAWindow->savedOutRect () : mWindow->outputRect ()); float winCenterX = outRect.x () + outRect.width () / 2.0; float iconCenterX = mIcon.x () + mIcon.width () / 2.0; // if window is to the right of icon, rotate clockwise instead // to make rotation look more pleasant if (winCenterX > iconCenterX) mNumRotations *= -1; }
BurnAnim::BurnAnim (CompWindow *w, WindowEvent curWindowEvent, float duration, const AnimEffect info, const CompRect &icon) : Animation::Animation (w, curWindowEvent, duration, info, icon), ParticleAnim::ParticleAnim (w, curWindowEvent, duration, info, icon) { mDirection = getActualAnimDirection ((AnimDirection) optValI (AnimationaddonOptions::FireDirection), false); if (optValB (AnimationaddonOptions::FireConstantSpeed)) { int winHeight = w->height () + w->output ().top + w->output ().bottom; mTotalTime *= winHeight / 500.0; mRemainingTime *= winHeight / 500.0; } mMysticalFire = optValB (AnimationaddonOptions::FireMystical); mLife = optValF (AnimationaddonOptions::FireLife); mColor = optValC (AnimationaddonOptions::FireColor); mSize = optValF (AnimationaddonOptions::FireSize); mHasSmoke = optValB (AnimationaddonOptions::FireSmoke); mFirePSId = mHasSmoke ? 1 : 0; mSmokePSId = 0; int numFireParticles = optValI (AnimationaddonOptions::FireParticles); float slowDown = optValF (AnimationaddonOptions::FireSlowdown); // Light ParticleSystem is for smoke, which is optional. // Dark ParticleSystem is for fire. initLightDarkParticles (mHasSmoke ? numFireParticles / 10 : 0, numFireParticles, slowDown / 2.0f, slowDown); }
void Glide3Anim::init () { //if (!polygonsAnimInit (w)) //return false; float finalDistFac = optValF (AnimationaddonOptions::Glide3AwayPosition); float finalRotAng = optValF (AnimationaddonOptions::Glide3AwayAngle); float thickness = optValF (AnimationaddonOptions::Glide3Thickness); //PolygonSet *pset = aw->eng.polygonSet; mIncludeShadows = (thickness < 1e-5); if (!tessellateIntoRectangles (1, 1, thickness)) return; foreach (PolygonObject *p, mPolygons) { p->rotAxis.set (1, 0, 0); p->finalRelPos.set (0, 0, finalDistFac * 0.8 * DEFAULT_Z_CAMERA * screen->width ()); p->finalRotAng = finalRotAng; }
float SidekickAnim::getSpringiness () { return 1.6 * optValF (AnimationOptions::SidekickSpringiness); }
float ZoomAnim::getSpringiness () { return 2 * optValF (AnimationOptions::ZoomSpringiness); }
void HorizontalFoldsAnim::step () { GridZoomAnim::step (); CompRect winRect (mAWindow->savedRectsValid () ? mAWindow->saveWinRect () : mWindow->geometry ()); CompRect inRect (mAWindow->savedRectsValid () ? mAWindow->savedInRect () : mWindow->inputRect ()); CompRect outRect (mAWindow->savedRectsValid () ? mAWindow->savedOutRect () : mWindow->outputRect ()); CompWindowExtents outExtents (mAWindow->savedRectsValid () ? mAWindow->savedOutExtents () : mWindow->output ()); int wx = winRect.x (); int wy = winRect.y (); int oy = outRect.y (); int owidth = outRect.width (); int oheight = outRect.height (); float winHeight = 0; if (mCurWindowEvent == WindowEventShade || mCurWindowEvent == WindowEventUnshade) { winHeight = winRect.height (); } else { winHeight = inRect.height (); } int nHalfFolds = 2.0 * optValI (AnimationOptions::HorizontalFoldsNumFolds); float foldMaxAmp = 0.3 * pow ((winHeight / nHalfFolds) / ::screen->height (), 0.3) * optValF (AnimationOptions::HorizontalFoldsAmpMult); float forwardProgress = getActualProgress (); float sinForProg = sin (forwardProgress * M_PI / 2); GridModel::GridObject *object = mModel->objects (); unsigned int n = mModel->numObjects (); for (unsigned int i = 0; i < n; ++i, ++object) { Point3d &objPos = object->position (); if (i % 2 == 0) // object is at the left side { float objGridY = object->gridPosition ().y (); int rowNo = (int)i / mGridWidth; float origy = (wy + (oheight * objGridY - outExtents.top) * mModel->scale ().y ()); if (mCurWindowEvent == WindowEventShade || mCurWindowEvent == WindowEventUnshade) { // Execute shade mode if (objGridY == 0) { objPos.setY (oy); objPos.setZ (0); } else if (objGridY == 1) { objPos.setY ( (1 - forwardProgress) * origy + forwardProgress * (oy + mDecorTopHeight + mDecorBottomHeight)); objPos.setZ (0); } else { float relDistToFoldCenter = (rowNo % 2 == 1 ? 0.5 : 0); objPos.setY ( (1 - forwardProgress) * origy + forwardProgress * (oy + mDecorTopHeight)); objPos.setZ ( getObjectZ (mModel, forwardProgress, sinForProg, relDistToFoldCenter, foldMaxAmp)); } } else { // Execute normal mode float relDistToFoldCenter = (rowNo % 2 == 0 ? 0.5 : 0); objPos.setY ( (1 - forwardProgress) * origy + forwardProgress * (inRect.y () + inRect.height () / 2.0)); objPos.setZ ( getObjectZ (mModel, forwardProgress, sinForProg, relDistToFoldCenter, foldMaxAmp)); } } else // object is at the right side { // Set y/z position to the y/z position of the object at the left // on the same row (previous object) Point3d &leftObjPos = (object - 1)->position (); objPos.setY (leftObjPos.y ()); objPos.setZ (leftObjPos.z ()); } float origx = (wx + (owidth * object->gridPosition ().x () - outExtents.left) * mModel->scale ().x ()); objPos.setX (origx); } }