public override void Activate(object eventData)
            {
                Debug.WriteLine("Walk State");

                Vec2 target = eventData as Vec2;

#if (WINDOWS_PHONE && !SILVERLIGHT)
                float speed = (Parent as CharacterController).WalkSpeed;
                if (speed > 0)
                {
                    mSpeed = speed;
                }
                ;
#endif
                if (target == null)
                {
                    Debug.WriteLine("No event data");
                }
                else
                {
                    mTarget = target;

                    CharacterController controller = (this.Parent as CharacterController);
                    IRoadCharacter      parent     = controller.Parent as IRoadCharacter;
                    Vec2 direction = mTarget - new Vec2(parent.X, parent.Y);
                    Debug.WriteLine("direction length " + direction.Length());
                    if (direction.Length() < 0.01)
                    {
                        // at target
                        controller.HandleEvent((int)CharacterController.CharacterEvents.To_GetTarget, null);
                    }
                    else
                    {
                        direction.Normalize();
                        ///*
                        if (direction.X > 0.99f)
                        {
                            parent.AnimController.PlayAnimation(RoadAnimationNames.kWalkRight, MirrorMode.None);
                        }
                        else if (direction.X < -0.99f)
                        {
                            parent.AnimController.PlayAnimation(RoadAnimationNames.kWalkRight, MirrorMode.Horizontal);
                        }
                        else if (direction.Y > 0.99f)
                        {
                            parent.AnimController.PlayAnimation(RoadAnimationNames.kWalkBack, MirrorMode.None);
                        }
                        else if (direction.Y < -0.99f)
                        {
                            parent.AnimController.PlayAnimation(RoadAnimationNames.kWalkForward, MirrorMode.None);
                        }
                        //*/
                    }
                }
            }
            public override void Update(float dt)
            {
                CharacterController controller = (this.Parent as CharacterController);
                IRoadCharacter      parent     = controller.Parent as IRoadCharacter;
                Vec2 direction = mTarget - new Vec2(parent.X, parent.Y);

                Debug.WriteLine("elapsed time" + dt);

                float distance = direction.Length();

                if (distance < 0.01)
                {
                    // at target
                    Debug.WriteLine("At Target, Raise Event");
                    controller.HandleEvent((int)CharacterController.CharacterEvents.To_GetTarget, null);
                }
                else
                {
                    direction.Normalize();
                    Debug.WriteLine("mSpeed*dt :" + mSpeed * dt);
                    direction *= Convert.ToSingle(Math.Min(mSpeed * dt, distance));

                    parent.X += direction.X;
                    parent.Y += direction.Y;
                    //Debug.WriteLine("Parent posn {0} {1}", parent.X, parent.Y);
                }
            }