summaryrefslogtreecommitdiff
path: root/src/newgrf_spritegroup.h
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2012-11-10 20:37:31 +0000
committeralberth <alberth@openttd.org>2012-11-10 20:37:31 +0000
commit438495b433f5b4d3ce81f8efc7d655d2337582fe (patch)
treee4a239bd21a6ef692d9155d469058a1526c686d3 /src/newgrf_spritegroup.h
parentfa3d470a051f5e5eae6db45635280fc33280f7f3 (diff)
downloadopenttd-438495b433f5b4d3ce81f8efc7d655d2337582fe.tar.xz
(svn r24678) -Codechange: Introduce scope resolver base class and prepare for adding derived classes.
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.