1 /* 2 * This file is part of OpenTTD. 3 * 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. 4 * 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. 5 * 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/>. 6 */ 7 8 /** @file newgrf_industries.h Functions for NewGRF industries. */ 9 10 #ifndef NEWGRF_INDUSTRIES_H 11 #define NEWGRF_INDUSTRIES_H 12 13 #include "newgrf_town.h" 14 15 /** Resolver for industry scopes. */ 16 struct IndustriesScopeResolver : public ScopeResolver { 17 TileIndex tile; ///< Tile owned by the industry. 18 Industry *industry; ///< %Industry being resolved. 19 IndustryType type; ///< Type of the industry. 20 uint32 random_bits; ///< Random bits of the new industry. 21 22 /** 23 * Scope resolver for industries. 24 * @param ro Surrounding resolver. 25 * @param tile %Tile owned by the industry. 26 * @param industry %Industry being resolved. 27 * @param type Type of the industry. 28 * @param random_bits Random bits of the new industry. 29 */ 30 IndustriesScopeResolver(ResolverObject &ro, TileIndex tile, Industry *industry, IndustryType type, uint32 random_bits = 0) ScopeResolverIndustriesScopeResolver31 : ScopeResolver(ro), tile(tile), industry(industry), type(type), random_bits(random_bits) 32 { 33 } 34 35 uint32 GetRandomBits() const override; 36 uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; 37 uint32 GetTriggers() const override; 38 void StorePSA(uint pos, int32 value) override; 39 }; 40 41 /** Resolver for industries. */ 42 struct IndustriesResolverObject : public ResolverObject { 43 IndustriesScopeResolver industries_scope; ///< Scope resolver for the industry. 44 TownScopeResolver *town_scope; ///< Scope resolver for the associated town (if needed and available, else \c nullptr). 45 46 IndustriesResolverObject(TileIndex tile, Industry *indus, IndustryType type, uint32 random_bits = 0, 47 CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); 48 ~IndustriesResolverObject(); 49 50 TownScopeResolver *GetTown(); 51 52 ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override 53 { 54 switch (scope) { 55 case VSG_SCOPE_SELF: return &industries_scope; 56 case VSG_SCOPE_PARENT: { 57 TownScopeResolver *tsr = this->GetTown(); 58 if (tsr != nullptr) return tsr; 59 } 60 FALLTHROUGH; 61 62 default: 63 return ResolverObject::GetScope(scope, relative); 64 } 65 } 66 67 GrfSpecFeature GetFeature() const override; 68 uint32 GetDebugID() const override; 69 }; 70 71 /** When should the industry(tile) be triggered for random bits? */ 72 enum IndustryTrigger { 73 /** Triggered each tile loop */ 74 INDUSTRY_TRIGGER_TILELOOP_PROCESS = 1, 75 /** Triggered (whole industry) each 256 ticks */ 76 INDUSTRY_TRIGGER_256_TICKS = 2, 77 /** Triggered on cargo delivery */ 78 INDUSTRY_TRIGGER_CARGO_DELIVERY = 4, 79 }; 80 81 /** From where has callback #CBID_INDUSTRY_PROBABILITY been called */ 82 enum IndustryAvailabilityCallType { 83 IACT_MAPGENERATION, ///< during random map generation 84 IACT_RANDOMCREATION, ///< during creation of random ingame industry 85 IACT_USERCREATION, ///< from the Fund/build window 86 IACT_PROSPECTCREATION, ///< from the Fund/build using prospecting 87 }; 88 89 /* in newgrf_industry.cpp */ 90 uint16 GetIndustryCallback(CallbackID callback, uint32 param1, uint32 param2, Industry *industry, IndustryType type, TileIndex tile); 91 uint32 GetIndustryIDAtOffset(TileIndex new_tile, const Industry *i, uint32 cur_grfid); 92 void IndustryProductionCallback(Industry *ind, int reason); 93 CommandCost CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, size_t layout, uint32 seed, uint16 initial_random_bits, Owner founder, IndustryAvailabilityCallType creation_type); 94 uint32 GetIndustryProbabilityCallback(IndustryType type, IndustryAvailabilityCallType creation_type, uint32 default_prob); 95 bool IndustryTemporarilyRefusesCargo(Industry *ind, CargoID cargo_type); 96 97 IndustryType MapNewGRFIndustryType(IndustryType grf_type, uint32 grf_id); 98 99 /* in newgrf_industrytiles.cpp*/ 100 uint32 GetNearbyIndustryTileInformation(byte parameter, TileIndex tile, IndustryID index, bool signed_offsets, bool grf_version8); 101 102 #endif /* NEWGRF_INDUSTRIES_H */ 103