src/ai/api/ai_tilelist.cpp
author truebrain
Wed, 26 Mar 2008 15:17:40 +0000
branchnoai
changeset 9823 0b7f816cf46f
parent 9801 03a3eebd7fb7
child 9833 89a64246458f
permissions -rw-r--r--
(svn r12431) [NoAI] -Add: added AIEventSubsidiaryOffer, which keeps you informed about new Subsidiaries
9599
949374e83b78 (svn r9632) [NoAI] -Sync with trunk r9574:9631.
rubidium
parents: 9592
diff changeset
     1
/* $Id$ */
949374e83b78 (svn r9632) [NoAI] -Sync with trunk r9574:9631.
rubidium
parents: 9592
diff changeset
     2
949374e83b78 (svn r9632) [NoAI] -Sync with trunk r9574:9631.
rubidium
parents: 9592
diff changeset
     3
/** @file ai_tilelist.cpp handles all functions of the AITileList class */
949374e83b78 (svn r9632) [NoAI] -Sync with trunk r9574:9631.
rubidium
parents: 9592
diff changeset
     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
949374e83b78 (svn r9632) [NoAI] -Sync with trunk r9574:9631.
rubidium
parents: 9592
diff changeset
     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
949374e83b78 (svn r9632) [NoAI] -Sync with trunk r9574:9631.
rubidium
parents: 9592
diff changeset
    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
}