# ai_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 AI_EVENT_TYPES_HPP
    00013 #define AI_EVENT_TYPES_HPP
    00014
    00015 #include "ai_event.hpp"
    00016 #include "ai_company.hpp"
    00017
    00022 class AIEventVehicleCrashed : public AIEvent {
    00023 public:
    00025   static const char *GetClassName() { return "AIEventVehicleCrashed"; }
    00026
    00030   enum CrashReason {
    00031     CRASH_TRAIN,
    00032     CRASH_RV_LEVEL_CROSSING,
    00033     CRASH_RV_UFO,
    00034     CRASH_PLANE_LANDING,
    00035     CRASH_AIRCRAFT_NO_AIRPORT,
    00036     CRASH_FLOODED,
    00037   };
    00038
    00044   AIEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason) :
    00045     AIEvent(AI_ET_VEHICLE_CRASHED),
    00046     crash_site(crash_site),
    00047     vehicle(vehicle),
    00048     crash_reason(crash_reason)
    00049   {}
    00050
    00056   static AIEventVehicleCrashed *Convert(AIEvent *instance) { return (AIEventVehicleCrashed *)instance; }
    00057
    00062   VehicleID GetVehicleID() { return this->vehicle; }
    00063
    00068   TileIndex GetCrashSite() { return this->crash_site; }
    00069
    00074   CrashReason GetCrashReason() { return this->crash_reason; }
    00075
    00076 private:
    00077   TileIndex crash_site;
    00078   VehicleID vehicle;
    00079   CrashReason crash_reason;
    00080 };
    00081
    00085 class AIEventSubsidyOffer : public AIEvent {
    00086 public:
    00088   static const char *GetClassName() { return "AIEventSubsidyOffer"; }
    00089
    00093   AIEventSubsidyOffer(SubsidyID subsidy_id) :
    00094     AIEvent(AI_ET_SUBSIDY_OFFER),
    00095     subsidy_id(subsidy_id)
    00096   {}
    00097
    00103   static AIEventSubsidyOffer *Convert(AIEvent *instance) { return (AIEventSubsidyOffer *)instance; }
    00104
    00109   SubsidyID GetSubsidyID() { return this->subsidy_id; }
    00110
    00111 private:
    00112   SubsidyID subsidy_id;
    00113 };
    00114
    00118 class AIEventSubsidyOfferExpired : public AIEvent {
    00119 public:
    00121   static const char *GetClassName() { return "AIEventSubsidyOfferExpired"; }
    00122
    00126   AIEventSubsidyOfferExpired(SubsidyID subsidy_id) :
    00127     AIEvent(AI_ET_SUBSIDY_OFFER_EXPIRED),
    00128     subsidy_id(subsidy_id)
    00129   {}
    00130
    00136   static AIEventSubsidyOfferExpired *Convert(AIEvent *instance) { return (AIEventSubsidyOfferExpired *)instance; }
    00137
    00142   SubsidyID GetSubsidyID() { return this->subsidy_id; }
    00143
    00144 private:
    00145   SubsidyID subsidy_id;
    00146 };
    00147
    00151 class AIEventSubsidyAwarded : public AIEvent {
    00152 public:
    00154   static const char *GetClassName() { return "AIEventSubsidyAwarded"; }
    00155
    00159   AIEventSubsidyAwarded(SubsidyID subsidy_id) :
    00160     AIEvent(AI_ET_SUBSIDY_AWARDED),
    00161     subsidy_id(subsidy_id)
    00162   {}
    00163
    00169   static AIEventSubsidyAwarded *Convert(AIEvent *instance) { return (AIEventSubsidyAwarded *)instance; }
    00170
    00175   SubsidyID GetSubsidyID() { return this->subsidy_id; }
    00176
    00177 private:
    00178   SubsidyID subsidy_id;
    00179 };
    00180
    00184 class AIEventSubsidyExpired : public AIEvent {
    00185 public:
    00187   static const char *GetClassName() { return "AIEventSubsidyExpired"; }
    00188
    00192   AIEventSubsidyExpired(SubsidyID subsidy_id) :
    00193     AIEvent(AI_ET_SUBSIDY_EXPIRED),
    00194     subsidy_id(subsidy_id)
    00195   {}
    00196
    00202   static AIEventSubsidyExpired *Convert(AIEvent *instance) { return (AIEventSubsidyExpired *)instance; }
    00203
    00208    SubsidyID GetSubsidyID() { return this->subsidy_id; }
    00209
    00210 private:
    00211   SubsidyID subsidy_id;
    00212 };
    00213
    00219 class AIEventEnginePreview : public AIEvent {
    00220 public:
    00222   static const char *GetClassName() { return "AIEventEnginePreview"; }
    00223
    00227   AIEventEnginePreview(EngineID engine) :
    00228     AIEvent(AI_ET_ENGINE_PREVIEW),
    00229     engine(engine)
    00230   {}
    00231
    00237   static AIEventEnginePreview *Convert(AIEvent *instance) { return (AIEventEnginePreview *)instance; }
    00238
    00243   char *GetName();
    00244
    00250   CargoID GetCargoType();
    00251
    00257   int32 GetCapacity();
    00258
    00266   int32 GetMaxSpeed();
    00267
    00272   Money GetPrice();
    00273
    00279   Money GetRunningCost();
    00280
    00285 #ifdef DOXYGEN_SKIP
    00286   AIVehicle::VehicleType GetVehicleType();
    00287 #else
    00288   int32 GetVehicleType();
    00289 #endif
    00290
    00295   bool AcceptPreview();
    00296
    00297 private:
    00298   EngineID engine;
    00299
    00304   bool IsEngineValid() const;
    00305 };
    00306
    00310 class AIEventCompanyNew : public AIEvent {
    00311 public:
    00313   static const char *GetClassName() { return "AIEventCompanyNew"; }
    00314
    00318   AIEventCompanyNew(Owner owner) :
    00319     AIEvent(AI_ET_COMPANY_NEW),
    00320     owner((AICompany::CompanyID)owner)
    00321   {}
    00322
    00328   static AIEventCompanyNew *Convert(AIEvent *instance) { return (AIEventCompanyNew *)instance; }
    00329
    00334   AICompany::CompanyID GetCompanyID() { return this->owner; }
    00335
    00336 private:
    00337   AICompany::CompanyID owner;
    00338 };
    00339
    00344 class AIEventCompanyInTrouble : public AIEvent {
    00345 public:
    00347   static const char *GetClassName() { return "AIEventCompanyInTrouble"; }
    00348
    00352   AIEventCompanyInTrouble(Owner owner) :
    00353     AIEvent(AI_ET_COMPANY_IN_TROUBLE),
    00354     owner((AICompany::CompanyID)owner)
    00355   {}
    00356
    00362   static AIEventCompanyInTrouble *Convert(AIEvent *instance) { return (AIEventCompanyInTrouble *)instance; }
    00363
    00368   AICompany::CompanyID GetCompanyID() { return this->owner; }
    00369
    00370 private:
    00371   AICompany::CompanyID owner;
    00372 };
    00373
    00377 class AIEventCompanyAskMerger : public AIEvent {
    00378 public:
    00380   static const char *GetClassName() { return "AIEventCompanyAskMerger"; }
    00381
    00386   AIEventCompanyAskMerger(Owner owner, int32 value) :
    00387     AIEvent(AI_ET_COMPANY_ASK_MERGER),
    00388     owner((AICompany::CompanyID)owner),
    00389     value(value)
    00390   {}
    00391
    00397   static AIEventCompanyAskMerger *Convert(AIEvent *instance) { return (AIEventCompanyAskMerger *)instance; }
    00398
    00404   AICompany::CompanyID GetCompanyID() { return this->owner; }
    00405
    00410   int32 GetValue() { return this->value; }
    00411
    00416   bool AcceptMerger();
    00417
    00418 private:
    00419   AICompany::CompanyID owner;
    00420   int32 value;
    00421 };
    00422
    00427 class AIEventCompanyMerger : public AIEvent {
    00428 public:
    00430   static const char *GetClassName() { return "AIEventCompanyMerger"; }
    00431
    00436   AIEventCompanyMerger(Owner old_owner, Owner new_owner) :
    00437     AIEvent(AI_ET_COMPANY_MERGER),
    00438     old_owner((AICompany::CompanyID)old_owner),
    00439     new_owner((AICompany::CompanyID)new_owner)
    00440   {}
    00441
    00447   static AIEventCompanyMerger *Convert(AIEvent *instance) { return (AIEventCompanyMerger *)instance; }
    00448
    00456   AICompany::CompanyID GetOldCompanyID() { return this->old_owner; }
    00457
    00462   AICompany::CompanyID GetNewCompanyID() { return this->new_owner; }
    00463
    00464 private:
    00465   AICompany::CompanyID old_owner;
    00466   AICompany::CompanyID new_owner;
    00467 };
    00468
    00472 class AIEventCompanyBankrupt : public AIEvent {
    00473 public:
    00475   static const char *GetClassName() { return "AIEventCompanyBankrupt"; }
    00476
    00480   AIEventCompanyBankrupt(Owner owner) :
    00481     AIEvent(AI_ET_COMPANY_BANKRUPT),
    00482     owner((AICompany::CompanyID)owner)
    00483   {}
    00484
    00490   static AIEventCompanyBankrupt *Convert(AIEvent *instance) { return (AIEventCompanyBankrupt *)instance; }
    00491
    00496   AICompany::CompanyID GetCompanyID() { return this->owner; }
    00497
    00498 private:
    00499   AICompany::CompanyID owner;
    00500 };
    00501
    00505 class AIEventVehicleLost : public AIEvent {
    00506 public:
    00508   static const char *GetClassName() { return "AIEventVehicleLost"; }
    00509
    00513   AIEventVehicleLost(VehicleID vehicle_id) :
    00514     AIEvent(AI_ET_VEHICLE_LOST),
    00515     vehicle_id(vehicle_id)
    00516   {}
    00517
    00523   static AIEventVehicleLost *Convert(AIEvent *instance) { return (AIEventVehicleLost *)instance; }
    00524
    00529   VehicleID GetVehicleID() { return this->vehicle_id; }
    00530
    00531 private:
    00532   VehicleID vehicle_id;
    00533 };
    00534
    00538 class AIEventVehicleWaitingInDepot : public AIEvent {
    00539 public:
    00541   static const char *GetClassName() { return "AIEventVehicleWaitingInDepot"; }
    00542
    00546   AIEventVehicleWaitingInDepot(VehicleID vehicle_id) :
    00547     AIEvent(AI_ET_VEHICLE_WAITING_IN_DEPOT),
    00548     vehicle_id(vehicle_id)
    00549   {}
    00550
    00556   static AIEventVehicleWaitingInDepot *Convert(AIEvent *instance) { return (AIEventVehicleWaitingInDepot *)instance; }
    00557
    00562   VehicleID GetVehicleID() { return this->vehicle_id; }
    00563
    00564 private:
    00565   VehicleID vehicle_id;
    00566 };
    00567
    00571 class AIEventVehicleUnprofitable : public AIEvent {
    00572 public:
    00574   static const char *GetClassName() { return "AIEventVehicleUnprofitable"; }
    00575
    00579   AIEventVehicleUnprofitable(VehicleID vehicle_id) :
    00580     AIEvent(AI_ET_VEHICLE_UNPROFITABLE),
    00581     vehicle_id(vehicle_id)
    00582   {}
    00583
    00589   static AIEventVehicleUnprofitable *Convert(AIEvent *instance) { return (AIEventVehicleUnprofitable *)instance; }
    00590
    00595   VehicleID GetVehicleID() { return this->vehicle_id; }
    00596
    00597 private:
    00598   VehicleID vehicle_id;
    00599 };
    00600
    00604 class AIEventIndustryOpen : public AIEvent {
    00605 public:
    00607   static const char *GetClassName() { return "AIEventIndustryOpen"; }
    00608
    00612   AIEventIndustryOpen(IndustryID industry_id) :
    00613     AIEvent(AI_ET_INDUSTRY_OPEN),
    00614     industry_id(industry_id)
    00615   {}
    00616
    00622   static AIEventIndustryOpen *Convert(AIEvent *instance) { return (AIEventIndustryOpen *)instance; }
    00623
    00628   IndustryID GetIndustryID() { return this->industry_id; }
    00629
    00630 private:
    00631   IndustryID industry_id;
    00632 };
    00633
    00637 class AIEventIndustryClose : public AIEvent {
    00638 public:
    00640   static const char *GetClassName() { return "AIEventIndustryClose"; }
    00641
    00645   AIEventIndustryClose(IndustryID industry_id) :
    00646     AIEvent(AI_ET_INDUSTRY_CLOSE),
    00647     industry_id(industry_id)
    00648   {}
    00649
    00655   static AIEventIndustryClose *Convert(AIEvent *instance) { return (AIEventIndustryClose *)instance; }
    00656
    00661   IndustryID GetIndustryID() { return this->industry_id; }
    00662
    00663 private:
    00664   IndustryID industry_id;
    00665 };
    00666
    00670 class AIEventEngineAvailable : public AIEvent {
    00671 public:
    00673   static const char *GetClassName() { return "AIEventEngineAvailable"; }
    00674
    00678   AIEventEngineAvailable(EngineID engine) :
    00679     AIEvent(AI_ET_ENGINE_AVAILABLE),
    00680     engine(engine)
    00681   {}
    00682
    00688   static AIEventEngineAvailable *Convert(AIEvent *instance) { return (AIEventEngineAvailable *)instance; }
    00689
    00694   EngineID GetEngineID() { return this->engine; }
    00695
    00696 private:
    00697   EngineID engine;
    00698 };
    00699
    00703 class AIEventStationFirstVehicle : public AIEvent {
    00704 public:
    00706   static const char *GetClassName() { return "AIEventStationFirstVehicle"; }
    00707
    00712   AIEventStationFirstVehicle(StationID station, VehicleID vehicle) :
    00713     AIEvent(AI_ET_STATION_FIRST_VEHICLE),
    00714     station(station),
    00715     vehicle(vehicle)
    00716   {}
    00717
    00723   static AIEventStationFirstVehicle *Convert(AIEvent *instance) { return (AIEventStationFirstVehicle *)instance; }
    00724
    00729   StationID GetStationID() { return this->station; }
    00730
    00735   VehicleID GetVehicleID() { return this->vehicle; }
    00736
    00737 private:
    00738   StationID station;
    00739   VehicleID vehicle;
    00740 };
    00741
    00745 class AIEventDisasterZeppelinerCrashed : public AIEvent {
    00746 public:
    00748   static const char *GetClassName() { return "AIEventDisasterZeppelinerCrashed"; }
    00749
    00753   AIEventDisasterZeppelinerCrashed(StationID station) :
    00754     AIEvent(AI_ET_DISASTER_ZEPPELINER_CRASHED),
    00755     station(station)
    00756   {}
    00757
    00763   static AIEventDisasterZeppelinerCrashed *Convert(AIEvent *instance) { return (AIEventDisasterZeppelinerCrashed *)instance; }
    00764
    00769   StationID GetStationID() { return this->station; }
    00770
    00771 private:
    00772   StationID station;
    00773 };
    00774
    00778 class AIEventDisasterZeppelinerCleared : public AIEvent {
    00779 public:
    00781   static const char *GetClassName() { return "AIEventDisasterZeppelinerCleared"; }
    00782
    00786   AIEventDisasterZeppelinerCleared(StationID station) :
    00787     AIEvent(AI_ET_DISASTER_ZEPPELINER_CLEARED),
    00788     station(station)
    00789   {}
    00790
    00796   static AIEventDisasterZeppelinerCleared *Convert(AIEvent *instance) { return (AIEventDisasterZeppelinerCleared *)instance; }
    00797
    00802   StationID GetStationID() { return this->station; }
    00803
    00804 private:
    00805   StationID station;
    00806 };
    00807
    00811 class AIEventTownFounded : public AIEvent {
    00812 public:
    00814   static const char *GetClassName() { return "AIEventTownFounded"; }
    00815
    00819   AIEventTownFounded(TownID town) :
    00820     AIEvent(AI_ET_TOWN_FOUNDED),
    00821     town(town)
    00822   {}
    00823
    00829   static AIEventTownFounded *Convert(AIEvent *instance) { return (AIEventTownFounded *)instance; }
    00830
    00835   TownID GetTownID() { return this->town; }
    00836
    00837 private:
    00838   TownID town;
    00839 };
    00840
    00841 #endif /* AI_EVENT_TYPES_HPP */