rubidium@9405: /* $Id$ */ rubidium@9405: truebrain@9833: /** @file ai_industry.cpp Implementation of AIIndustry. */ rubidium@9405: rubidium@9430: #include "ai_industry.hpp" truelight@9649: #include "ai_cargo.hpp" truebrain@9814: #include "ai_map.hpp" rubidium@9430: #include "../../industry.h" rubidium@9723: #include "../../strings_func.h" rubidium@9405: #include "table/strings.h" rubidium@9405: truebrain@9737: /* static */ IndustryID AIIndustry::GetMaxIndustryID() rubidium@9405: { rubidium@9405: return ::GetMaxIndustryIndex(); rubidium@9405: } rubidium@9405: truebrain@9737: /* static */ int32 AIIndustry::GetIndustryCount() rubidium@9405: { rubidium@9405: return ::GetNumIndustries(); rubidium@9405: } rubidium@9405: rubidium@9497: /* static */ bool AIIndustry::IsValidIndustry(IndustryID industry_id) rubidium@9405: { rubidium@9405: return ::IsValidIndustryID(industry_id); rubidium@9405: } rubidium@9405: truebrain@9737: /* static */ char *AIIndustry::GetName(IndustryID industry_id) rubidium@9405: { truebrain@9736: if (!IsValidIndustry(industry_id)) return NULL; rubidium@9405: static const int len = 64; rubidium@9405: char *industry_name = MallocT(len); rubidium@9405: truebrain@9736: ::SetDParam(0, industry_id); truebrain@9736: ::GetString(industry_name, STR_INDUSTRY, &industry_name[len - 1]); rubidium@9405: rubidium@9405: return industry_name; rubidium@9405: } rubidium@9405: truelight@9650: /* static */ int32 AIIndustry::GetProduction(IndustryID industry_id, CargoID cargo_id) rubidium@9405: { truebrain@9736: if (!IsValidIndustry(industry_id)) return -1; truelight@9649: if (!AICargo::IsValidCargo(cargo_id)) return -1; truelight@9649: rubidium@9405: const Industry *i = ::GetIndustry(industry_id); truebrain@9736: const IndustrySpec *indsp = ::GetIndustrySpec(i->type); truelight@9649: truebrain@9795: for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) truebrain@9798: if (indsp->produced_cargo[j] == cargo_id) return i->production_rate[j] * 8; truebrain@9795: truelight@9649: return -1; rubidium@9405: } truelight@9649: truelight@9710: /* static */ bool AIIndustry::IsCargoAccepted(IndustryID industry_id, CargoID cargo_id) truelight@9710: { truebrain@9736: if (!IsValidIndustry(industry_id)) return false; truelight@9710: if (!AICargo::IsValidCargo(cargo_id)) return false; truelight@9710: truelight@9710: const Industry *i = ::GetIndustry(industry_id); truebrain@9736: const IndustrySpec *indsp = ::GetIndustrySpec(i->type); truelight@9710: truebrain@9795: for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) truebrain@9795: if (indsp->accepts_cargo[j] == cargo_id) return true; truelight@9710: truelight@9710: return false; truelight@9710: } truelight@9710: truelight@9649: /* static */ TileIndex AIIndustry::GetLocation(IndustryID industry_id) truelight@9649: { truebrain@9736: if (!IsValidIndustry(industry_id)) return INVALID_TILE; truelight@9649: return ::GetIndustry(industry_id)->xy; truelight@9649: } truebrain@9810: truebrain@9810: /* static */ uint16 AIIndustry::GetLastMonthProduction(IndustryID industry_id, CargoID cargo_id) truebrain@9810: { truebrain@9810: if (!IsValidIndustry(industry_id)) return false; truebrain@9810: if (!AICargo::IsValidCargo(cargo_id)) return false; truebrain@9810: truebrain@9810: const Industry *i = ::GetIndustry(industry_id); truebrain@9810: const IndustrySpec *indsp = ::GetIndustrySpec(i->type); truebrain@9810: truebrain@9810: for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) truebrain@9810: if (indsp->produced_cargo[j] == cargo_id) return i->last_month_production[j]; truebrain@9810: truebrain@9810: return false; truebrain@9810: } truebrain@9810: truebrain@9810: /* static */ uint16 AIIndustry::GetLastMonthTransported(IndustryID industry_id, CargoID cargo_id) truebrain@9810: { truebrain@9810: if (!IsValidIndustry(industry_id)) return false; truebrain@9810: if (!AICargo::IsValidCargo(cargo_id)) return false; truebrain@9810: truebrain@9810: const Industry *i = ::GetIndustry(industry_id); truebrain@9810: const IndustrySpec *indsp = ::GetIndustrySpec(i->type); truebrain@9810: truebrain@9810: for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) truebrain@9810: if (indsp->produced_cargo[j] == cargo_id) return i->last_month_transported[j]; truebrain@9810: truebrain@9810: return false; truebrain@9810: } truebrain@9814: truebrain@9814: /* static */ int32 AIIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile) truebrain@9814: { truebrain@9814: return AIMap::DistanceManhattan(tile, GetLocation(industry_id)); truebrain@9814: } truebrain@9814: truebrain@9814: /* static */ int32 AIIndustry::GetDistanceSquareToTile(IndustryID industry_id, TileIndex tile) truebrain@9814: { truebrain@9814: return AIMap::DistanceSquare(tile, GetLocation(industry_id)); truebrain@9814: }