summaryrefslogtreecommitdiff
path: root/src/script/api/script_event.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/script/api/script_event.hpp')
-rw-r--r--src/script/api/script_event.hpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/script/api/script_event.hpp b/src/script/api/script_event.hpp
new file mode 100644
index 000000000..449ee0361
--- /dev/null
+++ b/src/script/api/script_event.hpp
@@ -0,0 +1,114 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file script_event.hpp Everything to handle events from the game. */
+
+#ifndef SCRIPT_EVENT_HPP
+#define SCRIPT_EVENT_HPP
+
+#include "script_object.hpp"
+
+/**
+ * Class that handles all event related functions.
+ * You can lookup the type, and than convert it to the real event-class.
+ * That way you can request more detailed information about the event.
+ */
+class AIEvent : public AIObject {
+public:
+ /**
+ * The type of event. Needed to lookup the detailed class.
+ */
+ enum AIEventType {
+ AI_ET_INVALID = 0,
+ AI_ET_TEST,
+ AI_ET_SUBSIDY_OFFER,
+ AI_ET_SUBSIDY_OFFER_EXPIRED,
+ AI_ET_SUBSIDY_AWARDED,
+ AI_ET_SUBSIDY_EXPIRED,
+ AI_ET_ENGINE_PREVIEW,
+ AI_ET_COMPANY_NEW,
+ AI_ET_COMPANY_IN_TROUBLE,
+ AI_ET_COMPANY_ASK_MERGER,
+ AI_ET_COMPANY_MERGER,
+ AI_ET_COMPANY_BANKRUPT,
+ AI_ET_VEHICLE_CRASHED,
+ AI_ET_VEHICLE_LOST,
+ AI_ET_VEHICLE_WAITING_IN_DEPOT,
+ AI_ET_VEHICLE_UNPROFITABLE,
+ AI_ET_INDUSTRY_OPEN,
+ AI_ET_INDUSTRY_CLOSE,
+ AI_ET_ENGINE_AVAILABLE,
+ AI_ET_STATION_FIRST_VEHICLE,
+ AI_ET_DISASTER_ZEPPELINER_CRASHED,
+ AI_ET_DISASTER_ZEPPELINER_CLEARED,
+ AI_ET_TOWN_FOUNDED,
+ };
+
+ /**
+ * Constructor of AIEvent, to get the type of event.
+ */
+ AIEvent(AIEvent::AIEventType type) :
+ type(type)
+ {}
+
+ /**
+ * Get the event-type.
+ * @return The @c AIEventType.
+ */
+ AIEventType GetEventType() { return this->type; }
+
+protected:
+ /**
+ * The type of this event.
+ */
+ AIEventType type;
+};
+
+/**
+ * Class that handles all event related functions.
+ * @note it is not needed to create an instance of AIEvent to access it, as
+ * all members are static, and all data is stored AI-wide.
+ */
+class AIEventController : public AIObject {
+public:
+ /**
+ * Check if there is an event waiting.
+ * @return true if there is an event on the stack.
+ */
+ static bool IsEventWaiting();
+
+ /**
+ * Get the next event.
+ * @return a class of the event-child issues.
+ */
+ static AIEvent *GetNextEvent();
+
+#ifndef EXPORT_SKIP
+ /**
+ * Insert an event to the queue for the company.
+ * @param event The event to insert.
+ * @note DO NOT CALL YOURSELF; leave it to the internal AI programming.
+ */
+ static void InsertEvent(AIEvent *event);
+
+ /**
+ * Free the event pointer.
+ * @note DO NOT CALL YOURSELF; leave it to the internal AI programming.
+ */
+ static void FreeEventPointer();
+#endif /* EXPORT_SKIP */
+
+private:
+ /**
+ * Create the event pointer.
+ */
+ static void CreateEventPointer();
+};
+
+#endif /* SCRIPT_EVENT_HPP */