diff options
Diffstat (limited to 'src/newgrf_town.h')
-rw-r--r-- | src/newgrf_town.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/newgrf_town.h b/src/newgrf_town.h index 659de7691..af79e0141 100644 --- a/src/newgrf_town.h +++ b/src/newgrf_town.h @@ -13,11 +13,37 @@ #define NEWGRF_TOWN_H #include "town_type.h" +#include "newgrf_spritegroup.h" /* Currently there is no direct town resolver; we only need to get town * variable results from inside stations, house tiles and industries, - * and to check the town's persistent storage. */ + * and to check the town's persistent storage. + * XXX Remove the functions. */ uint32 TownGetVariable(byte variable, uint32 parameter, bool *available, Town *t, const struct GRFFile *caller_grffile); void TownStorePSA(Town *t, const struct GRFFile *caller_grffile, uint pos, int32 value); +struct TownScopeResolver : public ScopeResolver { + Town *t; + bool readonly; + + TownScopeResolver(ResolverObject *ro, Town *t, bool readonly); + + virtual uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + virtual void StorePSA(uint reg, int32 value); +}; + +struct TownResolverObject : public ResolverObject { + TownScopeResolver town_scope; + + TownResolverObject(const struct GRFFile *grffile, Town *t, bool readonly); + + /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + { + switch (scope) { + case VSG_SCOPE_SELF: return &town_scope; + default: return &this->default_scope; // XXX return ResolverObject::GetScope(scope, relative); + } + } +}; + #endif /* NEWGRF_TOWN_H */ |