summaryrefslogtreecommitdiff
path: root/src/newgrf_town.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/newgrf_town.h')
-rw-r--r--src/newgrf_town.h28
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 */