summaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorzuu <zuu@openttd.org>2014-02-06 19:50:34 +0000
committerzuu <zuu@openttd.org>2014-02-06 19:50:34 +0000
commit96030141026ded3f892510ff9e3643319f27ebd8 (patch)
treee6e7475076685c561a7d1ff9e1161dbdc56d5f8b /src/script
parent1dbd59e6ab9a917214d98c53a8ab8ca5b0d47223 (diff)
downloadopenttd-96030141026ded3f892510ff9e3643319f27ebd8.tar.xz
(svn r26307) -Add: [nogo] Allow GS to hide story page date
Diffstat (limited to 'src/script')
-rw-r--r--src/script/api/ai/ai_date.hpp.sq3
-rw-r--r--src/script/api/ai_changelog.hpp2
-rw-r--r--src/script/api/game/game_date.hpp.sq3
-rw-r--r--src/script/api/game_changelog.hpp2
-rw-r--r--src/script/api/script_basestation.cpp6
-rw-r--r--src/script/api/script_basestation.hpp3
-rw-r--r--src/script/api/script_date.cpp31
-rw-r--r--src/script/api/script_date.hpp26
-rw-r--r--src/script/api/script_engine.cpp6
-rw-r--r--src/script/api/script_engine.hpp3
-rw-r--r--src/script/api/script_story_page.cpp9
-rw-r--r--src/script/api/script_story_page.hpp7
-rw-r--r--src/script/api/script_subsidy.cpp4
-rw-r--r--src/script/api/script_subsidy.hpp3
-rw-r--r--src/script/api/template/template_date.hpp.sq4
15 files changed, 76 insertions, 36 deletions
diff --git a/src/script/api/ai/ai_date.hpp.sq b/src/script/api/ai/ai_date.hpp.sq
index 3210a6950..7bdf9519d 100644
--- a/src/script/api/ai/ai_date.hpp.sq
+++ b/src/script/api/ai/ai_date.hpp.sq
@@ -21,6 +21,9 @@ void SQAIDate_Register(Squirrel *engine)
SQAIDate.PreRegister(engine);
SQAIDate.AddConstructor<void (ScriptDate::*)(), 1>(engine, "x");
+ SQAIDate.DefSQConst(engine, ScriptDate::DATE_INVALID, "DATE_INVALID");
+
+ SQAIDate.DefSQStaticMethod(engine, &ScriptDate::IsValidDate, "IsValidDate", 2, ".i");
SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetCurrentDate, "GetCurrentDate", 1, ".");
SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetYear, "GetYear", 2, ".i");
SQAIDate.DefSQStaticMethod(engine, &ScriptDate::GetMonth, "GetMonth", 2, ".i");
diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp
index a40996c0f..5c9baa616 100644
--- a/src/script/api/ai_changelog.hpp
+++ b/src/script/api/ai_changelog.hpp
@@ -20,6 +20,8 @@
* 1.4.0 is not yet released. The following changes are not set in stone yet.
*
* API additions:
+ * \li AIDate::DATE_INVALID
+ * \li AIDate::IsValidDate
* \li AIStation::HasCargoRating
* \li AITile::GetTerrainType
* \li AITown::FoundTown
diff --git a/src/script/api/game/game_date.hpp.sq b/src/script/api/game/game_date.hpp.sq
index 43af86afa..dc40989da 100644
--- a/src/script/api/game/game_date.hpp.sq
+++ b/src/script/api/game/game_date.hpp.sq
@@ -21,6 +21,9 @@ void SQGSDate_Register(Squirrel *engine)
SQGSDate.PreRegister(engine);
SQGSDate.AddConstructor<void (ScriptDate::*)(), 1>(engine, "x");
+ SQGSDate.DefSQConst(engine, ScriptDate::DATE_INVALID, "DATE_INVALID");
+
+ SQGSDate.DefSQStaticMethod(engine, &ScriptDate::IsValidDate, "IsValidDate", 2, ".i");
SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetCurrentDate, "GetCurrentDate", 1, ".");
SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetYear, "GetYear", 2, ".i");
SQGSDate.DefSQStaticMethod(engine, &ScriptDate::GetMonth, "GetMonth", 2, ".i");
diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp
index 20a28edcd..4ce320514 100644
--- a/src/script/api/game_changelog.hpp
+++ b/src/script/api/game_changelog.hpp
@@ -21,6 +21,8 @@
*
* API additions:
* \li GSCompany::ChangeBankBalance
+ * \li GSDate::DATE_INVALID
+ * \li GSDate::IsValidDate
* \li GSGoal::GT_STORY_PAGE
* \li GSGoal::IsCompleted
* \li GSGoal::SetCompleted
diff --git a/src/script/api/script_basestation.cpp b/src/script/api/script_basestation.cpp
index d46d717a0..5134243a9 100644
--- a/src/script/api/script_basestation.cpp
+++ b/src/script/api/script_basestation.cpp
@@ -52,9 +52,9 @@
return ::BaseStation::Get(station_id)->xy;
}
-/* static */ int32 ScriptBaseStation::GetConstructionDate(StationID station_id)
+/* static */ ScriptDate::Date ScriptBaseStation::GetConstructionDate(StationID station_id)
{
- if (!IsValidBaseStation(station_id)) return -1;
+ if (!IsValidBaseStation(station_id)) return ScriptDate::DATE_INVALID;
- return ::BaseStation::Get(station_id)->build_date;
+ return (ScriptDate::Date)::BaseStation::Get(station_id)->build_date;
}
diff --git a/src/script/api/script_basestation.hpp b/src/script/api/script_basestation.hpp
index e61028079..9676829f6 100644
--- a/src/script/api/script_basestation.hpp
+++ b/src/script/api/script_basestation.hpp
@@ -13,6 +13,7 @@
#define SCRIPT_BASESTATION_HPP
#include "script_text.hpp"
+#include "script_date.hpp"
/**
* Base class for stations and waypoints.
@@ -73,7 +74,7 @@ public:
* @param station_id The station to look at.
* @return The last date some part of this station was build.
*/
- static int32 GetConstructionDate(StationID station_id);
+ static ScriptDate::Date GetConstructionDate(StationID station_id);
};
#endif /* SCRIPT_BASESTATION_HPP */
diff --git a/src/script/api/script_date.cpp b/src/script/api/script_date.cpp
index 1f80b40d7..6ff92deba 100644
--- a/src/script/api/script_date.cpp
+++ b/src/script/api/script_date.cpp
@@ -14,45 +14,50 @@
#include "script_date.hpp"
#include "../../date_func.h"
-/* static */ int32 ScriptDate::GetCurrentDate()
+/* static */ bool ScriptDate::IsValidDate(Date date)
{
- return ::_date;
+ return date >= 0;
}
-/* static */ int32 ScriptDate::GetYear(int32 date)
+/* static */ ScriptDate::Date ScriptDate::GetCurrentDate()
{
- if (date < 0) return -1;
+ return (ScriptDate::Date)_date;
+}
+
+/* static */ int32 ScriptDate::GetYear(ScriptDate::Date date)
+{
+ if (date < 0) return DATE_INVALID;
::YearMonthDay ymd;
::ConvertDateToYMD(date, &ymd);
return ymd.year;
}
-/* static */ int32 ScriptDate::GetMonth(int32 date)
+/* static */ int32 ScriptDate::GetMonth(ScriptDate::Date date)
{
- if (date < 0) return -1;
+ if (date < 0) return DATE_INVALID;
::YearMonthDay ymd;
::ConvertDateToYMD(date, &ymd);
return ymd.month + 1;
}
-/* static */ int32 ScriptDate::GetDayOfMonth(int32 date)
+/* static */ int32 ScriptDate::GetDayOfMonth(ScriptDate::Date date)
{
- if (date < 0) return -1;
+ if (date < 0) return DATE_INVALID;
::YearMonthDay ymd;
::ConvertDateToYMD(date, &ymd);
return ymd.day;
}
-/* static */ int32 ScriptDate::GetDate(int32 year, int32 month, int32 day_of_month)
+/* static */ ScriptDate::Date ScriptDate::GetDate(int32 year, int32 month, int32 day_of_month)
{
- if (month < 1 || month > 12) return -1;
- if (day_of_month < 1 || day_of_month > 31) return -1;
- if (year < 0 || year > MAX_YEAR) return -1;
+ if (month < 1 || month > 12) return DATE_INVALID;
+ if (day_of_month < 1 || day_of_month > 31) return DATE_INVALID;
+ if (year < 0 || year > MAX_YEAR) return DATE_INVALID;
- return ::ConvertYMDToDate(year, month - 1, day_of_month);
+ return (ScriptDate::Date)::ConvertYMDToDate(year, month - 1, day_of_month);
}
/* static */ int32 ScriptDate::GetSystemTime()
diff --git a/src/script/api/script_date.hpp b/src/script/api/script_date.hpp
index 488e35eda..b402b0a2b 100644
--- a/src/script/api/script_date.hpp
+++ b/src/script/api/script_date.hpp
@@ -13,6 +13,7 @@
#define SCRIPT_DATE_HPP
#include "script_object.hpp"
+#include "../../date_type.h"
/**
* Class that handles all date related (calculation) functions.
@@ -28,34 +29,49 @@
class ScriptDate : public ScriptObject {
public:
/**
+ * Date data type is an integer value. Use ScriptDate::GetDate to
+ * compose valid date values for a known year, month and day.
+ */
+ enum Date {
+ DATE_INVALID = ::INVALID_DATE, ///< A value representing an invalid date.
+ };
+
+ /**
+ * Validates if a date value represent a valid date.
+ * @param date The date to validate.
+ * @return True if the date is valid, otherwise false
+ */
+ static bool IsValidDate(Date date);
+
+ /**
* Get the current date.
* This is the number of days since epoch under the assumption that
* there is a leap year every 4 years, except when dividable by
* 100 but not by 400.
* @return The current date.
*/
- static int32 GetCurrentDate();
+ static Date GetCurrentDate();
/**
* Get the year of the given date.
* @param date The date to get the year of.
* @return The year.
*/
- static int32 GetYear(int32 date);
+ static int32 GetYear(Date date);
/**
* Get the month of the given date.
* @param date The date to get the month of.
* @return The month.
*/
- static int32 GetMonth(int32 date);
+ static int32 GetMonth(Date date);
/**
* Get the day (of the month) of the given date.
* @param date The date to get the day of.
* @return The day.
*/
- static int32 GetDayOfMonth(int32 date);
+ static int32 GetDayOfMonth(Date date);
/**
* Get the date given a year, month and day of month.
@@ -64,7 +80,7 @@ public:
* @param day_of_month The day of month of the to-be determined date.
* @return The date.
*/
- static int32 GetDate(int32 year, int32 month, int32 day_of_month);
+ static Date GetDate(int32 year, int32 month, int32 day_of_month);
/**
* Get the time of the host system.
diff --git a/src/script/api/script_engine.cpp b/src/script/api/script_engine.cpp
index a34d0910f..138628547 100644
--- a/src/script/api/script_engine.cpp
+++ b/src/script/api/script_engine.cpp
@@ -171,11 +171,11 @@
return ::Engine::Get(engine_id)->GetDisplayMaxTractiveEffort();
}
-/* static */ int32 ScriptEngine::GetDesignDate(EngineID engine_id)
+/* static */ ScriptDate::Date ScriptEngine::GetDesignDate(EngineID engine_id)
{
- if (!IsValidEngine(engine_id)) return -1;
+ if (!IsValidEngine(engine_id)) return ScriptDate::DATE_INVALID;
- return ::Engine::Get(engine_id)->intro_date;
+ return (ScriptDate::Date)::Engine::Get(engine_id)->intro_date;
}
/* static */ ScriptVehicle::VehicleType ScriptEngine::GetVehicleType(EngineID engine_id)
diff --git a/src/script/api/script_engine.hpp b/src/script/api/script_engine.hpp
index 058d23082..5f703e159 100644
--- a/src/script/api/script_engine.hpp
+++ b/src/script/api/script_engine.hpp
@@ -15,6 +15,7 @@
#include "script_vehicle.hpp"
#include "script_rail.hpp"
#include "script_airport.hpp"
+#include "script_date.hpp"
/**
* Class that handles all engine related functions.
@@ -174,7 +175,7 @@ public:
* @pre IsValidEngine(engine_id).
* @return The date this engine was designed.
*/
- static int32 GetDesignDate(EngineID engine_id);
+ static ScriptDate::Date GetDesignDate(EngineID engine_id);
/**
* Get the type of an engine.
diff --git a/src/script/api/script_story_page.cpp b/src/script/api/script_story_page.cpp
index 034cfdf2a..17b7b8273 100644
--- a/src/script/api/script_story_page.cpp
+++ b/src/script/api/script_story_page.cpp
@@ -132,14 +132,15 @@
return company;
}
-/* static */ int32 ScriptStoryPage::GetDate(StoryPageID story_page_id)
+/* static */ ScriptDate::Date ScriptStoryPage::GetDate(StoryPageID story_page_id)
{
- EnforcePrecondition(-1, IsValidStoryPage(story_page_id));
+ EnforcePrecondition(ScriptDate::DATE_INVALID, IsValidStoryPage(story_page_id));
+ EnforcePrecondition(ScriptDate::DATE_INVALID, ScriptObject::GetCompany() == OWNER_DEITY);
- return StoryPage::Get(story_page_id)->date;
+ return (ScriptDate::Date)StoryPage::Get(story_page_id)->date;
}
-/* static */ bool ScriptStoryPage::SetDate(StoryPageID story_page_id, int32 date)
+/* static */ bool ScriptStoryPage::SetDate(StoryPageID story_page_id, ScriptDate::Date date)
{
EnforcePrecondition(false, IsValidStoryPage(story_page_id));
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
diff --git a/src/script/api/script_story_page.hpp b/src/script/api/script_story_page.hpp
index 49d4a639a..c22d4c198 100644
--- a/src/script/api/script_story_page.hpp
+++ b/src/script/api/script_story_page.hpp
@@ -13,6 +13,7 @@
#define SCRIPT_STORY_HPP
#include "script_company.hpp"
+#include "script_date.hpp"
#include "../../story_type.h"
#include "../../story_base.h"
@@ -154,17 +155,17 @@ public:
* @return The date
* @pre IsValidStoryPage(story_page_id).
*/
- static int32 GetDate(StoryPageID story_page_id);
+ static ScriptDate::Date GetDate(StoryPageID story_page_id);
/**
* Update date of a story page. The date is shown in the top left of the page
* @param story_page_id The story page to set the date for.
- * @param date Page date (@see ScriptDate)
+ * @param date Date to display at the top of story page or ScriptDate::DATE_INVALID to disable showing date on this page. (also, @see ScriptDate)
* @return True if the action succeeded.
* @pre No ScriptCompanyMode may be in scope.
* @pre IsValidStoryPage(story_page_id).
*/
- static bool SetDate(StoryPageID story_page_id, int32 date);
+ static bool SetDate(StoryPageID story_page_id, ScriptDate::Date date);
/**
* Update title of a story page. The title is shown in the page selector drop down.
diff --git a/src/script/api/script_subsidy.cpp b/src/script/api/script_subsidy.cpp
index 8ec074d4d..146ba690d 100644
--- a/src/script/api/script_subsidy.cpp
+++ b/src/script/api/script_subsidy.cpp
@@ -48,9 +48,9 @@
return (ScriptCompany::CompanyID)((byte)::Subsidy::Get(subsidy_id)->awarded);
}
-/* static */ int32 ScriptSubsidy::GetExpireDate(SubsidyID subsidy_id)
+/* static */ ScriptDate::Date ScriptSubsidy::GetExpireDate(SubsidyID subsidy_id)
{
- if (!IsValidSubsidy(subsidy_id)) return -1;
+ if (!IsValidSubsidy(subsidy_id)) return ScriptDate::DATE_INVALID;
int year = ScriptDate::GetYear(ScriptDate::GetCurrentDate());
int month = ScriptDate::GetMonth(ScriptDate::GetCurrentDate());
diff --git a/src/script/api/script_subsidy.hpp b/src/script/api/script_subsidy.hpp
index 3069ad918..16a679440 100644
--- a/src/script/api/script_subsidy.hpp
+++ b/src/script/api/script_subsidy.hpp
@@ -13,6 +13,7 @@
#define SCRIPT_SUBSIDY_HPP
#include "script_company.hpp"
+#include "script_date.hpp"
/**
* Class that handles all subsidy related functions.
@@ -83,7 +84,7 @@ public:
* @note The return value of this function will change if the subsidy is
* awarded.
*/
- static int32 GetExpireDate(SubsidyID subsidy_id);
+ static ScriptDate::Date GetExpireDate(SubsidyID subsidy_id);
/**
* Get the cargo type that has to be transported in order to be awarded this
diff --git a/src/script/api/template/template_date.hpp.sq b/src/script/api/template/template_date.hpp.sq
index 976ddb7a5..cca4a258b 100644
--- a/src/script/api/template/template_date.hpp.sq
+++ b/src/script/api/template/template_date.hpp.sq
@@ -12,6 +12,10 @@
#include "../script_date.hpp"
namespace SQConvert {
+ /* Allow enums to be used as Squirrel parameters */
+ template <> inline ScriptDate::Date GetParam(ForceType<ScriptDate::Date>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptDate::Date)tmp; }
+ template <> inline int Return<ScriptDate::Date>(HSQUIRRELVM vm, ScriptDate::Date res) { sq_pushinteger(vm, (int32)res); return 1; }
+
/* Allow ScriptDate to be used as Squirrel parameter */
template <> inline ScriptDate *GetParam(ForceType<ScriptDate *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (ScriptDate *)instance; }
template <> inline ScriptDate &GetParam(ForceType<ScriptDate &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptDate *)instance; }