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); } }