Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Units shouldn't route through rival cities #371

Open
QuintillusCFC opened this issue Oct 16, 2022 · 3 comments
Open

Units shouldn't route through rival cities #371

QuintillusCFC opened this issue Oct 16, 2022 · 3 comments
Labels
bug Something isn't working
Milestone

Comments

@QuintillusCFC
Copy link
Member

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.

@QuintillusCFC QuintillusCFC added the bug Something isn't working label Oct 16, 2022
@QuintillusCFC QuintillusCFC added this to the Unit Pathing milestone Oct 16, 2022
@Kright
Copy link
Collaborator

Kright commented Oct 18, 2022

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
Copy link
Member

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
Copy link
Member Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants