From 66bbf336c6af7353ef0aeed58002c46543b30635 Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 2 Jan 2007 19:19:48 +0000 Subject: (svn r7759) -Merge: makefile rewrite. This merge features: - A proper ./configure, so everything needs to be configured only once, not for every make. - Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies. - A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC. - Proper support for OSX universal binaries. - Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files. - Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files. Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy. --- src/industry.h | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 src/industry.h (limited to 'src/industry.h') diff --git a/src/industry.h b/src/industry.h new file mode 100644 index 000000000..f8cf63c82 --- /dev/null +++ b/src/industry.h @@ -0,0 +1,199 @@ +/* $Id$ */ + +#ifndef INDUSTRY_H +#define INDUSTRY_H + +#include "oldpool.h" + +typedef byte IndustryGfx; +typedef uint8 IndustryType; + +enum { + INVALID_INDUSTRY = 0xFFFF, +}; + +typedef enum IndustryLifeTypes { + INDUSTRYLIFE_NOT_CLOSABLE, ///< Industry can never close + INDUSTRYLIFE_PRODUCTION, ///< Industry can close and change of production + INDUSTRYLIFE_CLOSABLE, ///< Industry can only close (no production change) +} IndustryLifeType; + +struct Industry { + TileIndex xy; + byte width; /* swapped order of w/h with town */ + byte height; + const Town* town; + CargoID produced_cargo[2]; + uint16 cargo_waiting[2]; + byte production_rate[2]; + CargoID accepts_cargo[3]; + byte prod_level; + uint16 last_mo_production[2]; + uint16 last_mo_transported[2]; + byte pct_transported[2]; + uint16 total_production[2]; + uint16 total_transported[2]; + uint16 counter; + + byte type; + byte owner; + byte random_color; + Year last_prod_year; + byte was_cargo_delivered; + + IndustryID index; +}; + +typedef struct IndustryTileTable { + TileIndexDiffC ti; + IndustryGfx gfx; +} IndustryTileTable; + +typedef struct IndustrySpec { + /** Tables with the 'layout' of different composition of GFXes */ + const IndustryTileTable *const *table; + /** Number of elements in the table */ + byte num_table; + /** Base cost multiplier*/ + byte cost_multiplier; + /** Industries this industry cannot be close to */ + IndustryType conflicting[3]; + /** index to a procedure to check for conflicting circumstances */ + byte check_proc; + + CargoID produced_cargo[2]; + byte production_rate[2]; + /** The minimum amount of cargo transported to the stations; if the + * waiting cargo is less than this number, no cargo is moved to it*/ + byte minimal_cargo; + CargoID accepts_cargo[3]; + + IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs + + byte climate_availability; ///< Bitmask, giving landscape enums as bit position + + StringID name; + StringID closure_text; + StringID production_up_text; + StringID production_down_text; +} IndustrySpec; + +const IndustrySpec *GetIndustrySpec(IndustryType thistype); + +DECLARE_OLD_POOL(Industry, Industry, 3, 8000) + +/** + * Check if an Industry really exists. + */ +static inline bool IsValidIndustry(const Industry *industry) +{ + return industry->xy != 0; +} + +static inline bool IsValidIndustryID(IndustryID index) +{ + return index < GetIndustryPoolSize() && IsValidIndustry(GetIndustry(index)); +} + +VARDEF int _total_industries; + +static inline IndustryID GetMaxIndustryIndex(void) +{ + /* TODO - This isn't the real content of the function, but + * with the new pool-system this will be replaced with one that + * _really_ returns the highest index. Now it just returns + * the next safe value we are sure about everything is below. + */ + return GetIndustryPoolSize() - 1; +} + +static inline uint GetNumIndustries(void) +{ + return _total_industries; +} + +/** + * Return a random valid industry. + */ +static inline Industry *GetRandomIndustry(void) +{ + int num = RandomRange(GetNumIndustries()); + IndustryID index = INVALID_INDUSTRY; + + if (GetNumIndustries() == 0) return NULL; + + while (num >= 0) { + num--; + index++; + + /* Make sure we have a valid industry */ + while (!IsValidIndustryID(index)) { + index++; + assert(index <= GetMaxIndustryIndex()); + } + } + + return GetIndustry(index); +} + +void DestroyIndustry(Industry *i); + +static inline void DeleteIndustry(Industry *i) +{ + DestroyIndustry(i); + i->xy = 0; +} + +#define FOR_ALL_INDUSTRIES_FROM(i, start) for (i = GetIndustry(start); i != NULL; i = (i->index + 1U < GetIndustryPoolSize()) ? GetIndustry(i->index + 1U) : NULL) if (IsValidIndustry(i)) +#define FOR_ALL_INDUSTRIES(i) FOR_ALL_INDUSTRIES_FROM(i, 0) + +VARDEF const Industry** _industry_sort; +VARDEF bool _industry_sort_dirty; + + +void DeleteIndustry(Industry *is); +void PlantRandomFarmField(const Industry *i); + +enum { + IT_COAL_MINE = 0, + IT_POWER_STATION = 1, + IT_SAWMILL = 2, + IT_FOREST = 3, + IT_OIL_REFINERY = 4, + IT_OIL_RIG = 5, + IT_FACTORY = 6, + IT_PRINTING_WORKS = 7, + IT_STEEL_MILL = 8, + IT_FARM = 9, + IT_COPPER_MINE = 10, + IT_OIL_WELL = 11, + IT_BANK_TEMP = 12, + IT_FOOD_PROCESS = 13, + IT_PAPER_MILL = 14, + IT_GOLD_MINE = 15, + IT_BANK_TROPIC_ARCTIC = 16, + IT_DIAMOND_MINE = 17, + IT_IRON_MINE = 18, + IT_FRUIT_PLANTATION = 19, + IT_RUBBER_PLANTATION = 20, + IT_WATER_SUPPLY = 21, + IT_WATER_TOWER = 22, + IT_FACTORY_2 = 23, + IT_FARM_2 = 24, + IT_LUMBER_MILL = 25, + IT_COTTON_CANDY = 26, + IT_CANDY_FACTORY = 27, + IT_BATTERY_FARM = 28, + IT_COLA_WELLS = 29, + IT_TOY_SHOP = 30, + IT_TOY_FACTORY = 31, + IT_PLASTIC_FOUNTAINS = 32, + IT_FIZZY_DRINK_FACTORY = 33, + IT_BUBBLE_GENERATOR = 34, + IT_TOFFEE_QUARRY = 35, + IT_SUGAR_MINE = 36, + IT_END, + IT_INVALID = 255, +}; + +#endif /* INDUSTRY_H */ -- cgit v1.2.3-54-g00ecf