In your Entity class define these
public delegate void MoveFinishedHandler();
public event MoveFinishedHandler OnMoveFinished;
Inside timer_Moving_Tick amend like so
if (Xloc == x & YlocB == y)
{
Moving.Stop();
if (OnMoveFinished != null)
{
OnMoveFinished();
}
}
Kick your movement off like
player1.OnMoveFinished += Player1_OnMoveFinished;
player1.GoTo(ironField.x, ironField.y);
and define the event handler;
private void Player1_OnMoveFinished()
{
player1.OnMoveFinished -= Player1_OnMoveFinished;
player1.GoTo(city.x, city.y);
}
That will cause your Entity class to call the event handler when it has finished moving, and that event handler then starts the next movement.
If I was you though I'd probably create a list or array of target locations instead and define that with the player, and then code it so that when one movement ends it gets the next location in the list (if there is one) and moves to that too. That way you could do something like
player1.AddLocation(10, 10);
player1.AddLocation(20, 20);
player1.Move();
and the Move function would move to 10,10 and then 20,20.