author | truebrain |
Thu, 12 Jun 2008 21:07:25 +0000 | |
branch | noai |
changeset 10943 | 5f5a5dd407d8 |
child 10946 | 7ccfbff5698d |
permissions | -rw-r--r-- |
10943
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
1 |
/* $Id$ */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
2 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
3 |
/** |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
4 |
* A Road Pathfinder. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
5 |
* This road pathfinder tries to find a buildable / existing route for |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
6 |
* road vehicles. You can changes the costs below using for example |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
7 |
* roadpf.cost.turn = 30. Note that it's not allowed to change the cost |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
8 |
* between consecutive calls to FindPath. You can change the cost before |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
9 |
* the first call to FindPath and after FindPath has returned an actual |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
10 |
* route. To use only existing roads, set cost.no_existing_road to |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
11 |
* cost.max_cost. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
12 |
*/ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
13 |
class Road |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
14 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
15 |
_aystar_class = import("graph.aystar", "", 3); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
16 |
_max_cost = null; ///< The maximum cost for a route. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
17 |
_cost_tile = null; ///< The cost for a single tile. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
18 |
_cost_no_existing_road = null; ///< The cost that is added to _cost_tile if no road exists yet. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
19 |
_cost_turn = null; ///< The cost that is added to _cost_tile if the direction changes. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
20 |
_cost_slope = null; ///< The extra cost if a road tile is sloped. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
21 |
_cost_bridge_per_tile = null; ///< The cost per tile of a bridge. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
22 |
_cost_tunnel_per_tile = null; ///< The cost per tile of a tunnel. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
23 |
_cost_coast = null; ///< The extra cost for a coast tile. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
24 |
_pathfinder = null; ///< A reference to the used AyStar object. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
25 |
_lowest_cost = null; ///< min(_cost_tile, _cost_bridge_per_tile, _cost_tunnel_per_tile) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
26 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
27 |
cost = null; ///< Used to change the costs. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
28 |
_running = null; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
29 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
30 |
constructor() |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
31 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
32 |
this._max_cost = 2000000000; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
33 |
this._cost_tile = 100; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
34 |
this._cost_no_existing_road = 40; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
35 |
this._cost_turn = 100; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
36 |
this._cost_slope = 200; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
37 |
this._cost_bridge_per_tile = 105; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
38 |
this._cost_tunnel_per_tile = 105; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
39 |
this._cost_coast = 20; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
40 |
this._pathfinder = this._aystar_class(this._Cost, this._Estimate, this._Neighbours, this, this, this); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
41 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
42 |
this.cost = this.Cost(this); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
43 |
this._running = false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
44 |
this._lowest_cost = 0; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
45 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
46 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
47 |
/** |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
48 |
* Initialize a path search between sources and goals. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
49 |
* @param sources The source nodes. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
50 |
* @param goals The target nodes. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
51 |
* @see AyStar::InitializePath() |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
52 |
*/ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
53 |
function InitializePath(sources, goals) { this._pathfinder.InitializePath(sources, goals); } |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
54 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
55 |
/** |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
56 |
* Try to find the path as indicated with InitializePath with the lowest cost. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
57 |
* @param iterations After how many iterations it should abort for a moment. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
58 |
* This value should either be -1 for infinite, or > 0. Any other value |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
59 |
* aborts immediatly and will never find a path. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
60 |
* @return A route if one was found, or false if the amount of iterations was |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
61 |
* reached, or null if no path was found. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
62 |
* You can call this function over and over as long as it returns false, |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
63 |
* which is an indication it is not yet done looking for a route. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
64 |
* @see AyStar::FindPath() |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
65 |
*/ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
66 |
function FindPath(iterations); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
67 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
68 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
69 |
class Road.Cost |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
70 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
71 |
_main = null; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
72 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
73 |
function _set(idx, val) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
74 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
75 |
if (this._main._running) throw("You are not allowed to change parameters of a running pathfinder."); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
76 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
77 |
switch (idx) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
78 |
case "max_cost": this._main._max_cost = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
79 |
case "tile": this._main._cost_tile = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
80 |
case "no_existing_road": this._main._cost_no_existing_road = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
81 |
case "turn": this._main._cost_turn = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
82 |
case "slope": this._main._cost_slope = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
83 |
case "bridge_per_tile": this._main._cost_bridge_per_tile = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
84 |
case "tunnel_per_tile": this._main._cost_tunnel_per_tile = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
85 |
case "coast": this._main._cost_coast = val; break; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
86 |
default: throw("the index '" + idx + "' does not exist"); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
87 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
88 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
89 |
return val; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
90 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
91 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
92 |
function _get(idx) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
93 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
94 |
switch (idx) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
95 |
case "max_cost": return this._main._max_cost; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
96 |
case "tile": return this._main._cost_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
97 |
case "no_existing_road": return this._main._cost_no_existing_road; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
98 |
case "turn": return this._main._cost_turn; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
99 |
case "slope": return this._main._cost_slope; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
100 |
case "bridge_per_tile": return this._main._cost_bridge_per_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
101 |
case "tunnel_per_tile": return this._main._cost_tunnel_per_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
102 |
case "coast": return this._main._cost_coast; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
103 |
default: throw("the index '" + idx + "' does not exist"); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
104 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
105 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
106 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
107 |
function constructor(main) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
108 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
109 |
this._main = main; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
110 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
111 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
112 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
113 |
function Road::FindPath(iterations) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
114 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
115 |
this._lowest_cost = min(min(this._cost_tile, this._cost_bridge_per_tile), this._cost_tunnel_per_tile); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
116 |
local ret = this._pathfinder.FindPath(iterations); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
117 |
this._running = (ret == false) ? true : false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
118 |
return ret; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
119 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
120 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
121 |
function Road::_Cost(path, new_node, self) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
122 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
123 |
/* path == null means this is the first node of a path, so the cost is 0. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
124 |
if (path == null) return 0; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
125 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
126 |
local prev_node = path.GetNode(); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
127 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
128 |
/* If the new tile is a bridge / tunnel tile, check wether we came from the other |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
129 |
* end of the bridge / tunnel or if we just entered the bridge / tunnel. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
130 |
if (AIBridge.IsBridgeTile(new_node)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
131 |
if (AIBridge.GetOtherBridgeEnd(new_node) != prev_node) return path.GetCost() + self._cost_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
132 |
return path.GetCost() + AIMap.DistanceManhattan(new_node, prev_node) * self._cost_bridge_per_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
133 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
134 |
if (AITunnel.IsTunnelTile(new_node)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
135 |
if (AITunnel.GetOtherTunnelEnd(new_node) != prev_node) return path.GetCost() + self._cost_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
136 |
return path.GetCost() + AIMap.DistanceManhattan(new_node, prev_node) * self._cost_tunnel_per_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
137 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
138 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
139 |
/* Check for a turn. We do this by substracting the TileID of the current node from |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
140 |
* the TileID of the previous node and comparing that to the difference between the |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
141 |
* previous node and the node before that. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
142 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
143 |
local cost = self._cost_tile; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
144 |
if (path.GetParent() != null && (prev_node - path.GetParent().GetNode()) != (new_node - prev_node)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
145 |
cost += self._cost_turn; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
146 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
147 |
/* Check if the new tile is a coast tile. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
148 |
if (AITile.IsCoastTile(new_node)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
149 |
cost += self._cost_coast; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
150 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
151 |
/* Check if the last tile was sloped. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
152 |
if (path.GetParent() != null && !AIBridge.IsBridgeTile(path.GetNode()) && !AITunnel.IsTunnelTile(path.GetNode()) && |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
153 |
self._IsSlopedRoad(path.GetParent().GetNode(), path.GetNode(), new_node)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
154 |
cost += self._cost_slope; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
155 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
156 |
if (!AIRoad.AreRoadTilesConnected(prev_node, new_node)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
157 |
cost += self._cost_no_existing_road; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
158 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
159 |
return path.GetCost() + cost; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
160 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
161 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
162 |
function Road::_Estimate(cur_tile, goal_tiles, self) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
163 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
164 |
local min_cost = self._max_cost; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
165 |
/* As estimate we multiply the lowest possible cost for a single tile with |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
166 |
* with the minimum number of tiles we need to traverse. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
167 |
foreach (tile in goal_tiles) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
168 |
min_cost = min(AIMap.DistanceManhattan(cur_tile, tile) * self._lowest_cost, min_cost); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
169 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
170 |
return min_cost; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
171 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
172 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
173 |
function Road::_Neighbours(path, cur_node, self) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
174 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
175 |
/* self._max_cost is the maximum path cost, if we go over it, the path isn't valid. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
176 |
if (path.GetCost() >= self._max_cost) return []; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
177 |
local tiles = []; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
178 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
179 |
/* Check if the current tile is part of a bridge or tunnel */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
180 |
if ((AIBridge.IsBridgeTile(cur_node) || AITunnel.IsTunnelTile(cur_node)) && |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
181 |
AITile.HasTransportType(cur_node, AITile.TRANSPORT_ROAD)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
182 |
local other_end = AIBridge.IsBridgeTile(cur_node) ? AIBridge.GetOtherBridgeEnd(cur_node) : AITunnel.GetOtherTunnelEnd(cur_node); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
183 |
/* The other end of the bridge / tunnel is a neighbour. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
184 |
tiles.push(other_end); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
185 |
local next_tile = null; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
186 |
if (other_end < cur_node) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
187 |
if (other_end <= cur_node - AIMap.GetMapSizeX()) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
188 |
next_tile = cur_node + AIMap.GetMapSizeX(); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
189 |
} else { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
190 |
next_tile = cur_node + 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
191 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
192 |
} else { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
193 |
if (other_end >= cur_node + AIMap.GetMapSizeX()) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
194 |
next_tile = cur_node - AIMap.GetMapSizeX(); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
195 |
} else { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
196 |
next_tile = cur_node - 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
197 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
198 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
199 |
if (AIRoad.AreRoadTilesConnected(cur_node, next_tile) || AITile.IsBuildable(next_tile) || |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
200 |
AIRoad.IsRoadTile(next_tile)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
201 |
tiles.push(next_tile); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
202 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
203 |
} else { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
204 |
local offsets = [AIMap.GetTileIndex(0,1), AIMap.GetTileIndex(0, -1), |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
205 |
AIMap.GetTileIndex(1,0), AIMap.GetTileIndex(-1,0)]; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
206 |
/* Check all tiles adjacent to the current tile. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
207 |
foreach (offset in offsets) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
208 |
local next_tile = cur_node + offset; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
209 |
/* We add them to the to the neighbours-list if one of the following applies: |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
210 |
* 1) There already is a connections between the current tile and the next tile. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
211 |
* 2) We can build a road to the next tile. |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
212 |
* 3) The next tile is the entrance of a tunnel / bridge in the correct direction. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
213 |
if (AIRoad.AreRoadTilesConnected(cur_node, next_tile)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
214 |
tiles.push(next_tile); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
215 |
} else if ((AITile.IsBuildable(next_tile) || AIRoad.IsRoadTile(next_tile)) && |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
216 |
(path.GetParent() == null || self._CheckSlopes(path.GetParent().GetNode(), cur_node, next_tile))) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
217 |
tiles.push(next_tile); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
218 |
} else if (self._CheckTunnelBridge(cur_node, next_tile)) { |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
219 |
tiles.push(next_tile); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
220 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
221 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
222 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
223 |
return tiles; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
224 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
225 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
226 |
function Road::_IsSlopedRoad(start, middle, end) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
227 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
228 |
local NW = 0; //Set to true if we want to build a road to / from the north-west |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
229 |
local NE = 0; //Set to true if we want to build a road to / from the north-east |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
230 |
local SW = 0; //Set to true if we want to build a road to / from the south-west |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
231 |
local SE = 0; //Set to true if we want to build a road to / from the south-east |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
232 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
233 |
if (middle - AIMap.GetMapSizeX() == start || middle - AIMap.GetMapSizeX() == end) NW = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
234 |
if (middle - 1 == start || middle - 1 == end) NE = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
235 |
if (middle + AIMap.GetMapSizeX() == start || middle + AIMap.GetMapSizeX() == end) SE = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
236 |
if (middle + 1 == start || middle + 1 == end) SW = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
237 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
238 |
/* If there is a turn in the current tile, it can't be sloped. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
239 |
if ((NW || SE) && (NE || SW)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
240 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
241 |
local slope = AITile.GetSlope(middle); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
242 |
/* A road on a steep slope is always sloped. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
243 |
if (AITile.IsSteepSlope(slope)) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
244 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
245 |
/* If only one corner is raised, the road is sloped. */ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
246 |
if (slope == AITile.SLOPE_N || slope == AITile.SLOPE_W) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
247 |
if (slope == AITile.SLOPE_S || slope == AITile.SLOPE_E) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
248 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
249 |
if (NW && (slope == AITile.SLOPE_NW || slope == AITile.SLOPE_SE)) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
250 |
if (NE && (slope == AITile.SLOPE_NE || slope == AITile.SLOPE_SW)) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
251 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
252 |
return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
253 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
254 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
255 |
function Road::_CheckSlopes(start, middle, end) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
256 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
257 |
local NW = 0; //Set to true if we want to build a road to / from the north-west |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
258 |
local NE = 0; //Set to true if we want to build a road to / from the north-east |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
259 |
local SW = 0; //Set to true if we want to build a road to / from the south-west |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
260 |
local SE = 0; //Set to true if we want to build a road to / from the south-east |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
261 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
262 |
if (middle - AIMap.GetMapSizeX() == start || middle - AIMap.GetMapSizeX() == end) NW = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
263 |
if (middle - 1 == start || middle - 1 == end) NE = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
264 |
if (middle + AIMap.GetMapSizeX() == start || middle + AIMap.GetMapSizeX() == end) SE = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
265 |
if (middle + 1 == start || middle + 1 == end) SW = 1; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
266 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
267 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
268 |
local test_mode = AITestMode(); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
269 |
if (!AIRoad.AreRoadTilesConnected(start, middle) && !AIRoad.BuildRoad(start, middle)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
270 |
if (!AIRoad.AreRoadTilesConnected(middle, end) && !AIRoad.BuildRoad(middle, end)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
271 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
272 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
273 |
if ((NW && SE) || (NE && SW)) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
274 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
275 |
local slope = AITile.GetSlope(middle); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
276 |
if (AITile.IsSteepSlope(slope)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
277 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
278 |
if (slope == AITile.SLOPE_NS || slope == AITile.SLOPE_EW) return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
279 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
280 |
if (NW && SW && (slope == AITile.SLOPE_E || slope == AITile.SLOPE_NE || slope == AITile.SLOPE_SE)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
281 |
if (NE && SE && (slope == AITile.SLOPE_W || slope == AITile.SLOPE_NW || slope == AITile.SLOPE_SW)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
282 |
if (NW && NE && (slope == AITile.SLOPE_S || slope == AITile.SLOPE_SE || slope == AITile.SLOPE_SW)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
283 |
if (SW && SE && (slope == AITile.SLOPE_N || slope == AITile.SLOPE_NE || slope == AITile.SLOPE_NW)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
284 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
285 |
return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
286 |
} |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
287 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
288 |
function Road::_CheckTunnelBridge(current_node, new_node) |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
289 |
{ |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
290 |
if (!AIBridge.IsBridgeTile(new_node) && !AITunnel.IsTunnelTile(new_node)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
291 |
local dir = new_node - current_node; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
292 |
local other_end = AIBridge.IsBridgeTile(new_node) ? AIBridge.GetOtherBridgeEnd(new_node) : AITunnel.GetOtherTunnelEnd(new_node); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
293 |
local dir2 = other_end - new_node; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
294 |
if ((dir < 0 && dir2 > 0) || (dir > 0 && dir2 < 0)) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
295 |
dir = abs(dir); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
296 |
dir2 = abs(dir2); |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
297 |
if ((dir >= AIMap.GetMapSizeX() && dir2 < AIMap.GetMapSizeX()) || |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
298 |
(dir < AIMap.GetMapSizeX() && dir2 >= AIMap.GetMapSizeX())) return false; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
299 |
|
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
300 |
return true; |
5f5a5dd407d8
(svn r13497) [NoAI] -Add [Library]: pathfinder.road, a basic road pathfinder (no bridges/tunnels (yet)) (patch by Yexo, very nice job!)
truebrain
parents:
diff
changeset
|
301 |
} |