summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/newgrf_commons.cpp23
-rw-r--r--src/newgrf_commons.h11
-rw-r--r--src/newgrf_industries.cpp1
3 files changed, 35 insertions, 0 deletions
diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp
index 72567920e..6fc0103be 100644
--- a/src/newgrf_commons.cpp
+++ b/src/newgrf_commons.cpp
@@ -220,6 +220,29 @@ void IndustryOverrideManager::SetEntitySpec(const IndustrySpec *inds)
_industry_specs[ind_id].enabled = true;
}
+void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
+{
+ IndustryGfx indt_id = this->AddEntityID(its->grf_prop.local_id, its->grf_prop.grffile->grfid, its->grf_prop.subst_id);
+
+ if (indt_id == invalid_ID) {
+ grfmsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring.");
+ return;
+ }
+
+ memcpy(&_industry_tile_specs[indt_id], its, sizeof(*its));
+
+ /* Now add the overrides. */
+ for (int i = 0; i < max_offset; i++) {
+ IndustryTileSpec *overridden_its = &_industry_tile_specs[i];
+
+ if (entity_overrides[i] != its->grf_prop.local_id) continue;
+
+ overridden_its->grf_prop.override = indt_id;
+ overridden_its->enabled = false;
+ entity_overrides[i] = invalid_ID;
+ }
+}
+
/** Function used by houses (and soon industries) to get information
* on type of "terrain" the tile it is queries sits on.
* @param tile TileIndex of the tile been queried
diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h
index f45594f14..59283ab66 100644
--- a/src/newgrf_commons.h
+++ b/src/newgrf_commons.h
@@ -76,8 +76,19 @@ class IndustryOverrideManager : public OverrideManagerBase
void SetEntitySpec(const IndustrySpec *inds);
};
+
+struct IndustryTileSpec;
+class IndustryTileOverrideManager : public OverrideManagerBase
+{
+ public:
+ IndustryTileOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) :
+ OverrideManagerBase(offset, maximum, invalid) {};
+ void SetEntitySpec(const IndustryTileSpec *indts);
+};
+
extern HouseOverrideManager _house_mngr;
extern IndustryOverrideManager _industry_mngr;
+extern IndustryTileOverrideManager _industile_mngr;
uint32 GetTerrainType(TileIndex tile);
TileIndex GetNearbyTile(byte parameter, TileIndex tile);
diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp
index 5c0d74134..402bccccb 100644
--- a/src/newgrf_industries.cpp
+++ b/src/newgrf_industries.cpp
@@ -19,6 +19,7 @@
* to those used by the game, the IDs used for overriding old industries must be
* translated when the idustry spec is set. */
IndustryOverrideManager _industry_mngr(NEW_INDUSTRYOFFSET, NUM_INDUSTRYTYPES, INVALID_INDUSTRYTYPE);
+IndustryTileOverrideManager _industile_mngr(NEW_INDUSTRYTILEOFFSET, NUM_INDUSTRYTILES, INVALID_INDUSTRYTILE);
/**
* Finds the distance for the closest tile with water/land given a tile