Remove fake/real indirection in HouseResolverObject

This commit is contained in:
Jonathan G Rennison
2020-02-03 18:31:03 +00:00
parent 6f6bac5212
commit 81a67b5b24
2 changed files with 61 additions and 28 deletions

View File

@@ -75,20 +75,39 @@ struct FakeHouseScopeResolver : public CommonHouseScopeResolver {
/** Resolver object to be used for houses (feature 07 spritegroups). */
struct HouseResolverObject : public ResolverObject {
CommonHouseScopeResolver *house_scope;
ScopeResolver *town_scope;
HouseScopeResolver house_scope;
TownScopeResolver town_scope;
HouseResolverObject(HouseID house_id, TileIndex tile = INVALID_TILE, Town *town = nullptr,
HouseResolverObject(HouseID house_id, TileIndex tile, Town *town,
CallbackID callback = CBID_NO_CALLBACK, uint32 param1 = 0, uint32 param2 = 0,
bool not_yet_constructed = false, uint8 initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0);
~HouseResolverObject();
ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override
{
switch (scope) {
case VSG_SCOPE_SELF: return this->house_scope;
case VSG_SCOPE_PARENT: return this->town_scope;
case VSG_SCOPE_SELF: return &this->house_scope;
case VSG_SCOPE_PARENT: return &this->town_scope;
default: return ResolverObject::GetScope(scope, relative);
}
}
GrfSpecFeature GetFeature() const override;
uint32 GetDebugID() const override;
};
/** Resolver object to be used for fake houses (feature 07 spritegroups). */
struct FakeHouseResolverObject : public ResolverObject {
FakeHouseScopeResolver house_scope;
FakeTownScopeResolver town_scope;
FakeHouseResolverObject(HouseID house_id,
CallbackID callback = CBID_NO_CALLBACK, uint32 param1 = 0, uint32 param2 = 0);
ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override
{
switch (scope) {
case VSG_SCOPE_SELF: return &this->house_scope;
case VSG_SCOPE_PARENT: return &this->town_scope;
default: return ResolverObject::GetScope(scope, relative);
}
}