From 240bba540ecf708dd91b0cef3608ca661fb2f22c Mon Sep 17 00:00:00 2001 From: belugas Date: Thu, 21 Jun 2007 17:09:10 +0000 Subject: (svn r10256) -Add: Addition of IndustryTileOverrideManager --- src/newgrf_commons.cpp | 23 +++++++++++++++++++++++ src/newgrf_commons.h | 11 +++++++++++ src/newgrf_industries.cpp | 1 + 3 files changed, 35 insertions(+) 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 -- cgit v1.2.3-54-g00ecf