src/ai/api/ai_event_types.hpp
branchnoai
changeset 9682 d031eb183733
child 9821 4ee8e5126dd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ai/api/ai_event_types.hpp	Thu Jul 19 22:39:43 2007 +0000
@@ -0,0 +1,93 @@
+/* $Id$ */
+
+/** @file ai_event_types.hpp The detailed types of all events */
+
+#ifndef AI_EVENT_TYPES_HPP
+#define AI_EVENT_TYPES_HPP
+
+#include "ai_object.hpp"
+#include "ai_event.hpp"
+
+/**
+ * A simple test event, to see if the event system is working. Triggered via
+ *  AIEventController::Test();
+ */
+class AIEventTest : public AIEvent {
+public:
+	/**
+	 * The name of the class, needed by several sub-processes.
+	 */
+	static const char *GetClassName() { return "AIEventTest"; }
+
+	/**
+	 * Constructor for this event class.
+	 */
+	AIEventTest(uint test) :
+		AIEvent(AI_ET_TEST),
+		test(test)
+	{}
+
+	/**
+	 * Convert an AIEvent to the real instance.
+	 */
+	static AIEventTest *Convert(AIEvent *instance) { return (AIEventTest *)instance; }
+
+	/**
+	 * Return the test value.
+	 */
+	uint GetTest() { return this->test; }
+
+private:
+	uint test;
+};
+
+/**
+ * A vehicle crashed, and because of that this event is triggered.
+ *  It contains both the crash site as the vehicle crashed. It has a nice
+ *  helper that creates a new vehicle in a depot with the same type
+ *  and orders as the crashed one. In case the vehicle type isn't available
+ *  anymore, it will find the next best.
+ */
+class AIEventVehicleCrash : public AIEvent {
+public:
+	/**
+	 * The name of the class, needed by several sub-processes.
+	 */
+	static const char *GetClassName() { return "AIEventVehicleCrash"; }
+
+	/**
+	 * Constructor for this event class.
+	 */
+	AIEventVehicleCrash(VehicleID vehicle, TileIndex crash_site) :
+		AIEvent(AI_ET_CRASHED_VEHICLE),
+		crash_site(crash_site),
+		vehicle(vehicle)
+	{}
+
+	/**
+	 * Convert an AIEvent to the real instance.
+	 */
+	static AIEventVehicleCrash *Convert(AIEvent *instance) { return (AIEventVehicleCrash *)instance; }
+
+	/**
+	 * Get the vehicleID of the crashed vehicle.
+	 */
+	VehicleID GetVehicleID() { return vehicle; }
+
+	/**
+	 * Find the tile the vehicle crashed.
+	 */
+	TileIndex GetCrashSite() { return crash_site; }
+
+	/**
+	 * Clone the crashed vehicle and send it on its way again/
+	 * @param depot the depot to build the vehicle in.
+	 */
+	bool CloneCrashedVehicle(TileIndex depot);
+
+private:
+	TileIndex crash_site;
+	VehicleID vehicle;
+};
+
+#endif /* AI_EVENT_TYPES_HPP */