script_event_types.hpp

Go to the documentation of this file.
00001 /* $Id: script_event_types.hpp 23631 2011-12-19 21:05:14Z truebrain $ */
00002 
00003 /*
00004  * This file is part of OpenTTD.
00005  * 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.
00006  * 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.
00007  * 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/>.
00008  */
00009 
00012 #ifndef SCRIPT_EVENT_TYPES_HPP
00013 #define SCRIPT_EVENT_TYPES_HPP
00014 
00015 #include "script_event.hpp"
00016 #include "script_company.hpp"
00017 #include "script_window.hpp"
00018 
00024 class ScriptEventVehicleCrashed : public ScriptEvent {
00025 public:
00029   enum CrashReason {
00030     CRASH_TRAIN,                
00031     CRASH_RV_LEVEL_CROSSING,    
00032     CRASH_RV_UFO,               
00033     CRASH_PLANE_LANDING,        
00034     CRASH_AIRCRAFT_NO_AIRPORT,  
00035     CRASH_FLOODED,              
00036   };
00037 
00043   ScriptEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason) :
00044     ScriptEvent(ET_VEHICLE_CRASHED),
00045     crash_site(crash_site),
00046     vehicle(vehicle),
00047     crash_reason(crash_reason)
00048   {}
00049 
00055   static ScriptEventVehicleCrashed *Convert(ScriptEvent *instance) { return (ScriptEventVehicleCrashed *)instance; }
00056 
00061   VehicleID GetVehicleID() { return this->vehicle; }
00062 
00067   TileIndex GetCrashSite() { return this->crash_site; }
00068 
00073   CrashReason GetCrashReason() { return this->crash_reason; }
00074 
00075 private:
00076   TileIndex crash_site;     
00077   VehicleID vehicle;        
00078   CrashReason crash_reason; 
00079 };
00080 
00085 class ScriptEventSubsidyOffer : public ScriptEvent {
00086 public:
00090   ScriptEventSubsidyOffer(SubsidyID subsidy_id) :
00091     ScriptEvent(ET_SUBSIDY_OFFER),
00092     subsidy_id(subsidy_id)
00093   {}
00094 
00100   static ScriptEventSubsidyOffer *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyOffer *)instance; }
00101 
00106   SubsidyID GetSubsidyID() { return this->subsidy_id; }
00107 
00108 private:
00109   SubsidyID subsidy_id; 
00110 };
00111 
00116 class ScriptEventSubsidyOfferExpired : public ScriptEvent {
00117 public:
00121   ScriptEventSubsidyOfferExpired(SubsidyID subsidy_id) :
00122     ScriptEvent(ET_SUBSIDY_OFFER_EXPIRED),
00123     subsidy_id(subsidy_id)
00124   {}
00125 
00131   static ScriptEventSubsidyOfferExpired *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyOfferExpired *)instance; }
00132 
00137   SubsidyID GetSubsidyID() { return this->subsidy_id; }
00138 
00139 private:
00140   SubsidyID subsidy_id; 
00141 };
00142 
00147 class ScriptEventSubsidyAwarded : public ScriptEvent {
00148 public:
00152   ScriptEventSubsidyAwarded(SubsidyID subsidy_id) :
00153     ScriptEvent(ET_SUBSIDY_AWARDED),
00154     subsidy_id(subsidy_id)
00155   {}
00156 
00162   static ScriptEventSubsidyAwarded *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyAwarded *)instance; }
00163 
00168   SubsidyID GetSubsidyID() { return this->subsidy_id; }
00169 
00170 private:
00171   SubsidyID subsidy_id; 
00172 };
00173 
00178 class ScriptEventSubsidyExpired : public ScriptEvent {
00179 public:
00183   ScriptEventSubsidyExpired(SubsidyID subsidy_id) :
00184     ScriptEvent(ET_SUBSIDY_EXPIRED),
00185     subsidy_id(subsidy_id)
00186   {}
00187 
00193   static ScriptEventSubsidyExpired *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyExpired *)instance; }
00194 
00199    SubsidyID GetSubsidyID() { return this->subsidy_id; }
00200 
00201 private:
00202   SubsidyID subsidy_id; 
00203 };
00204 
00211 class ScriptEventEnginePreview : public ScriptEvent {
00212 public:
00216   ScriptEventEnginePreview(EngineID engine) :
00217     ScriptEvent(ET_ENGINE_PREVIEW),
00218     engine(engine)
00219   {}
00220 
00226   static ScriptEventEnginePreview *Convert(ScriptEvent *instance) { return (ScriptEventEnginePreview *)instance; }
00227 
00232   char *GetName();
00233 
00239   CargoID GetCargoType();
00240 
00246   int32 GetCapacity();
00247 
00255   int32 GetMaxSpeed();
00256 
00261   Money GetPrice();
00262 
00268   Money GetRunningCost();
00269 
00274 #ifdef DOXYGEN_API
00275   ScriptVehicle::VehicleType GetVehicleType();
00276 #else
00277   int32 GetVehicleType();
00278 #endif /* DOXYGEN_API */
00279 
00284   bool AcceptPreview();
00285 
00286 private:
00287   EngineID engine; 
00288 
00293   bool IsEngineValid() const;
00294 };
00295 
00300 class ScriptEventCompanyNew : public ScriptEvent {
00301 public:
00305   ScriptEventCompanyNew(Owner owner) :
00306     ScriptEvent(ET_COMPANY_NEW),
00307     owner((ScriptCompany::CompanyID)owner)
00308   {}
00309 
00315   static ScriptEventCompanyNew *Convert(ScriptEvent *instance) { return (ScriptEventCompanyNew *)instance; }
00316 
00321   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00322 
00323 private:
00324   ScriptCompany::CompanyID owner; 
00325 };
00326 
00332 class ScriptEventCompanyInTrouble : public ScriptEvent {
00333 public:
00337   ScriptEventCompanyInTrouble(Owner owner) :
00338     ScriptEvent(ET_COMPANY_IN_TROUBLE),
00339     owner((ScriptCompany::CompanyID)owner)
00340   {}
00341 
00347   static ScriptEventCompanyInTrouble *Convert(ScriptEvent *instance) { return (ScriptEventCompanyInTrouble *)instance; }
00348 
00353   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00354 
00355 private:
00356   ScriptCompany::CompanyID owner; 
00357 };
00358 
00363 class ScriptEventCompanyAskMerger : public ScriptEvent {
00364 public:
00369   ScriptEventCompanyAskMerger(Owner owner, int32 value) :
00370     ScriptEvent(ET_COMPANY_ASK_MERGER),
00371     owner((ScriptCompany::CompanyID)owner),
00372     value(value)
00373   {}
00374 
00380   static ScriptEventCompanyAskMerger *Convert(ScriptEvent *instance) { return (ScriptEventCompanyAskMerger *)instance; }
00381 
00387   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00388 
00393   int32 GetValue() { return this->value; }
00394 
00399   bool AcceptMerger();
00400 
00401 private:
00402   ScriptCompany::CompanyID owner; 
00403   int32 value;                
00404 };
00405 
00411 class ScriptEventCompanyMerger : public ScriptEvent {
00412 public:
00417   ScriptEventCompanyMerger(Owner old_owner, Owner new_owner) :
00418     ScriptEvent(ET_COMPANY_MERGER),
00419     old_owner((ScriptCompany::CompanyID)old_owner),
00420     new_owner((ScriptCompany::CompanyID)new_owner)
00421   {}
00422 
00428   static ScriptEventCompanyMerger *Convert(ScriptEvent *instance) { return (ScriptEventCompanyMerger *)instance; }
00429 
00437   ScriptCompany::CompanyID GetOldCompanyID() { return this->old_owner; }
00438 
00443   ScriptCompany::CompanyID GetNewCompanyID() { return this->new_owner; }
00444 
00445 private:
00446   ScriptCompany::CompanyID old_owner; 
00447   ScriptCompany::CompanyID new_owner; 
00448 };
00449 
00454 class ScriptEventCompanyBankrupt : public ScriptEvent {
00455 public:
00459   ScriptEventCompanyBankrupt(Owner owner) :
00460     ScriptEvent(ET_COMPANY_BANKRUPT),
00461     owner((ScriptCompany::CompanyID)owner)
00462   {}
00463 
00469   static ScriptEventCompanyBankrupt *Convert(ScriptEvent *instance) { return (ScriptEventCompanyBankrupt *)instance; }
00470 
00475   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00476 
00477 private:
00478   ScriptCompany::CompanyID owner; 
00479 };
00480 
00485 class ScriptEventVehicleLost : public ScriptEvent {
00486 public:
00490   ScriptEventVehicleLost(VehicleID vehicle_id) :
00491     ScriptEvent(ET_VEHICLE_LOST),
00492     vehicle_id(vehicle_id)
00493   {}
00494 
00500   static ScriptEventVehicleLost *Convert(ScriptEvent *instance) { return (ScriptEventVehicleLost *)instance; }
00501 
00506   VehicleID GetVehicleID() { return this->vehicle_id; }
00507 
00508 private:
00509   VehicleID vehicle_id; 
00510 };
00511 
00516 class ScriptEventVehicleWaitingInDepot : public ScriptEvent {
00517 public:
00521   ScriptEventVehicleWaitingInDepot(VehicleID vehicle_id) :
00522     ScriptEvent(ET_VEHICLE_WAITING_IN_DEPOT),
00523     vehicle_id(vehicle_id)
00524   {}
00525 
00531   static ScriptEventVehicleWaitingInDepot *Convert(ScriptEvent *instance) { return (ScriptEventVehicleWaitingInDepot *)instance; }
00532 
00537   VehicleID GetVehicleID() { return this->vehicle_id; }
00538 
00539 private:
00540   VehicleID vehicle_id; 
00541 };
00542 
00547 class ScriptEventVehicleUnprofitable : public ScriptEvent {
00548 public:
00552   ScriptEventVehicleUnprofitable(VehicleID vehicle_id) :
00553     ScriptEvent(ET_VEHICLE_UNPROFITABLE),
00554     vehicle_id(vehicle_id)
00555   {}
00556 
00562   static ScriptEventVehicleUnprofitable *Convert(ScriptEvent *instance) { return (ScriptEventVehicleUnprofitable *)instance; }
00563 
00568   VehicleID GetVehicleID() { return this->vehicle_id; }
00569 
00570 private:
00571   VehicleID vehicle_id; 
00572 };
00573 
00578 class ScriptEventIndustryOpen : public ScriptEvent {
00579 public:
00583   ScriptEventIndustryOpen(IndustryID industry_id) :
00584     ScriptEvent(ET_INDUSTRY_OPEN),
00585     industry_id(industry_id)
00586   {}
00587 
00593   static ScriptEventIndustryOpen *Convert(ScriptEvent *instance) { return (ScriptEventIndustryOpen *)instance; }
00594 
00599   IndustryID GetIndustryID() { return this->industry_id; }
00600 
00601 private:
00602   IndustryID industry_id; 
00603 };
00604 
00609 class ScriptEventIndustryClose : public ScriptEvent {
00610 public:
00614   ScriptEventIndustryClose(IndustryID industry_id) :
00615     ScriptEvent(ET_INDUSTRY_CLOSE),
00616     industry_id(industry_id)
00617   {}
00618 
00624   static ScriptEventIndustryClose *Convert(ScriptEvent *instance) { return (ScriptEventIndustryClose *)instance; }
00625 
00630   IndustryID GetIndustryID() { return this->industry_id; }
00631 
00632 private:
00633   IndustryID industry_id; 
00634 };
00635 
00640 class ScriptEventEngineAvailable : public ScriptEvent {
00641 public:
00645   ScriptEventEngineAvailable(EngineID engine) :
00646     ScriptEvent(ET_ENGINE_AVAILABLE),
00647     engine(engine)
00648   {}
00649 
00655   static ScriptEventEngineAvailable *Convert(ScriptEvent *instance) { return (ScriptEventEngineAvailable *)instance; }
00656 
00661   EngineID GetEngineID() { return this->engine; }
00662 
00663 private:
00664   EngineID engine; 
00665 };
00666 
00671 class ScriptEventStationFirstVehicle : public ScriptEvent {
00672 public:
00677   ScriptEventStationFirstVehicle(StationID station, VehicleID vehicle) :
00678     ScriptEvent(ET_STATION_FIRST_VEHICLE),
00679     station(station),
00680     vehicle(vehicle)
00681   {}
00682 
00688   static ScriptEventStationFirstVehicle *Convert(ScriptEvent *instance) { return (ScriptEventStationFirstVehicle *)instance; }
00689 
00694   StationID GetStationID() { return this->station; }
00695 
00700   VehicleID GetVehicleID() { return this->vehicle; }
00701 
00702 private:
00703   StationID station; 
00704   VehicleID vehicle; 
00705 };
00706 
00711 class ScriptEventDisasterZeppelinerCrashed : public ScriptEvent {
00712 public:
00716   ScriptEventDisasterZeppelinerCrashed(StationID station) :
00717     ScriptEvent(ET_DISASTER_ZEPPELINER_CRASHED),
00718     station(station)
00719   {}
00720 
00726   static ScriptEventDisasterZeppelinerCrashed *Convert(ScriptEvent *instance) { return (ScriptEventDisasterZeppelinerCrashed *)instance; }
00727 
00732   StationID GetStationID() { return this->station; }
00733 
00734 private:
00735   StationID station; 
00736 };
00737 
00742 class ScriptEventDisasterZeppelinerCleared : public ScriptEvent {
00743 public:
00747   ScriptEventDisasterZeppelinerCleared(StationID station) :
00748     ScriptEvent(ET_DISASTER_ZEPPELINER_CLEARED),
00749     station(station)
00750   {}
00751 
00757   static ScriptEventDisasterZeppelinerCleared *Convert(ScriptEvent *instance) { return (ScriptEventDisasterZeppelinerCleared *)instance; }
00758 
00763   StationID GetStationID() { return this->station; }
00764 
00765 private:
00766   StationID station; 
00767 };
00768 
00773 class ScriptEventTownFounded : public ScriptEvent {
00774 public:
00778   ScriptEventTownFounded(TownID town) :
00779     ScriptEvent(ET_TOWN_FOUNDED),
00780     town(town)
00781   {}
00782 
00788   static ScriptEventTownFounded *Convert(ScriptEvent *instance) { return (ScriptEventTownFounded *)instance; }
00789 
00794   TownID GetTownID() { return this->town; }
00795 
00796 private:
00797   TownID town; 
00798 };
00799 
00806 class ScriptEventAircraftDestTooFar : public ScriptEvent {
00807 public:
00811   ScriptEventAircraftDestTooFar(VehicleID vehicle_id) :
00812     ScriptEvent(ET_AIRCRAFT_DEST_TOO_FAR),
00813     vehicle_id(vehicle_id)
00814   {}
00815 
00821   static ScriptEventAircraftDestTooFar *Convert(ScriptEvent *instance) { return (ScriptEventAircraftDestTooFar *)instance; }
00822 
00827   VehicleID GetVehicleID() { return this->vehicle_id; }
00828 
00829 private:
00830   VehicleID vehicle_id; 
00831 };
00832 
00837 class ScriptEventAdminPort : public ScriptEvent {
00838 public:
00842   ScriptEventAdminPort(const char *json) :
00843     ScriptEvent(ET_ADMIN_PORT),
00844     json(strdup(json))
00845   {}
00846 
00847   ~ScriptEventAdminPort()
00848   {
00849     free(this->json);
00850   }
00851 
00857   static ScriptEventAdminPort *Convert(ScriptEvent *instance) { return (ScriptEventAdminPort *)instance; }
00858 
00862   SQInteger GetObject(HSQUIRRELVM vm);
00863 
00864 private:
00865   char *json; 
00866 
00872   char *ReadTable(HSQUIRRELVM vm, char *p);
00873 
00879   char *ReadValue(HSQUIRRELVM vm, char *p);
00880 
00886   char *ReadString(HSQUIRRELVM vm, char *p);
00887 };
00888 
00893 class ScriptEventWindowWidgetClick : public ScriptEvent {
00894 public:
00900   ScriptEventWindowWidgetClick(ScriptWindow::WindowClass window, uint32 number, uint8 widget) :
00901     ScriptEvent(ET_WINDOW_WIDGET_CLICK),
00902     window(window),
00903     number(number),
00904     widget(widget)
00905   {}
00906 
00912   static ScriptEventWindowWidgetClick *Convert(ScriptEvent *instance) { return (ScriptEventWindowWidgetClick *)instance; }
00913 
00917   ScriptWindow::WindowClass GetWindowClass() { return this->window; }
00918 
00922   uint32 GetWindowNumber() { return this->number; }
00923 
00927   uint8 GetWidgetNumber() { return this->widget; }
00928 
00929 private:
00930   ScriptWindow::WindowClass window; 
00931   uint32 number;                    
00932   uint8 widget;                     
00933 };
00934 
00935 #endif /* SCRIPT_EVENT_TYPES_HPP */