Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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;
    }
Exemplo n.º 5
0
float
SidekickAnim::getSpringiness ()
{
    return 1.6 * optValF (AnimationOptions::SidekickSpringiness);
}
Exemplo n.º 6
0
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);
    }
}