00001
00002
00003
00004
00005
00006
00007
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
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