Files @ r5312:ffd375effb01
Branch filter:

Location: cpp/openttd-patchpack/source/industry.h - annotation

Darkvater
(svn r7468) -Codechange: [win32] Add some comments to MB/WIDE_TO_WIDE/MB_[BUFFER] macros and
use them some more in win32 code. Also for the clipboard use the convert_from_fs
function instead of calling Win32 API directly. Make the static buffers in OTTD2FS
and FS2OTTD the same size (character-length wise)
r2186:5ee653b1b5e1
r2186:5ee653b1b5e1
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r5216:bdd3aa57475e
r1267:78c35aaf06ff
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r4328:abeae2374271
r4328:abeae2374271
r4328:abeae2374271
r4328:abeae2374271
r4924:047938e059a9
r4924:047938e059a9
r4924:047938e059a9
r4924:047938e059a9
r4924:047938e059a9
r4924:047938e059a9
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r2630:73464cd368d6
r3344:abc4ac7cb74a
r0:d63b455452f6
r0:d63b455452f6
r3344:abc4ac7cb74a
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r3350:3c52d6fd465c
r4942:0fc66417d98b
r4326:7102aa7f4fb2
r0:d63b455452f6
r919:57ef81f1ba8e
r4330:1186b19da099
r0:d63b455452f6
r0:d63b455452f6
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r4966:e34d63011678
r4965:a4c44ae0ea0f
r4966:e34d63011678
r4924:047938e059a9
r4942:0fc66417d98b
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r3689:445f66c2333d
r5216:bdd3aa57475e
r1267:78c35aaf06ff
r1267:78c35aaf06ff
r1330:62eaa061ec97
r1330:62eaa061ec97
r4346:fa4ac6b6f852
r1330:62eaa061ec97
r4346:fa4ac6b6f852
r1330:62eaa061ec97
r1330:62eaa061ec97
r5299:1a5e005aa3e9
r5299:1a5e005aa3e9
r5299:1a5e005aa3e9
r5299:1a5e005aa3e9
r5299:1a5e005aa3e9
r4354:95cd3ce6deea
r4354:95cd3ce6deea
r5247:1abbd3b3cd80
r4354:95cd3ce6deea
r4354:95cd3ce6deea
r4354:95cd3ce6deea
r5247:1abbd3b3cd80
r4354:95cd3ce6deea
r4354:95cd3ce6deea
r5298:8fdd01992c6e
r5247:1abbd3b3cd80
r5247:1abbd3b3cd80
r5247:1abbd3b3cd80
r5247:1abbd3b3cd80
r4357:4a0463b63644
r4354:95cd3ce6deea
r4354:95cd3ce6deea
r4356:03f88658c85b
r5299:1a5e005aa3e9
r4356:03f88658c85b
r4356:03f88658c85b
r4356:03f88658c85b
r5299:1a5e005aa3e9
r5299:1a5e005aa3e9
r4356:03f88658c85b
r5247:1abbd3b3cd80
r4356:03f88658c85b
r5299:1a5e005aa3e9
r4356:03f88658c85b
r4356:03f88658c85b
r5299:1a5e005aa3e9
r4356:03f88658c85b
r5299:1a5e005aa3e9
r4356:03f88658c85b
r5299:1a5e005aa3e9
r4356:03f88658c85b
r4356:03f88658c85b
r4356:03f88658c85b
r4356:03f88658c85b
r4356:03f88658c85b
r4356:03f88658c85b
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4403:2c2ffbb59c83
r4976:69b6cba0a840
r1267:78c35aaf06ff
r1267:78c35aaf06ff
r4277:fd4235a66bc9
r1267:78c35aaf06ff
r919:57ef81f1ba8e
r3496:675e7d4a3bf2
r0:d63b455452f6
r4328:abeae2374271
r0:d63b455452f6
r0:d63b455452f6
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r3499:c30aa286c5b5
r4344:bff007ae1fd1
r0:d63b455452f6
r0:d63b455452f6
r2436:963efe8b84cc
/* $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 */