diff options
Diffstat (limited to 'src/ai/api')
-rw-r--r-- | src/ai/api/ai_changelog.hpp | 2 | ||||
-rw-r--r-- | src/ai/api/ai_subsidy.cpp | 19 | ||||
-rw-r--r-- | src/ai/api/ai_subsidy.hpp | 16 |
3 files changed, 23 insertions, 14 deletions
diff --git a/src/ai/api/ai_changelog.hpp b/src/ai/api/ai_changelog.hpp index 5750ab0ac..a8e511030 100644 --- a/src/ai/api/ai_changelog.hpp +++ b/src/ai/api/ai_changelog.hpp @@ -29,6 +29,8 @@ * \li WaypointID was replaced by StationID. All WaypointIDs from previous * savegames are invalid * \li WAYPOINT_INVALID is now deprecated, use STATION_INVALID instead + * \li AISubsidy::GetSource and AISubsidy::GetDestination return STATION_INVALID + * for awarded subsidies * \li AIs can create subclasses of API classes and use API constants as part * of their own constants * \li AIVehicleList_Station now also works for waypoints diff --git a/src/ai/api/ai_subsidy.cpp b/src/ai/api/ai_subsidy.cpp index fd3e29745..39358e963 100644 --- a/src/ai/api/ai_subsidy.cpp +++ b/src/ai/api/ai_subsidy.cpp @@ -4,6 +4,7 @@ #include "ai_subsidy.hpp" #include "ai_date.hpp" +#include "ai_log.hpp" #include "../../subsidy_base.h" #include "../../station_base.h" #include "../../cargotype.h" @@ -24,7 +25,7 @@ { if (!IsAwarded(subsidy_id)) return AICompany::COMPANY_INVALID; - return (AICompany::CompanyID)((byte)::Station::Get(::Subsidy::Get(subsidy_id)->src)->owner); + return (AICompany::CompanyID)((byte)::Subsidy::Get(subsidy_id)->awarded); } /* static */ int32 AISubsidy::GetExpireDate(SubsidyID subsidy_id) @@ -34,11 +35,7 @@ int year = AIDate::GetYear(AIDate::GetCurrentDate()); int month = AIDate::GetMonth(AIDate::GetCurrentDate()); - if (IsAwarded(subsidy_id)) { - month += 24 - ::Subsidy::Get(subsidy_id)->age; - } else { - month += 12 - ::Subsidy::Get(subsidy_id)->age; - } + month += ::Subsidy::Get(subsidy_id)->remaining; year += (month - 1) / 12; month = ((month - 1) % 12) + 1; @@ -64,6 +61,11 @@ { if (!IsValidSubsidy(subsidy_id)) return INVALID_STATION; + if (IsAwarded(subsidy_id)) { + AILog::Error("AISubsidy::GetSource returned INVALID_STATION due to internal changes in the Subsidy logic."); + return INVALID_STATION; + } + return ::Subsidy::Get(subsidy_id)->src; } @@ -78,5 +80,10 @@ { if (!IsValidSubsidy(subsidy_id)) return INVALID_STATION; + if (IsAwarded(subsidy_id)) { + AILog::Error("AISubsidy::GetDestination returned INVALID_STATION due to internal changes in the Subsidy logic."); + return INVALID_STATION; + } + return ::Subsidy::Get(subsidy_id)->dst; } diff --git a/src/ai/api/ai_subsidy.hpp b/src/ai/api/ai_subsidy.hpp index 7be86b0e8..96ad92c31 100644 --- a/src/ai/api/ai_subsidy.hpp +++ b/src/ai/api/ai_subsidy.hpp @@ -69,12 +69,12 @@ public: /** * Return the source TownID/IndustryID/StationID the subsidy is for. - * 1) IsAwarded(subsidy_id) -> return the StationID the subsidy is awarded to. - * 2) !IsAwarded(subsidy_id) && SourceIsTown(subsidy_id) -> return the TownID. - * 3) !IsAwarded(subsidy_id) && !SourceIsTown(subsidy_id) -> return the IndustryID. + * \li IsAwarded(subsidy_id) -> return INVALID_STATION. + * \li !IsAwarded(subsidy_id) && SourceIsTown(subsidy_id) -> return the TownID. + * \li !IsAwarded(subsidy_id) && !SourceIsTown(subsidy_id) -> return the IndustryID. * @param subsidy_id The SubsidyID to check. * @pre IsValidSubsidy(subsidy_id). - * @return One of TownID/IndustryID/StationID. + * @return One of TownID/IndustryID/INVALID_STATION. */ static int32 GetSource(SubsidyID subsidy_id); @@ -88,12 +88,12 @@ public: /** * Return the destination TownID/IndustryID/StationID the subsidy is for. - * 1) IsAwarded(subsidy_id) -> return the StationID the subsidy is awarded to. - * 2) !IsAwarded(subsidy_id) && SourceIsTown(subsidy_id) -> return the TownID. - * 3) !IsAwarded(subsidy_id) && !SourceIsTown(subsidy_id) -> return the IndustryID. + * \li IsAwarded(subsidy_id) -> return INVALID_STATION. + * \li !IsAwarded(subsidy_id) && DestinationIsTown(subsidy_id) -> return the TownID. + * \li !IsAwarded(subsidy_id) && !DestinationIsTown(subsidy_id) -> return the IndustryID. * @param subsidy_id the SubsidyID to check. * @pre IsValidSubsidy(subsidy_id). - * @return One of TownID/IndustryID/StationID. + * @return One of TownID/IndustryID/INVALID_STATION. */ static int32 GetDestination(SubsidyID subsidy_id); }; |