summaryrefslogtreecommitdiff
path: root/src/newgrf_spritegroup.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/newgrf_spritegroup.h')
-rw-r--r--src/newgrf_spritegroup.h38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h
index 12b51c05d..c70901622 100644
--- a/src/newgrf_spritegroup.h
+++ b/src/newgrf_spritegroup.h
@@ -301,8 +301,40 @@ struct IndustryProductionSpriteGroup : SpriteGroup {
uint8 again;
};
+struct ResolverObject;
+
+struct ScopeResolver {
+ ResolverObject *ro;
+
+ ScopeResolver(ResolverObject *ro);
+ virtual ~ScopeResolver();
+
+ virtual uint32 GetRandomBits() const;
+ virtual uint32 GetTriggers() const;
+ virtual void SetTriggers(int triggers) const;
+
+ virtual uint32 GetVariable(byte variable, uint32 parameter, bool *available) const;
+ virtual void StorePSA(uint reg, int32 value);
+};
+
+struct TempScopeResolver : public ScopeResolver {
+ TempScopeResolver(ResolverObject *ro);
+
+ virtual uint32 GetRandomBits() const;
+ virtual uint32 GetTriggers() const;
+ virtual void SetTriggers(int triggers) const;
+
+ virtual uint32 GetVariable(byte variable, uint32 parameter, bool *available) const;
+ virtual void StorePSA(uint reg, int32 value);
+};
struct ResolverObject {
+ ResolverObject();
+ ResolverObject(const GRFFile *grffile, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0);
+ virtual ~ResolverObject();
+
+ TempScopeResolver temp_scope; ///< Temporary scope resolver to refer back to the methods of #ResolverObject.
+
CallbackID callback;
uint32 callback_param1;
uint32 callback_param2;
@@ -382,9 +414,13 @@ struct ResolverObject {
uint32 (*GetTriggers)(const struct ResolverObject*);
void (*SetTriggers)(const struct ResolverObject*, int);
uint32 (*GetVariable)(const struct ResolverObject *object, byte variable, uint32 parameter, bool *available);
- const SpriteGroup *(*ResolveReal)(const struct ResolverObject*, const RealSpriteGroup*);
+ const SpriteGroup *(*ResolveRealMethod)(const struct ResolverObject*, const RealSpriteGroup*);
void (*StorePSA)(struct ResolverObject*, uint, int32);
+ virtual const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const;
+
+ virtual ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0);
+
/**
* Returns the OR-sum of all bits that need reseeding
* independent of the scope they were accessed with.