src/ai/api/ai_town.cpp
author truebrain
Fri, 23 May 2008 08:52:29 +0000
branchnoai
changeset 10674 542470cee8a2
parent 10361 4cdffd48480f
child 10840 fd5945ab9ea6
permissions -rw-r--r--
(svn r13218) [NoAI] -Add: added a [S/E/P/W/I] in front of DEBUG messages from AILog, to indicate the level of message (the one that goes to the stdout) (request by Mchl)
/* $Id$ */

/** @file ai_town.cpp Implementation of AITown. */

#include "ai_town.hpp"
#include "ai_map.hpp"
#include "../../openttd.h"
#include "../../town.h"
#include "../../strings_func.h"
#include "../../core/alloc_func.hpp"
#include "table/strings.h"

/* static */ TownID AITown::GetMaxTownID()
{
	return ::GetMaxTownIndex();
}

/* static */ int32 AITown::GetTownCount()
{
	return ::GetNumTowns();
}

/* static */ bool AITown::IsValidTown(TownID town_id)
{
	return ::IsValidTownID(town_id);
}

/* static */ char *AITown::GetName(TownID town_id)
{
	if (!IsValidTown(town_id)) return NULL;
	static const int len = 64;
	char *town_name = MallocT<char>(len);

	::SetDParam(0, town_id);
	::GetString(town_name, STR_TOWN, &town_name[len - 1]);

	return town_name;
}

/* static */ int32 AITown::GetPopulation(TownID town_id)
{
	if (!IsValidTown(town_id)) return -1;
	const Town *t = ::GetTown(town_id);
	return t->population;
}

/* static */ TileIndex AITown::GetLocation(TownID town_id)
{
	if (!IsValidTown(town_id)) return INVALID_TILE;
	const Town *t = ::GetTown(town_id);
	return t->xy;
}

/* static */ int32 AITown::GetDistanceManhattanToTile(TownID town_id, TileIndex tile)
{
	return AIMap::DistanceManhattan(tile, GetLocation(town_id));
}

/* static */ int32 AITown::GetDistanceSquareToTile(TownID town_id, TileIndex tile)
{
	return AIMap::DistanceSquare(tile, GetLocation(town_id));
}

/* static */ bool AITown::IsWithinTownInfluence(TownID town_id, TileIndex tile)
{
	const Town *t = ::GetTown(town_id);
	return ((uint32)GetDistanceSquareToTile(town_id, tile) <= t->squared_town_zone_radius[0]);
}