/// <summary>
        /// Finds a node to wander
        /// </summary>
        /// <param name="pea"></param>
        /// <returns></returns>
        protected void FindWanderNode(DataPea pea, Node<MoveNode> prev = null)
        {
            var snapshot = GetSnapshot(pea);
            var block = pea.GridPosition.Y >= 0 ? _grid.Grid[pea.GridPosition.X][pea.GridPosition.Y] : new DataBlock(new Point(pea.GridPosition.X, pea.GridPosition.Y - 1), BlockType.None, null);
            var node = (prev == null) ? (snapshot.WanderingNode.HasValue && 
                snapshot.WanderingNode.Value.Action != MoveNode.Type.None && 
                snapshot.WanderingNode.Value.Position == pea.GridPosition 
                    ? new Node<MoveNode>() { Value = snapshot.WanderingNode.Value } 
                    : CreateNode(block, MoveNode.Type.Walk, MoveNode.Direction.None)
                ) : prev;
            var possibleNodes = CreateMoveNodesFrom(node);

            if (possibleNodes.Count > 0)
            {
                // Find nodes that go higher (non walk nodes and non lineair jumps)
                var nonwalk = possibleNodes.Where(a => a.Value.Action != MoveNode.Type.Walk && 
                    !((a.Value.Action == MoveNode.Type.Jump) && (a.Value.Dir == MoveNode.Direction.None)));

                // Limit to these if needed
                if (nonwalk.Count() > 0) {
                    possibleNodes = nonwalk.ToList();
                }
                else if (DataPea.Random.Next(100) < 10)
                {
                    snapshot.Wander(node.Value, null);
                    pea.Jump(null);
                    return;
                }

                snapshot.Wander(node.Value, possibleNodes[DataPea.Random.Next(possibleNodes.Count)].Value);
                
            }
            else
            {
                snapshot.Wander(node.Value, null);
                pea.Jump(null);
            }
        }
        /// <summary>
        /// Jumping start
        /// </summary>
        /// <param name="pea"></param>
        /// <param name="gameTime"></param>
        public void Jump(DataPea pea, GameTime gameTime)
        {
            var snapshot = GetSnapshot(pea);
            var d = (snapshot.Target.Source.Position + Vector2.UnitX * 35 - Vector2.UnitY * 8 - pea.Position);

            // If not in range of the target, stop jumping
            if (d.Length() > 5 || !IsValid(snapshot.Target) || 
                ((snapshot.Target.Placement == DataJumpSpot.Location.Left ? 
                    (snapshot.Target.Source == null ? snapshot.Target : snapshot.Target.Source.JumpLeft)  :
                    (snapshot.Target.Source == null ? snapshot.Target : snapshot.Target.Source.JumpRight)) ?? snapshot.Target).HasJumped(pea))
            {
                // TODO REMOVE JUMPSPOT FROM CANDIDATES
                snapshot.Target = null;
                return;
            }

            pea.Jump(snapshot.Target);
        }