truebrain@10344: /* $Id$ */ truebrain@10344: truebrain@10344: /** @file ai_subsidy.cpp Implementation of AISubsidy. */ truebrain@10344: truebrain@10344: #include "ai_subsidy.hpp" truebrain@10344: #include "ai_error.hpp" truebrain@10344: #include "ai_company.hpp" truebrain@10344: #include "ai_date.hpp" truebrain@10344: #include "../../openttd.h" truebrain@10344: #include "../../economy_func.h" truebrain@10344: #include "../../station_base.h" truebrain@10344: #include "../../cargotype.h" truebrain@10344: truebrain@10344: /* static */ bool AISubsidy::IsValidSubsidy(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: return subsidy_id < lengthof(_subsidies) && _subsidies[subsidy_id].cargo_type != CT_INVALID; truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ bool AISubsidy::IsAwarded(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id)) return false; truebrain@10344: truebrain@10344: return _subsidies[subsidy_id].age >= 12; truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ AICompany::CompanyIndex AISubsidy::GetAwardedTo(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsAwarded(subsidy_id)) return AICompany::INVALID_COMPANY; truebrain@10344: truebrain@10344: return (AICompany::CompanyIndex)((byte)GetStation(_subsidies[subsidy_id].from)->owner); truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ int32 AISubsidy::GetExpireDate(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id)) return -1; truebrain@10344: truebrain@10344: int year = AIDate::GetYear(AIDate::GetCurrentDate()); truebrain@10344: int month = AIDate::GetMonth(AIDate::GetCurrentDate()); truebrain@10344: truebrain@10344: if (IsAwarded(subsidy_id)) { truebrain@10344: month += 24 - _subsidies[subsidy_id].age; truebrain@10344: } else { truebrain@10344: month += 12 - _subsidies[subsidy_id].age; truebrain@10344: } truebrain@10344: rubidium@10353: year += (month - 1) / 12; rubidium@10353: month = ((month - 1) % 12) + 1; truebrain@10344: truebrain@10344: return AIDate::GetDate(year, month, 1); truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ CargoID AISubsidy::GetCargoType(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id)) return CT_INVALID; truebrain@10344: truebrain@10344: return _subsidies[subsidy_id].cargo_type; truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ bool AISubsidy::SourceIsTown(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id) || IsAwarded(subsidy_id)) return false; truebrain@10344: truebrain@10344: return GetCargo(GetCargoType(subsidy_id))->town_effect == TE_PASSENGERS || truebrain@10344: GetCargo(GetCargoType(subsidy_id))->town_effect == TE_MAIL; truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ int32 AISubsidy::GetSource(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id)) return INVALID_STATION; truebrain@10344: truebrain@10344: return _subsidies[subsidy_id].from; truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ bool AISubsidy::DestinationIsTown(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id) || IsAwarded(subsidy_id)) return false; truebrain@10344: truebrain@10344: switch (GetCargo(GetCargoType(subsidy_id))->town_effect) { truebrain@10344: case TE_PASSENGERS: truebrain@10344: case TE_MAIL: truebrain@10344: case TE_GOODS: truebrain@10344: case TE_FOOD: truebrain@10344: return true; truebrain@10344: default: truebrain@10344: return false; truebrain@10344: } truebrain@10344: } truebrain@10344: truebrain@10344: /* static */ int32 AISubsidy::GetDestination(SubsidyID subsidy_id) truebrain@10344: { truebrain@10344: if (!IsValidSubsidy(subsidy_id)) return INVALID_STATION; truebrain@10344: truebrain@10344: return _subsidies[subsidy_id].to; truebrain@10344: }