(svn r16402) -Codechange: make Resolve a function of SpriteGroup
This commit is contained in:
@@ -50,6 +50,8 @@ extern SpriteGroupPool _spritegroup_pool;
|
||||
struct SpriteGroup : SpriteGroupPool::PoolItem<&_spritegroup_pool> {
|
||||
protected:
|
||||
SpriteGroup(SpriteGroupType type) : type(type) {}
|
||||
/** Base sprite group resolver */
|
||||
virtual const SpriteGroup *Resolve(struct ResolverObject *object) const { return this; };
|
||||
|
||||
public:
|
||||
virtual ~SpriteGroup() {}
|
||||
@@ -59,6 +61,20 @@ public:
|
||||
virtual SpriteID GetResult() const { return 0; }
|
||||
virtual byte GetNumResults() const { return 0; }
|
||||
virtual uint16 GetCallbackResult() const { return CALLBACK_FAILED; }
|
||||
|
||||
/**
|
||||
* ResolverObject (re)entry point.
|
||||
* This cannot be made a call to a virtual function because virtual functions
|
||||
* do not like NULL and checking for NULL *everywhere* is more cumbersome than
|
||||
* this little helper function.
|
||||
* @param group the group to resolve for
|
||||
* @param object information needed to resolve the group
|
||||
* @return the resolved group
|
||||
*/
|
||||
static const SpriteGroup *Resolve(const SpriteGroup *group, ResolverObject *object)
|
||||
{
|
||||
return group == NULL ? NULL : group->Resolve(object);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -79,6 +95,9 @@ struct RealSpriteGroup : SpriteGroup {
|
||||
byte num_loading; ///< Number of loading groups
|
||||
const SpriteGroup **loaded; ///< List of loaded groups (can be SpriteIDs or Callback results)
|
||||
const SpriteGroup **loading; ///< List of loading groups (can be SpriteIDs or Callback results)
|
||||
|
||||
protected:
|
||||
const SpriteGroup *Resolve(ResolverObject *object) const;
|
||||
};
|
||||
|
||||
/* Shared by deterministic and random groups. */
|
||||
@@ -159,6 +178,9 @@ struct DeterministicSpriteGroup : SpriteGroup {
|
||||
|
||||
/* Dynamically allocated, this is the sole owner */
|
||||
const SpriteGroup *default_group;
|
||||
|
||||
protected:
|
||||
const SpriteGroup *Resolve(ResolverObject *object) const;
|
||||
};
|
||||
|
||||
enum RandomizedSpriteGroupCompareMode {
|
||||
@@ -180,6 +202,9 @@ struct RandomizedSpriteGroup : SpriteGroup {
|
||||
byte num_groups; ///< must be power of 2
|
||||
|
||||
const SpriteGroup **groups; ///< Take the group with appropriate index:
|
||||
|
||||
protected:
|
||||
const SpriteGroup *Resolve(ResolverObject *object) const;
|
||||
};
|
||||
|
||||
|
||||
@@ -316,9 +341,4 @@ struct ResolverObject {
|
||||
ResolverObject() : procedure_call(false) { }
|
||||
};
|
||||
|
||||
|
||||
/* Base sprite group resolver */
|
||||
const SpriteGroup *Resolve(const SpriteGroup *group, ResolverObject *object);
|
||||
|
||||
|
||||
#endif /* NEWGRF_SPRITEGROUP_H */
|
||||
|
Reference in New Issue
Block a user