Closed AlexanderPruss closed 3 years ago
The "workaround" you mention is the intended way to implement the feature you want. I've considered "terrain per point" vs. "terrain per connection" early in development in #10 and decided on the former, specifically because this "workaround" is possible.
Thanks for the quick response, we can probably close this issue then. I'd be happy to add a description of the intended solution for connection terrain to the docs if you'd like.
Thanks! We are planning to add library of pre-made wrapper objects/examples for most common use-cases. We might want to add this one to the list. I'm not sure how it is going, as I was rather busy with life stuff lately.
Background
First off, awesome project! I was looking for something like this for a tactics game I'm building in Godot :)
Djikstra maps consist of points and connections between points. Adding a terrain to a point lets you change the weight of connections to that point in a
recalculate()
call without having to construct a second DijkstraMap.I'd like to generalize this concept and also add a "terrain" to connections between points, rather than just to points themselves.
Problem I want to solve
Suppose I have a grid where every single cell has the same terrain, Grass. However, there obstacles between some of these cells - low fences, say. I want the pathfinding weight of connections with this obstacle to be different for different units. As an example -
Proposed Solution
Adding a "terrain" to connections between points and an optional set of weights used for connection-terrain in the
recalculate()
method would allow the same Dijkstra map to be used for calculating pathfinding for units that react differently to obstacles between cells. It could look something like this:int connect_points( int source, int target, float cost=1.0, bool bidirectional=true )
int connect_points( int source, int target, float cost=1.0, bool bidirectional=true, int terrain_id = -1)
recalculate()
recalculate({obstacle_terrain_weights: {FENCE=2.0})
As connections already have a
weight
, the weight from the obstacle terrain would act as a multiplier on the cost of traversing that path.Current Workaround
This is actually currently possible with this addon, but only by kind of abusing the API.
Suppose we have a cell X and a cell Y and we want to create an obstacle between them. To do this, we: