script_event_types.hpp

Go to the documentation of this file.
00001 /* $Id$ */
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 
00023 class ScriptEventVehicleCrashed : public ScriptEvent {
00024 public:
00028   enum CrashReason {
00029     CRASH_TRAIN,                
00030     CRASH_RV_LEVEL_CROSSING,    
00031     CRASH_RV_UFO,               
00032     CRASH_PLANE_LANDING,        
00033     CRASH_AIRCRAFT_NO_AIRPORT,  
00034     CRASH_FLOODED,              
00035   };
00036 
00042   ScriptEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason) :
00043     ScriptEvent(ET_VEHICLE_CRASHED),
00044     crash_site(crash_site),
00045     vehicle(vehicle),
00046     crash_reason(crash_reason)
00047   {}
00048 
00054   static ScriptEventVehicleCrashed *Convert(ScriptEvent *instance) { return (ScriptEventVehicleCrashed *)instance; }
00055 
00060   VehicleID GetVehicleID() { return this->vehicle; }
00061 
00066   TileIndex GetCrashSite() { return this->crash_site; }
00067 
00072   CrashReason GetCrashReason() { return this->crash_reason; }
00073 
00074 private:
00075   TileIndex crash_site;     
00076   VehicleID vehicle;        
00077   CrashReason crash_reason; 
00078 };
00079 
00084 class ScriptEventSubsidyOffer : public ScriptEvent {
00085 public:
00089   ScriptEventSubsidyOffer(SubsidyID subsidy_id) :
00090     ScriptEvent(ET_SUBSIDY_OFFER),
00091     subsidy_id(subsidy_id)
00092   {}
00093 
00099   static ScriptEventSubsidyOffer *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyOffer *)instance; }
00100 
00105   SubsidyID GetSubsidyID() { return this->subsidy_id; }
00106 
00107 private:
00108   SubsidyID subsidy_id; 
00109 };
00110 
00115 class ScriptEventSubsidyOfferExpired : public ScriptEvent {
00116 public:
00120   ScriptEventSubsidyOfferExpired(SubsidyID subsidy_id) :
00121     ScriptEvent(ET_SUBSIDY_OFFER_EXPIRED),
00122     subsidy_id(subsidy_id)
00123   {}
00124 
00130   static ScriptEventSubsidyOfferExpired *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyOfferExpired *)instance; }
00131 
00136   SubsidyID GetSubsidyID() { return this->subsidy_id; }
00137 
00138 private:
00139   SubsidyID subsidy_id; 
00140 };
00141 
00146 class ScriptEventSubsidyAwarded : public ScriptEvent {
00147 public:
00151   ScriptEventSubsidyAwarded(SubsidyID subsidy_id) :
00152     ScriptEvent(ET_SUBSIDY_AWARDED),
00153     subsidy_id(subsidy_id)
00154   {}
00155 
00161   static ScriptEventSubsidyAwarded *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyAwarded *)instance; }
00162 
00167   SubsidyID GetSubsidyID() { return this->subsidy_id; }
00168 
00169 private:
00170   SubsidyID subsidy_id; 
00171 };
00172 
00177 class ScriptEventSubsidyExpired : public ScriptEvent {
00178 public:
00182   ScriptEventSubsidyExpired(SubsidyID subsidy_id) :
00183     ScriptEvent(ET_SUBSIDY_EXPIRED),
00184     subsidy_id(subsidy_id)
00185   {}
00186 
00192   static ScriptEventSubsidyExpired *Convert(ScriptEvent *instance) { return (ScriptEventSubsidyExpired *)instance; }
00193 
00198    SubsidyID GetSubsidyID() { return this->subsidy_id; }
00199 
00200 private:
00201   SubsidyID subsidy_id; 
00202 };
00203 
00210 class ScriptEventEnginePreview : public ScriptEvent {
00211 public:
00215   ScriptEventEnginePreview(EngineID engine) :
00216     ScriptEvent(ET_ENGINE_PREVIEW),
00217     engine(engine)
00218   {}
00219 
00225   static ScriptEventEnginePreview *Convert(ScriptEvent *instance) { return (ScriptEventEnginePreview *)instance; }
00226 
00231   char *GetName();
00232 
00238   CargoID GetCargoType();
00239 
00245   int32 GetCapacity();
00246 
00254   int32 GetMaxSpeed();
00255 
00260   Money GetPrice();
00261 
00267   Money GetRunningCost();
00268 
00273 #ifdef DOXYGEN_API
00274   ScriptVehicle::VehicleType GetVehicleType();
00275 #else
00276   int32 GetVehicleType();
00277 #endif /* DOXYGEN_API */
00278 
00283   bool AcceptPreview();
00284 
00285 private:
00286   EngineID engine; 
00287 
00292   bool IsEngineValid() const;
00293 };
00294 
00299 class ScriptEventCompanyNew : public ScriptEvent {
00300 public:
00304   ScriptEventCompanyNew(Owner owner) :
00305     ScriptEvent(ET_COMPANY_NEW),
00306     owner((ScriptCompany::CompanyID)owner)
00307   {}
00308 
00314   static ScriptEventCompanyNew *Convert(ScriptEvent *instance) { return (ScriptEventCompanyNew *)instance; }
00315 
00320   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00321 
00322 private:
00323   ScriptCompany::CompanyID owner; 
00324 };
00325 
00331 class ScriptEventCompanyInTrouble : public ScriptEvent {
00332 public:
00336   ScriptEventCompanyInTrouble(Owner owner) :
00337     ScriptEvent(ET_COMPANY_IN_TROUBLE),
00338     owner((ScriptCompany::CompanyID)owner)
00339   {}
00340 
00346   static ScriptEventCompanyInTrouble *Convert(ScriptEvent *instance) { return (ScriptEventCompanyInTrouble *)instance; }
00347 
00352   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00353 
00354 private:
00355   ScriptCompany::CompanyID owner; 
00356 };
00357 
00362 class ScriptEventCompanyAskMerger : public ScriptEvent {
00363 public:
00368   ScriptEventCompanyAskMerger(Owner owner, int32 value) :
00369     ScriptEvent(ET_COMPANY_ASK_MERGER),
00370     owner((ScriptCompany::CompanyID)owner),
00371     value(value)
00372   {}
00373 
00379   static ScriptEventCompanyAskMerger *Convert(ScriptEvent *instance) { return (ScriptEventCompanyAskMerger *)instance; }
00380 
00386   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00387 
00392   int32 GetValue() { return this->value; }
00393 
00398   bool AcceptMerger();
00399 
00400 private:
00401   ScriptCompany::CompanyID owner; 
00402   int32 value;                
00403 };
00404 
00410 class ScriptEventCompanyMerger : public ScriptEvent {
00411 public:
00416   ScriptEventCompanyMerger(Owner old_owner, Owner new_owner) :
00417     ScriptEvent(ET_COMPANY_MERGER),
00418     old_owner((ScriptCompany::CompanyID)old_owner),
00419     new_owner((ScriptCompany::CompanyID)new_owner)
00420   {}
00421 
00427   static ScriptEventCompanyMerger *Convert(ScriptEvent *instance) { return (ScriptEventCompanyMerger *)instance; }
00428 
00436   ScriptCompany::CompanyID GetOldCompanyID() { return this->old_owner; }
00437 
00442   ScriptCompany::CompanyID GetNewCompanyID() { return this->new_owner; }
00443 
00444 private:
00445   ScriptCompany::CompanyID old_owner; 
00446   ScriptCompany::CompanyID new_owner; 
00447 };
00448 
00453 class ScriptEventCompanyBankrupt : public ScriptEvent {
00454 public:
00458   ScriptEventCompanyBankrupt(Owner owner) :
00459     ScriptEvent(ET_COMPANY_BANKRUPT),
00460     owner((ScriptCompany::CompanyID)owner)
00461   {}
00462 
00468   static ScriptEventCompanyBankrupt *Convert(ScriptEvent *instance) { return (ScriptEventCompanyBankrupt *)instance; }
00469 
00474   ScriptCompany::CompanyID GetCompanyID() { return this->owner; }
00475 
00476 private:
00477   ScriptCompany::CompanyID owner; 
00478 };
00479 
00484 class ScriptEventVehicleLost : public ScriptEvent {
00485 public:
00489   ScriptEventVehicleLost(VehicleID vehicle_id) :
00490     ScriptEvent(ET_VEHICLE_LOST),
00491     vehicle_id(vehicle_id)
00492   {}
00493 
00499   static ScriptEventVehicleLost *Convert(ScriptEvent *instance) { return (ScriptEventVehicleLost *)instance; }
00500 
00505   VehicleID GetVehicleID() { return this->vehicle_id; }
00506 
00507 private:
00508   VehicleID vehicle_id; 
00509 };
00510 
00515 class ScriptEventVehicleWaitingInDepot : public ScriptEvent {
00516 public:
00520   ScriptEventVehicleWaitingInDepot(VehicleID vehicle_id) :
00521     ScriptEvent(ET_VEHICLE_WAITING_IN_DEPOT),
00522     vehicle_id(vehicle_id)
00523   {}
00524 
00530   static ScriptEventVehicleWaitingInDepot *Convert(ScriptEvent *instance) { return (ScriptEventVehicleWaitingInDepot *)instance; }
00531 
00536   VehicleID GetVehicleID() { return this->vehicle_id; }
00537 
00538 private:
00539   VehicleID vehicle_id; 
00540 };
00541 
00546 class ScriptEventVehicleUnprofitable : public ScriptEvent {
00547 public:
00551   ScriptEventVehicleUnprofitable(VehicleID vehicle_id) :
00552     ScriptEvent(ET_VEHICLE_UNPROFITABLE),
00553     vehicle_id(vehicle_id)
00554   {}
00555 
00561   static ScriptEventVehicleUnprofitable *Convert(ScriptEvent *instance) { return (ScriptEventVehicleUnprofitable *)instance; }
00562 
00567   VehicleID GetVehicleID() { return this->vehicle_id; }
00568 
00569 private:
00570   VehicleID vehicle_id; 
00571 };
00572 
00577 class ScriptEventIndustryOpen : public ScriptEvent {
00578 public:
00582   ScriptEventIndustryOpen(IndustryID industry_id) :
00583     ScriptEvent(ET_INDUSTRY_OPEN),
00584     industry_id(industry_id)
00585   {}
00586 
00592   static ScriptEventIndustryOpen *Convert(ScriptEvent *instance) { return (ScriptEventIndustryOpen *)instance; }
00593 
00598   IndustryID GetIndustryID() { return this->industry_id; }
00599 
00600 private:
00601   IndustryID industry_id; 
00602 };
00603 
00608 class ScriptEventIndustryClose : public ScriptEvent {
00609 public:
00613   ScriptEventIndustryClose(IndustryID industry_id) :
00614     ScriptEvent(ET_INDUSTRY_CLOSE),
00615     industry_id(industry_id)
00616   {}
00617 
00623   static ScriptEventIndustryClose *Convert(ScriptEvent *instance) { return (ScriptEventIndustryClose *)instance; }
00624 
00629   IndustryID GetIndustryID() { return this->industry_id; }
00630 
00631 private:
00632   IndustryID industry_id; 
00633 };
00634 
00639 class ScriptEventEngineAvailable : public ScriptEvent {
00640 public:
00644   ScriptEventEngineAvailable(EngineID engine) :
00645     ScriptEvent(ET_ENGINE_AVAILABLE),
00646     engine(engine)
00647   {}
00648 
00654   static ScriptEventEngineAvailable *Convert(ScriptEvent *instance) { return (ScriptEventEngineAvailable *)instance; }
00655 
00660   EngineID GetEngineID() { return this->engine; }
00661 
00662 private:
00663   EngineID engine; 
00664 };
00665 
00670 class ScriptEventStationFirstVehicle : public ScriptEvent {
00671 public:
00676   ScriptEventStationFirstVehicle(StationID station, VehicleID vehicle) :
00677     ScriptEvent(ET_STATION_FIRST_VEHICLE),
00678     station(station),
00679     vehicle(vehicle)
00680   {}
00681 
00687   static ScriptEventStationFirstVehicle *Convert(ScriptEvent *instance) { return (ScriptEventStationFirstVehicle *)instance; }
00688 
00693   StationID GetStationID() { return this->station; }
00694 
00699   VehicleID GetVehicleID() { return this->vehicle; }
00700 
00701 private:
00702   StationID station; 
00703   VehicleID vehicle; 
00704 };
00705 
00710 class ScriptEventDisasterZeppelinerCrashed : public ScriptEvent {
00711 public:
00715   ScriptEventDisasterZeppelinerCrashed(StationID station) :
00716     ScriptEvent(ET_DISASTER_ZEPPELINER_CRASHED),
00717     station(station)
00718   {}
00719 
00725   static ScriptEventDisasterZeppelinerCrashed *Convert(ScriptEvent *instance) { return (ScriptEventDisasterZeppelinerCrashed *)instance; }
00726 
00731   StationID GetStationID() { return this->station; }
00732 
00733 private:
00734   StationID station; 
00735 };
00736 
00741 class ScriptEventDisasterZeppelinerCleared : public ScriptEvent {
00742 public:
00746   ScriptEventDisasterZeppelinerCleared(StationID station) :
00747     ScriptEvent(ET_DISASTER_ZEPPELINER_CLEARED),
00748     station(station)
00749   {}
00750 
00756   static ScriptEventDisasterZeppelinerCleared *Convert(ScriptEvent *instance) { return (ScriptEventDisasterZeppelinerCleared *)instance; }
00757 
00762   StationID GetStationID() { return this->station; }
00763 
00764 private:
00765   StationID station; 
00766 };
00767 
00772 class ScriptEventTownFounded : public ScriptEvent {
00773 public:
00777   ScriptEventTownFounded(TownID town) :
00778     ScriptEvent(ET_TOWN_FOUNDED),
00779     town(town)
00780   {}
00781 
00787   static ScriptEventTownFounded *Convert(ScriptEvent *instance) { return (ScriptEventTownFounded *)instance; }
00788 
00793   TownID GetTownID() { return this->town; }
00794 
00795 private:
00796   TownID town; 
00797 };
00798 
00799 #endif /* SCRIPT_EVENT_TYPES_HPP */