src/industry_map.h
changeset 5726 8f399788f6c9
parent 5687 a6f0e780d714
child 6285 187e3ef04cc9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/industry_map.h	Tue Jan 02 19:19:48 2007 +0000
@@ -0,0 +1,259 @@
+/* $Id$ */
+
+/** @file industry_map.h Accessors for industries */
+
+#ifndef INDUSTRY_MAP_H
+#define INDUSTRY_MAP_H
+
+#include "industry.h"
+#include "macros.h"
+#include "tile.h"
+
+
+
+/**
+ * The following enums are indices used to know what to draw for this industry tile.
+ * They all are pointing toward array _industry_draw_tile_data, in table/industry_land.h
+ * How to calculate the correct position ? GFXid << 2 | IndustryStage (0 to 3)
+ */
+enum {
+	GFX_COAL_MINE_TOWER_NOT_ANIMATED   =   0,
+	GFX_COAL_MINE_TOWER_ANIMATED       =   1,
+	GFX_POWERPLANT_CHIMNEY             =   8,
+	GFX_POWERPLANT_SPARKS              =  10,
+	GFX_OILRIG_1                       =  24,
+	GFX_OILRIG_2                       =  25,
+	GFX_OILRIG_3                       =  26,
+	GFX_OILRIG_4                       =  27,
+	GFX_OILRIG_5                       =  28,
+	GFX_OILWELL_NOT_ANIMATED           =  29,
+	GFX_OILWELL_ANIMATED_1             =  30,
+	GFX_OILWELL_ANIMATED_2             =  31,
+	GFX_OILWELL_ANIMATED_3             =  32,
+	GFX_COPPER_MINE_TOWER_NOT_ANIMATED =  47,
+	GFX_COPPER_MINE_TOWER_ANIMATED     =  48,
+	GFX_COPPER_MINE_CHIMNEY            =  49,
+	GFX_GOLD_MINE_TOWER_NOT_ANIMATED   =  79,
+	GFX_GOLD_MINE_TOWER_ANIMATED       =  88,
+	GFX_TOY_FACTORY                    = 143,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_1    = 148,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_2    = 149,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_3    = 150,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_4    = 151,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_5    = 152,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_6    = 153,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_7    = 154,
+	GFX_PLASTIC_FOUNTAIN_ANIMATED_8    = 155,
+	GFX_BUBBLE_GENERATOR               = 161,
+	GFX_BUBBLE_CATCHER                 = 162,
+	GFX_TOFFEE_QUARY                   = 165,
+	GFX_SUGAR_MINE_SIEVE               = 174,
+	NUM_INDUSTRY_GFXES                 = 175,
+};
+
+static inline IndustryID GetIndustryIndex(TileIndex t)
+{
+	assert(IsTileType(t, MP_INDUSTRY));
+	return _m[t].m2;
+}
+
+static inline Industry* GetIndustryByTile(TileIndex t)
+{
+	return GetIndustry(GetIndustryIndex(t));
+}
+
+static inline bool IsIndustryCompleted(TileIndex t)
+{
+	assert(IsTileType(t, MP_INDUSTRY));
+	return HASBIT(_m[t].m1, 7);
+}
+
+IndustryType GetIndustryType(TileIndex tile);
+
+/**
+ * Set if the industry that owns the tile as under construction or not
+ * @param tile the tile to query
+ * @param isCompleted whether it is completed or not
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline void SetIndustryCompleted(TileIndex tile, bool isCompleted)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	SB(_m[tile].m1, 7, 1, isCompleted ? 1 :0);
+}
+
+/**
+ * Returns the industry construction stage of the specified tile
+ * @param tile the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @return the construction stage
+ */
+static inline byte GetIndustryConstructionStage(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return GB(_m[tile].m1, 0, 2);
+}
+
+/**
+ * Sets the industry construction stage of the specified tile
+ * @param tile the tile to query
+ * @param value the new construction stage
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline void SetIndustryConstructionStage(TileIndex tile, byte value)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	SB(_m[tile].m1, 0, 2, value);
+}
+
+static inline IndustryGfx GetIndustryGfx(TileIndex t)
+{
+	assert(IsTileType(t, MP_INDUSTRY));
+	return _m[t].m5;
+}
+
+static inline void SetIndustryGfx(TileIndex t, IndustryGfx gfx)
+{
+	assert(IsTileType(t, MP_INDUSTRY));
+	_m[t].m5 = gfx;
+}
+
+static inline void MakeIndustry(TileIndex t, IndustryID index, IndustryGfx gfx)
+{
+	SetTileType(t, MP_INDUSTRY);
+	_m[t].m1 = 0;
+	_m[t].m2 = index;
+	_m[t].m3 = 0;
+	_m[t].m4 = 0;
+	_m[t].m5 = gfx;
+}
+
+/**
+ * Returns this indutry tile's construction counter value
+ * @param tile the tile to query
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ * @return the construction counter
+ */
+static inline byte GetIndustryConstructionCounter(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return GB(_m[tile].m1, 2, 2);
+}
+
+/**
+ * Sets this indutry tile's construction counter value
+ * @param tile the tile to query
+ * @param value the new value for the construction counter
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline void SetIndustryConstructionCounter(TileIndex tile, byte value)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	SB(_m[tile].m1, 2, 2, value);
+}
+
+/**
+ * Reset the construction stage counter of the industry,
+ * as well as the completion bit.
+ * In fact, it is the same as restarting construction frmo ground up
+ * @param tile the tile to query
+ * @param generating_world whether generating a world or not
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline void ResetIndustryConstructionStage(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	_m[tile].m1 = 0;
+}
+
+typedef struct IndustryTypeSolver {
+	IndustryGfx MinGfx;
+	IndustryGfx MaxGfx;
+} IndustryTypeSolver;
+
+static const IndustryTypeSolver industry_gfx_Solver [IT_END] = {
+	{  0,   6}, //IT_COAL_MINE
+	{  7,  10}, //IT_POWER_STATION,
+	{ 11,  15}, //IT_SAWMILL,
+	{ 16,  17}, //IT_FOREST,
+	{ 18,  23}, //IT_OIL_REFINERY,
+	{ 24,  28}, //IT_OIL_RIG,
+	{ 29,  31}, //IT_OIL_WELL,
+	{ 32,  38}, //IT_FARM,
+	{ 39,  42}, //IT_FACTORY,
+	{ 43,  46}, //IT_PRINTING_WORKS,
+	{ 47,  51}, //IT_COPPER_MINE,
+	{ 52,  57}, //IT_STEEL_MILL,
+	{ 58,  59}, //IT_BANK_TEMP,
+	{ 60,  63}, //IT_FOOD_PROCESS,
+	{ 64,  71}, //IT_PAPER_MILL,
+	{ 72,  88}, //IT_GOLD_MINE,
+	{ 89,  90}, //IT_BANK_TROPIC_ARCTIC,
+	{ 91,  99}, //IT_DIAMOND_MINE,
+	{100, 115}, //IT_IRON_MINE,
+	{116, 116}, //IT_FRUIT_PLANTATION,
+	{117, 117}, //IT_RUBBER_PLANTATION,
+	{118, 119}, //IT_WATER_SUPPLY,
+	{120, 120}, //IT_WATER_TOWER,
+	{121, 124}, //IT_FACTORY_2,
+	{125, 128}, //IT_LUMBER_MILL,
+	{129, 130}, //IT_COTTON_CANDY,
+	{131, 134}, //IT_CANDY_FACTORY or sweet factory
+	{135, 136}, //IT_BATTERY_FARM,
+	{137, 137}, //IT_COLA_WELLS,
+	{138, 141}, //IT_TOY_SHOP,
+	{142, 147}, //IT_TOY_FACTORY,
+	{148, 155}, //IT_PLASTIC_FOUNTAINS,
+	{156, 159}, //IT_FIZZY_DRINK_FACTORY,
+	{160, 163}, //IT_BUBBLE_GENERATOR,
+	{164, 166}, //IT_TOFFEE_QUARRY,
+	{167, 174}  //IT_SUGAR_MINE,
+};
+
+/**
+ * Get the animation loop number
+ * @param tile the tile to get the animation loop number of
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline byte GetIndustryAnimationLoop(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return _m[tile].m4;
+}
+
+/**
+ * Set the animation loop number
+ * @param tile the tile to set the animation loop number of
+ * @param count the new animation frame number
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline void SetIndustryAnimationLoop(TileIndex tile, byte count)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	_m[tile].m4 = count;
+}
+
+/**
+ * Get the animation state
+ * @param tile the tile to get the animation state of
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline byte GetIndustryAnimationState(TileIndex tile)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	return _m[tile].m3;
+}
+
+/**
+ * Set the animation state
+ * @param tile the tile to set the animation state of
+ * @param count the new animation state
+ * @pre IsTileType(tile, MP_INDUSTRY)
+ */
+static inline void SetIndustryAnimationState(TileIndex tile, byte state)
+{
+	assert(IsTileType(tile, MP_INDUSTRY));
+	_m[tile].m3 = state;
+}
+
+#endif /* INDUSTRY_MAP_H */