SetAnimCompleteDelegate() public method

Sets the delegate to be called upon animation completion.
public SetAnimCompleteDelegate ( AnimCompleteDelegate del ) : void
del AnimCompleteDelegate The delegate to be called when an animation finishes playing.
return void
Exemplo n.º 1
0
	// Delegate that is called when an animation finishes:
	void AnimFinished(SpriteBase sp)
	{
		// See if we can't advance to the next animation:
		if ((curAnim + stepDir) >= spriteAnims.Length || (curAnim + stepDir) < 0)
		{
			// See if we need to loop (if we're reversing, we don't loop until we get back to the beginning):
			if (stepDir > 0 && pingPong)
			{
				stepDir = -1;	// Reverse direction of playback

				// Bounce back from the end:
				((AutoSpriteBase)sp).PlayAnimInReverse(spriteAnims[curAnim].anim, spriteAnims[curAnim].anim.GetFrameCount() - 2);
				return;

				// See if we need to tell our first animation
				// to loop us back again in anticipation of
				// another loop iteration:
				// 				if(loopCycles == -1 || numLoops < loopCycles)
				// 				{
				// 					spriteAnims[0].anim.loopReverse = true;
				// 				}

				// Proceed
			}
			else
			{
				// See if we can't loop:
				if (numLoops + 1 > loopCycles && loopCycles != -1)
				{
					isRunning = false;

					// Unset our delegate:
					sp.SetAnimCompleteDelegate(null);

					// Notify that we're ending:
					if (endDelegate != null)
						endDelegate(this);
					return;
				}
				else
				{
					// Loop the animation:
					++numLoops;

					if (pingPong)
					{
						// Bounce back from the first frame:
						spriteAnims[curAnim].sprite.PlayAnim(spriteAnims[curAnim].anim, 1);
						stepDir *= -1;
						return;
					}
					else
					{
						// Hide the current sprite
						HideSprite(sp, true);

						// Unset our delegate:
						sp.SetAnimCompleteDelegate(null);

						// Start back at the first animation:
						curAnim = 0;
					}
				}
			}
		}
		else
		{
			// Unset our delegate:
			sp.SetAnimCompleteDelegate(null);
			HideSprite(sp, true);
			curAnim += stepDir;
		}

		// Proceed to play the next animation:
		HideSprite(spriteAnims[curAnim].sprite, false);
		spriteAnims[curAnim].sprite.SetAnimCompleteDelegate(AnimFinished);
		if (stepDir > 0)
			spriteAnims[curAnim].Play();
		else
			spriteAnims[curAnim].PlayInReverse();
	}
Exemplo n.º 2
0
    // Delegate that is called when an animation finishes:
    void AnimFinished(SpriteBase sp)
    {
        // See if we can't advance to the next animation:
        if ((curAnim + stepDir) >= spriteAnims.Length || (curAnim + stepDir) < 0)
        {
            // See if we need to loop (if we're reversing, we don't loop until we get back to the beginning):
            if (stepDir > 0 && pingPong)
            {
                stepDir = -1;                   // Reverse direction of playback

                // Bounce back from the end:
                ((AutoSpriteBase)sp).PlayAnimInReverse(spriteAnims[curAnim].anim, spriteAnims[curAnim].anim.GetFrameCount() - 2);
                return;

                // See if we need to tell our first animation
                // to loop us back again in anticipation of
                // another loop iteration:
                //              if(loopCycles == -1 || numLoops < loopCycles)
                //              {
                //                  spriteAnims[0].anim.loopReverse = true;
                //              }

                // Proceed
            }
            else
            {
                // See if we can't loop:
                if (numLoops + 1 > loopCycles && loopCycles != -1)
                {
                    isRunning = false;

                    // Unset our delegate:
                    sp.SetAnimCompleteDelegate(null);

                    // Notify that we're ending:
                    if (endDelegate != null)
                    {
                        endDelegate(this);
                    }
                    return;
                }
                else
                {
                    // Loop the animation:
                    ++numLoops;

                    if (pingPong)
                    {
                        // Bounce back from the first frame:
                        spriteAnims[curAnim].sprite.PlayAnim(spriteAnims[curAnim].anim, 1);
                        stepDir *= -1;
                        return;
                    }
                    else
                    {
                        // Hide the current sprite
                        HideSprite(sp, true);

                        // Unset our delegate:
                        sp.SetAnimCompleteDelegate(null);

                        // Start back at the first animation:
                        curAnim = 0;
                    }
                }
            }
        }
        else
        {
            // Unset our delegate:
            sp.SetAnimCompleteDelegate(null);
            HideSprite(sp, true);
            curAnim += stepDir;
        }

        // Proceed to play the next animation:
        HideSprite(spriteAnims[curAnim].sprite, false);
        spriteAnims[curAnim].sprite.SetAnimCompleteDelegate(AnimFinished);
        if (stepDir > 0)
        {
            spriteAnims[curAnim].Play();
        }
        else
        {
            spriteAnims[curAnim].PlayInReverse();
        }
    }