src/ai/api/ai_tilelist_valuator.cpp
author truelight
Sat, 14 Jul 2007 21:15:49 +0000
branchnoai
changeset 9657 f2c6e332d8bc
parent 9655 e8e43f333832
child 9658 e7675771bca4
permissions -rw-r--r--
(svn r10564) [NoAI] -Add: added a AITileList valuator that checks for a NxM buildable spot with the entry from the AITileList as top-left tile
#include "ai_tilelist_valuator.hpp"
#include "ai_tile.hpp"
#include "ai_road.hpp"
#include "ai_map.hpp"
#include "../../tile.h"
#include "../../road_map.h"

int32 AITileListBuildable::Valuate(int32 tile) const
{
	return AITile::IsBuildable(tile);
}

int32 AITileListBuildableRectangle::Valuate(int32 tile) const
{
	uint tx, ty;

	tx = AIMap::GetTileX(tile);
	ty = AIMap::GetTileY(tile);

	for (uint x = tx; x < this->width + tx; x++) {
		for (uint y = ty; y < this->height + ty; y++) {
			if (!AITile::IsBuildable(AIMap::GetTileIndex(x, y))) return false;
		}
	}

	return true;
}

int32 AITileListSlope::Valuate(int32 tile) const
{
	return AITile::GetSlope(tile);
}

int32 AITileListNeighbourRoadCount::Valuate(int32 tile) const
{
	return AIRoad::GetNeighbourRoadCount(tile);
}

int32 AITileListRoadTile::Valuate(int32 tile) const
{
	return ::IsTileType(tile, MP_STREET) && ::GetRoadTileType(tile) != ROAD_TILE_DEPOT;
}

int32 AITileListCargoAcceptance::Valuate(int32 tile) const
{
	return AITile::GetCargoAcceptance(tile, this->cargo_type);
}

int32 AITileListDistanceManhattanToTile::Valuate(int32 tile) const
{
	return AIMap::DistanceManhattan(this->tile, tile);
}

int32 AITileListDistanceSquareToTile::Valuate(int32 tile) const
{
	return AIMap::DistanceSquare(this->tile, tile);
}