1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-23 07:43:01 +01:00

Rewrite GetNameAndPrice using templated subfunction

This commit is contained in:
Aaron van Geffen
2025-10-18 17:23:15 +02:00
parent 75c2a01de9
commit 06fc4c8955

View File

@@ -1469,70 +1469,51 @@ namespace OpenRCT2::Ui::Windows
} }
} }
std::pair<StringId, money64> GetNameAndPrice(ScenerySelection selectedScenery) template<typename TObjectType>
std::pair<StringId, money64> GetNameAndPriceByType(const ScenerySelection& selectedScenery)
{ {
StringId name = STR_UNKNOWN_OBJECT_TYPE; auto* sceneryEntry = ObjectManager::GetObjectEntry<TObjectType>(selectedScenery.EntryIndex);
money64 price = kMoney64Undefined; if (sceneryEntry != nullptr)
if (selectedScenery.IsUndefined() && gSceneryPlaceCost != kMoney64Undefined)
{ {
price = gSceneryPlaceCost; return { sceneryEntry->name, sceneryEntry->price };
} }
else else
{
return { STR_UNKNOWN_OBJECT_TYPE, kMoney64Undefined };
}
}
std::pair<StringId, money64> GetNameAndPrice(const ScenerySelection& selectedScenery)
{
if (!selectedScenery.IsUndefined())
{ {
switch (selectedScenery.SceneryType) switch (selectedScenery.SceneryType)
{ {
case SCENERY_TYPE_SMALL: case SCENERY_TYPE_SMALL:
{ {
auto* sceneryEntry = ObjectManager::GetObjectEntry<SmallSceneryEntry>(selectedScenery.EntryIndex); return GetNameAndPriceByType<SmallSceneryEntry>(selectedScenery);
if (sceneryEntry != nullptr)
{
price = sceneryEntry->price;
name = sceneryEntry->name;
}
break;
} }
case SCENERY_TYPE_PATH_ITEM: case SCENERY_TYPE_PATH_ITEM:
{ {
auto* sceneryEntry = ObjectManager::GetObjectEntry<PathAdditionEntry>(selectedScenery.EntryIndex); return GetNameAndPriceByType<PathAdditionEntry>(selectedScenery);
if (sceneryEntry != nullptr)
{
price = sceneryEntry->price;
name = sceneryEntry->name;
}
break;
} }
case SCENERY_TYPE_WALL: case SCENERY_TYPE_WALL:
{ {
auto* sceneryEntry = ObjectManager::GetObjectEntry<WallSceneryEntry>(selectedScenery.EntryIndex); return GetNameAndPriceByType<WallSceneryEntry>(selectedScenery);
if (sceneryEntry != nullptr)
{
price = sceneryEntry->price;
name = sceneryEntry->name;
}
break;
} }
case SCENERY_TYPE_LARGE: case SCENERY_TYPE_LARGE:
{ {
auto* sceneryEntry = ObjectManager::GetObjectEntry<LargeSceneryEntry>(selectedScenery.EntryIndex); return GetNameAndPriceByType<LargeSceneryEntry>(selectedScenery);
if (sceneryEntry != nullptr)
{
price = sceneryEntry->price;
name = sceneryEntry->name;
}
break;
} }
case SCENERY_TYPE_BANNER: case SCENERY_TYPE_BANNER:
{ {
auto* sceneryEntry = ObjectManager::GetObjectEntry<BannerSceneryEntry>(selectedScenery.EntryIndex); return GetNameAndPriceByType<BannerSceneryEntry>(selectedScenery);
if (sceneryEntry != nullptr)
{
price = sceneryEntry->price;
name = sceneryEntry->name;
}
break;
} }
} }
} }
StringId name = STR_UNKNOWN_OBJECT_TYPE;
money64 price = gSceneryPlaceCost != kMoney64Undefined ? gSceneryPlaceCost : kMoney64Undefined;
return { name, price }; return { name, price };
} }