I use something similar in my game and ran into a lot of problems with it as well. You can however use the pathfinding in C2, you just have to use it as a non optimized pathfinding tool that will just give you the basic path from A to B. It have quite a few problems with tilemaps, which you will have to correct manually afterwards.

The way I use it in my game is like this:

1. Enemy acquire a target

2. Find the nearest empty tile near the target.

3. Find path to this tile.

4. Store all the nodes which it have found.

5. Since it have problems moving diagonal around other units (Big problem when using tilemaps). I correct the path everytime a unit moves to make up for this.

6. As this doesn't solve all problems and the pathfinding ignore some collisions for some reason. I will in case step 5 doesn't solve it, make it find a path again. Which will make it start from step 1 once again, but from its current position.

But that will eventually get the unit to the target.

So you should be able to do the same in your game as I have in my game. The way you do it is to check the node after the one its currently moving towards. If this node is next to the current one you remove the current node and instead let it move to the next one.

Using your example:

0: 0,2

1: 1,2

2: 2,2

3: 2,1

Lets assume the unit is standing at 0, 2 then you test:

**Value of**

node(Unit position).X + 1 = node(1).X

**and value of**

node(Unit position).Y = node(1).Y are true

Since that's the case you know that the unit is moving from left -> right

So now you have to check if the next node again is above or below node(1)

So you do another check:

**Value of**

node(Unit position).X + 1 = node(2).X

**and value of**

node(Unit position).Y - 1 = node(2).Y are true

If that's the case you know there are another node above node(1)

And for the bottom:

**Value of**

node(Unit position).X + 1 = node(2).X

**and value of**

node(Unit position).Y + 1 = node(2).Y are true

Would be a node below node(1)

Since none of these are true you do nothing an let the unit move along the path.

So now the unit is at (1.2) and then you do it again.

**Value of**

node(Unit position).X + 1 = node(1).X

**and value of**

node(Unit position).Y = node(1).Y are true

Again this is true indicating that the unit is still moving from left -> right

So we check to see if there is another node above node(1):

**Value of**

node(Unit position).X + 1 = node(2).X

**and value of**

node(Unit position).Y - 1 = node(2).Y are true

Which there are in this case (2,1)

So you remove node(1) from your list, so instead of the unit moving to (2,2) which it would normally do, it will now move from tile(1,2) -> (2,1)

And you make something like that for all directions. Whether that will solve all your problems I doubt and you most likely have to do as I showed in the above approach.