author | truebrain |
Wed, 26 Mar 2008 15:17:40 +0000 | |
branch | noai |
changeset 9823 | 0b7f816cf46f |
parent 9801 | 03a3eebd7fb7 |
child 9833 | 89a64246458f |
permissions | -rw-r--r-- |
9599 | 1 |
/* $Id$ */ |
2 |
||
3 |
/** @file ai_tilelist.cpp handles all functions of the AITileList class */ |
|
4 |
||
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
5 |
#include "ai_tilelist.hpp" |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
6 |
#include "ai_industry.hpp" |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
7 |
|
9599 | 8 |
#include "../../landscape.h" |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
9 |
#include "../../settings_type.h" |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
10 |
#include "../../station.h" |
9723
eee46cb39750
(svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents:
9599
diff
changeset
|
11 |
#include "../../map_func.h" |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
12 |
#include "../../tile_map.h" |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
13 |
#include "../../industry_map.h" |
9599 | 14 |
|
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
15 |
void AITileList::FixRectangleSpan(TileIndex &t1, TileIndex &t2) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
16 |
{ |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
17 |
uint x1 = ::TileX(t1); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
18 |
uint x2 = ::TileX(t2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
19 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
20 |
uint y1 = ::TileY(t1); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
21 |
uint y2 = ::TileY(t2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
22 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
23 |
if (x1 >= x2) ::Swap(x1, x2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
24 |
if (y1 >= y2) ::Swap(y1, y2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
25 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
26 |
t1 = ::TileXY(x1, y1); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
27 |
t2 = ::TileXY(x2, y2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
28 |
} |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
29 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
30 |
void AITileList::AddRectangle(TileIndex t1, TileIndex t2) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
31 |
{ |
9801
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9767
diff
changeset
|
32 |
if (!::IsValidTile(t1)) return; |
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9767
diff
changeset
|
33 |
if (!::IsValidTile(t2)) return; |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
34 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
35 |
this->FixRectangleSpan(t1, t2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
36 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
37 |
uint w = TileX(t2) - TileX(t1) + 1; |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
38 |
uint h = TileY(t2) - TileY(t1) + 1; |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
39 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
40 |
BEGIN_TILE_LOOP(t, w, h, t1) { |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
41 |
this->AddItem(t); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
42 |
} END_TILE_LOOP(t, w, h, t1) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
43 |
} |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
44 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
45 |
void AITileList::AddTile(TileIndex tile) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
46 |
{ |
9801
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9767
diff
changeset
|
47 |
if (!::IsValidTile(tile)) return; |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
48 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
49 |
this->AddItem(tile); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
50 |
} |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
51 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
52 |
void AITileList::RemoveRectangle(TileIndex t1, TileIndex t2) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
53 |
{ |
9801
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9767
diff
changeset
|
54 |
if (!::IsValidTile(t1)) return; |
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9767
diff
changeset
|
55 |
if (!::IsValidTile(t2)) return; |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
56 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
57 |
this->FixRectangleSpan(t1, t2); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
58 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
59 |
uint w = TileX(t2) - TileX(t1) + 1; |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
60 |
uint h = TileY(t2) - TileY(t1) + 1; |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
61 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
62 |
BEGIN_TILE_LOOP(t, w, h, t1) { |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
63 |
this->RemoveItem(t); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
64 |
} END_TILE_LOOP(t, w, h, t1) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
65 |
} |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
66 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
67 |
void AITileList::RemoveTile(TileIndex tile) |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
68 |
{ |
9801
03a3eebd7fb7
(svn r12307) [NoAI] -Codechange: as followup on r12303 (trunk), use ::IsValidTile to check if a tile is inside the map, instead of all our custom ways
truebrain
parents:
9767
diff
changeset
|
69 |
if (!::IsValidTile(tile)) return; |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
70 |
|
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
71 |
this->RemoveItem(tile); |
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
diff
changeset
|
72 |
} |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
73 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
74 |
AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_id, uint radius) |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
75 |
{ |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
76 |
if (!AIIndustry::IsValidIndustry(industry_id)) return; |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
77 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
78 |
const Industry *i = ::GetIndustry(industry_id); |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
79 |
const IndustrySpec *indsp = ::GetIndustrySpec(i->type); |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
80 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
81 |
/* Check if this industry accepts anything */ |
9765
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
82 |
{ |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
83 |
bool cargo_accepts = false; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
84 |
for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) { |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
85 |
if (indsp->accepts_cargo[j] != CT_INVALID) cargo_accepts = true; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
86 |
} |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
87 |
if (!cargo_accepts) return; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
88 |
} |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
89 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
90 |
if (!_patches.modified_catchment) radius = CA_UNMODIFIED; |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
91 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
92 |
BEGIN_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) { |
9766
bf67ecd8fd1f
(svn r12255) [NoAI] -Fix: ensure AITileList_Industry* only operates on valid tiles (Morloth)
truebrain
parents:
9765
diff
changeset
|
93 |
if (!::IsValidTile(cur_tile)) continue; |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
94 |
/* Exclude all tiles that belong to this industry */ |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
95 |
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue; |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
96 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
97 |
/* Only add the tile if it accepts the cargo (sometimes just 1 tile of an |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
98 |
* industry triggers the acceptance). */ |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
99 |
AcceptedCargo accepts; |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
100 |
::GetAcceptanceAroundTiles(accepts, cur_tile, 1, 1, radius); |
9765
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
101 |
{ |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
102 |
bool cargo_accepts = false; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
103 |
for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) { |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
104 |
if (indsp->accepts_cargo[j] != CT_INVALID && accepts[indsp->accepts_cargo[j]] != 0) cargo_accepts = true; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
105 |
} |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
106 |
if (!cargo_accepts) continue; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
107 |
} |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
108 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
109 |
this->AddTile(cur_tile); |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
110 |
} END_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
111 |
} |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
112 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
113 |
AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_id, uint radius) |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
114 |
{ |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
115 |
if (!AIIndustry::IsValidIndustry(industry_id)) return; |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
116 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
117 |
const Industry *i = ::GetIndustry(industry_id); |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
118 |
const IndustrySpec *indsp = ::GetIndustrySpec(i->type); |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
119 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
120 |
/* Check if this industry produces anything */ |
9765
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
121 |
{ |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
122 |
bool cargo_produces = false; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
123 |
for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) { |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
124 |
if (indsp->produced_cargo[j] != CT_INVALID) cargo_produces = true; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
125 |
} |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
126 |
if (!cargo_produces) return; |
4253d585cdbb
(svn r12254) [NoAI] -Fix: make AITileList_Industry* newgrf compatible (tnx glx)
truebrain
parents:
9757
diff
changeset
|
127 |
} |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
128 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
129 |
if (!_patches.modified_catchment) radius = CA_UNMODIFIED; |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
130 |
|
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
131 |
BEGIN_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) { |
9766
bf67ecd8fd1f
(svn r12255) [NoAI] -Fix: ensure AITileList_Industry* only operates on valid tiles (Morloth)
truebrain
parents:
9765
diff
changeset
|
132 |
if (!::IsValidTile(cur_tile)) continue; |
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
133 |
/* Exclude all tiles that belong to this industry */ |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
134 |
if (::IsTileType(cur_tile, MP_INDUSTRY) && ::GetIndustryIndex(cur_tile) == industry_id) continue; |
9767
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
135 |
|
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
136 |
/* Only add the tile if it produces the cargo (a bug in OpenTTD makes this |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
137 |
* inconsitance). */ |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
138 |
AcceptedCargo produces; |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
139 |
::GetProductionAroundTiles(produces, cur_tile, 1, 1, radius); |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
140 |
{ |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
141 |
bool cargo_produces = false; |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
142 |
for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) { |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
143 |
if (indsp->produced_cargo[j] != CT_INVALID && produces[indsp->produced_cargo[j]] != 0) cargo_produces = true; |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
144 |
} |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
145 |
if (!cargo_produces) continue; |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
146 |
} |
a937441fecf1
(svn r12256) [NoAI] -Fix: because of a 'bug' in OpenTTD, FindStationsAroundIndustryTile gave inconsitant results with GetProductionAroundTiles (first ignores station layout). Fixed with HACK, waiting for real solution in OpenTTD.
truebrain
parents:
9766
diff
changeset
|
147 |
|
9757
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
148 |
this->AddTile(cur_tile); |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
149 |
} END_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius)) |
5cdc14959fb6
(svn r12242) [NoAI] -Add: added AITileList_Industry(Accepting|Producing), giving tiles on which you want to build a station for an industry
truebrain
parents:
9723
diff
changeset
|
150 |
} |