diff --git a/src/script/api/script_engine.cpp b/src/script/api/script_engine.cpp index 088b692925..10a49131c9 100644 --- a/src/script/api/script_engine.cpp +++ b/src/script/api/script_engine.cpp @@ -10,6 +10,7 @@ #include "../../stdafx.h" #include "script_engine.hpp" #include "script_cargo.hpp" +#include "script_timemode.hpp" #include "../../company_base.h" #include "../../strings_func.h" #include "../../rail.h" @@ -128,12 +129,14 @@ return ::Engine::Get(engine_id)->GetCost(); } -/* static */ SQInteger ScriptEngine::GetMaxAge(EngineID engine_id) +/* static */ ScriptDate::Date ScriptEngine::GetMaxAge(EngineID engine_id) { - if (!IsValidEngine(engine_id)) return -1; - if (GetVehicleType(engine_id) == ScriptVehicle::VT_RAIL && IsWagon(engine_id)) return -1; + if (!IsValidEngine(engine_id)) return ScriptDate::DATE_INVALID; + if (GetVehicleType(engine_id) == ScriptVehicle::VT_RAIL && IsWagon(engine_id)) return ScriptDate::DATE_INVALID; - return ::Engine::Get(engine_id)->GetLifeLengthInDays().base(); + if (ScriptTimeMode::IsCalendarMode()) return (ScriptDate::Date)::Engine::Get(engine_id)->GetLifeLengthInDays().base(); + + return (ScriptDate::Date)(::Engine::Get(engine_id)->GetLifeLengthInDays().base() * std::max(_settings_game.economy.minutes_per_calendar_year, CalendarTime::DEF_MINUTES_PER_YEAR) / CalendarTime::DEF_MINUTES_PER_YEAR); } /* static */ Money ScriptEngine::GetRunningCost(EngineID engine_id) diff --git a/src/script/api/script_engine.hpp b/src/script/api/script_engine.hpp index 2baed5bec3..7ec835d0be 100644 --- a/src/script/api/script_engine.hpp +++ b/src/script/api/script_engine.hpp @@ -128,7 +128,7 @@ public: * @returns The maximum age of a new engine in days. * @note Age is in days; divide by 366 to get per year. */ - static SQInteger GetMaxAge(EngineID engine_id); + static ScriptDate::Date GetMaxAge(EngineID engine_id); /** * Get the running cost of an engine. diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp index 1fd0857bc4..05b640446f 100644 --- a/src/script/api/script_vehicle.cpp +++ b/src/script/api/script_vehicle.cpp @@ -13,6 +13,7 @@ #include "script_gamesettings.hpp" #include "script_group.hpp" #include "script_map.hpp" +#include "script_timemode.hpp" #include "../script_instance.hpp" #include "../../string_func.h" #include "../../strings_func.h" @@ -307,37 +308,43 @@ return GetString(STR_VEHICLE_NAME); } -/* static */ SQInteger ScriptVehicle::GetAge(VehicleID vehicle_id) +/* static */ ScriptDate::Date ScriptVehicle::GetAge(VehicleID vehicle_id) { - if (!IsValidVehicle(vehicle_id)) return -1; + if (!IsValidVehicle(vehicle_id)) return ScriptDate::DATE_INVALID; - return ::Vehicle::Get(vehicle_id)->age.base(); + if (ScriptTimeMode::IsCalendarMode()) return (ScriptDate::Date)::Vehicle::Get(vehicle_id)->age.base(); + + return (ScriptDate::Date)::Vehicle::Get(vehicle_id)->economy_age.base(); } -/* static */ SQInteger ScriptVehicle::GetWagonAge(VehicleID vehicle_id, SQInteger wagon) +/* static */ ScriptDate::Date ScriptVehicle::GetWagonAge(VehicleID vehicle_id, SQInteger wagon) { - if (!IsValidVehicle(vehicle_id)) return -1; - if (wagon >= GetNumWagons(vehicle_id)) return -1; + if (!IsValidVehicle(vehicle_id)) return ScriptDate::DATE_INVALID; + if (wagon >= GetNumWagons(vehicle_id)) return ScriptDate::DATE_INVALID; const Vehicle *v = ::Vehicle::Get(vehicle_id); if (v->type == VEH_TRAIN) { while (wagon-- > 0) v = ::Train::From(v)->GetNextUnit(); } - return v->age.base(); + if (ScriptTimeMode::IsCalendarMode()) return (ScriptDate::Date)v->age.base(); + + return (ScriptDate::Date)v->economy_age.base(); } -/* static */ SQInteger ScriptVehicle::GetMaxAge(VehicleID vehicle_id) +/* static */ ScriptDate::Date ScriptVehicle::GetMaxAge(VehicleID vehicle_id) { - if (!IsPrimaryVehicle(vehicle_id)) return -1; + if (!IsPrimaryVehicle(vehicle_id)) return ScriptDate::DATE_INVALID; - return ::Vehicle::Get(vehicle_id)->max_age.base(); + if (ScriptTimeMode::IsCalendarMode()) return (ScriptDate::Date)::Vehicle::Get(vehicle_id)->max_age.base(); + + return (ScriptDate::Date)(::Vehicle::Get(vehicle_id)->max_age.base() * std::max(_settings_game.economy.minutes_per_calendar_year, CalendarTime::DEF_MINUTES_PER_YEAR) / CalendarTime::DEF_MINUTES_PER_YEAR); } -/* static */ SQInteger ScriptVehicle::GetAgeLeft(VehicleID vehicle_id) +/* static */ ScriptDate::Date ScriptVehicle::GetAgeLeft(VehicleID vehicle_id) { - if (!IsPrimaryVehicle(vehicle_id)) return -1; + if (!IsPrimaryVehicle(vehicle_id)) return ScriptDate::DATE_INVALID; - return (::Vehicle::Get(vehicle_id)->max_age - ::Vehicle::Get(vehicle_id)->age).base(); + return (ScriptDate::Date)(GetMaxAge(vehicle_id) - GetAge(vehicle_id)); } /* static */ SQInteger ScriptVehicle::GetCurrentSpeed(VehicleID vehicle_id) diff --git a/src/script/api/script_vehicle.hpp b/src/script/api/script_vehicle.hpp index bd6d79ebcc..2dc1b8e488 100644 --- a/src/script/api/script_vehicle.hpp +++ b/src/script/api/script_vehicle.hpp @@ -11,6 +11,7 @@ #define SCRIPT_VEHICLE_HPP #include "script_road.hpp" +#include "script_date.hpp" /** * Class that handles all vehicle related functions. @@ -189,7 +190,7 @@ public: * @return The current age the vehicle has. * @note The age is in days. */ - static SQInteger GetAge(VehicleID vehicle_id); + static ScriptDate::Date GetAge(VehicleID vehicle_id); /** * Get the current age of a second (or third, etc.) engine in a train vehicle. @@ -200,7 +201,7 @@ public: * @return The current age the vehicle has. * @note The age is in days. */ - static SQInteger GetWagonAge(VehicleID vehicle_id, SQInteger wagon); + static ScriptDate::Date GetWagonAge(VehicleID vehicle_id, SQInteger wagon); /** * Get the maximum age of a vehicle. @@ -209,7 +210,7 @@ public: * @return The maximum age the vehicle has. * @note The age is in days. */ - static SQInteger GetMaxAge(VehicleID vehicle_id); + static ScriptDate::Date GetMaxAge(VehicleID vehicle_id); /** * Get the age a vehicle has left (maximum - current). @@ -218,7 +219,7 @@ public: * @return The age the vehicle has left. * @note The age is in days. */ - static SQInteger GetAgeLeft(VehicleID vehicle_id); + static ScriptDate::Date GetAgeLeft(VehicleID vehicle_id); /** * Get the current speed of a vehicle.