C7-Game / Prototype

An early-stage, open-source 4X strategy game
https://c7-game.github.io/
MIT License
33 stars 9 forks source link

Units shouldn't route through rival cities #371

Open QuintillusCFC opened 1 year ago

QuintillusCFC commented 1 year ago

While play-testing another change, I noticed an AI-controlled Carthaginian settler trying to go through Athens.

image

From the console output I can tell that it is trying to reach the tile indicated with the purple star. It's been stuck at the same tile for a few turns and the obvious conclusion is that it is trying to go north through Athens.

We should exclude rival cities from our routing calculations, likely by setting the distance to infinite (unless there's a future option enable to allow passage through friendly cities, like in Civ4. We could add that check in at this point so things are flexible, even if it always returns false for now).

This is a small incremental step towards better routing. I've listed it as a bug since the settler gets permanently stuck (well, unless the city gets destroyed perhaps), though I expect many of those improvements (e.g. respecting lack of right of passage once we have borders) will be improvements.

There are also a few other non-related units-getting-stuck issues, many of which I suspect are due to the unit's goal no longer being achievable, rather than pathing.

This may optionally be added to Carthage, or done later for Dutch.

Kright commented 1 year ago

You can add another walker, which checks that tile hasn't enemy city. https://github.com/C7-Game/Prototype/blob/Development/C7Engine/AI/Pathing/EdgeWalker.cs This walker could be passed to DijkstraAlgorithm here: https://github.com/C7-Game/Prototype/blob/Development/C7Engine/AI/Pathing/DijkstrasAlgorithm.cs#L23

WildWeazel commented 1 year ago

What actually happens when the AI tries to do this? Does the unit lose/waste its MP? Is the AI waiting for the path to clear?

QuintillusCFC commented 1 year ago

What actually happens when the AI tries to do this? Does the unit lose/waste its MP? Is the AI waiting for the path to clear?

It gets the city tile as the next tile on its path, and tries to move there, but can't, so it stays where it is.

I believe that the next turn it gets the tile after the city on its path, which it also can't move to because it doesn't neighbor that tile, so it stays put.

There will be future enhancements required too, around paths becoming invalid after they are assigned. #213 is related to that problem.