/// <summary>
        /// Fires when a pea completed jump (or is trapped)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pea_OnJumpCompleted(JumpEventArgs e)
        {
            // Check if actual jump
            if (e.Spot == null)
            {
                return;
            }

            // Pea Died
            if (!e.Pea.IsAlive)
            {
                Check(Achievement.Identifier.FirstDeath);
                Modify(Achievement.Identifier.NoDeaths, __Increment);
                Progress(Achievement.Identifier.AllDeath, __CheckAllPeaIn, (h) => __AddAndReturn <DataPea>(h, e.Pea));
            }
            // Pea Trapped
            else if (e.Pea.IsTrapped)
            {
                Check(Achievement.Identifier.FirstTrap);
                Modify(Achievement.Identifier.NoTraps, __Increment);
            }

            // Flag completed
            if ((e.Spot.Completion + e.Spot.FailFloat) >= 1.0f)
            {
                Check(Achievement.Identifier.FirstCompletion);
                Check(Achievement.Identifier.FirstHappyFlag, (a) => __IsLessThanOrEqual(e.Spot.FailFloat, 0.05));
                Check(Achievement.Identifier.FirstDeathFlag, (a) => __IsMoreThanOrEqual(e.Spot.FailFloat, 0.95));
            }

            Modify(Achievement.Identifier.AllJumping, (h) => __RemoveAndReturn <DataPea>(h, e.Pea));

            _jumpDisabled[e.Pea].Clear();
        }
        /// <summary>
        /// Fires when a pea jumps
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pea_OnJumpStarted(JumpEventArgs e)
        {
            // Check if actual jump
            if (e.Spot == null)
            {
                return;
            }

            Check(Achievement.Identifier.FirstJump);
            Progress(Achievement.Identifier.AllJumping, __CheckAllPeaInAndUniqueSpot, (h) => __AddAndReturn <DataPea>(h, e.Pea));
        }
        /// <summary>
        /// Method that is called when pea jumps
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _source_OnJumpStarted(JumpEventArgs e)
        {
            // Because the controler is created BEFORE the sprites this works
            if (e.Pea.IsAlive && !e.Pea.IsNotHappy && e.Pea.JumpSpot != null)
            {
                _activeState = new SpriteJumpInfo(this.SceneLayer, _pointsController.ActiveTimes(e.Pea));
                _activeState.Initialize();

                if (this.ContentManager != null)
                    _activeState.LoadContent(this.ContentManager);
            }
        }
        /// <summary>
        /// Runs when jump is completed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pea_OnJumpCompleted(JumpEventArgs e)
        {
            // Update score
            foreach (var state in _active.FindAll(a => a.Pea == e.Pea))
            {
                if (!state.Pea.IsNotHappy && !state.Pea.IsTrapped && state.Pea.IsAlive) // last check shouldn't be needed
                {
                    this.PlayingScore += state.Points;
                }
            }
            // multiplier
            //(Int32)Math.Ceiling(state.Pea.JumpSpot.Completion * DataJumpSpot.MaxCompletion);

            _active.RemoveAll(a => a.Pea == e.Pea);
        }
        /// <summary>
        /// Runs when jump is completed 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pea_OnJumpCompleted(JumpEventArgs e)
        {
            // Update score
            foreach (var state in _active.Where(a => a.Pea == e.Pea))
                if (!state.Pea.IsNotHappy && !state.Pea.IsTrapped && state.Pea.IsAlive) // last check shouldn't be needed
                {
                    this.PlayingScore += state.Points;
                    PlayerProgress.Current.Points(state.Points);
                }
                        // multiplier
                        //(Int32)Math.Ceiling(state.Pea.JumpSpot.Completion * DataJumpSpot.MaxCompletion);

            _active.RemoveAll(a => a.Pea == e.Pea);
        }
 /// <summary>
 /// Runs when jump is failed
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void pea_OnJumpFailed(JumpEventArgs e)
 {
     _active.RemoveAll(a => a.Pea == e.Pea);
 }
 /// <summary>
 /// Runs when jump is started
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void pea_OnJumpStarted(JumpEventArgs e)
 {
     _active.Add(new PointsControllerState(e.Pea));
 }
        /// <summary>
        /// Method that is called when a pea finishes jumping
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _source_OnJumpCompleted(JumpEventArgs e)
        {
            if (_activeState != null)
                _activeState.Exit();

            if (!e.Pea.IsAlive)
                return;

            if (e.Pea.IsTrapped)
                _alert = SpriteAlert.GenerateTrap(this.SceneLayer);
            else if (!e.Pea.IsNotHappy)
                _alert = SpriteAlert.GenerateNinja(this.SceneLayer);

            if (_alert != null)
            {
                _alert.Initialize();

                if (this.ContentManager != null)
                    _alert.LoadContent(this.ContentManager);
            }
        }
 /// <summary>
 /// Runs when jump is failed
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void pea_OnJumpFailed(JumpEventArgs e)
 {
     _active.RemoveAll(a => a.Pea == e.Pea);
 }
 /// <summary>
 /// Runs when jump is started
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void pea_OnJumpStarted(JumpEventArgs e)
 {
     _active.Add(new PointsControllerState(e.Pea));
 }