Add NewGRFClass helper method for whether any UI classes available

This commit is contained in:
Jonathan G Rennison
2023-01-03 03:31:09 +00:00
parent 5e76e6fb07
commit 417416d19b
4 changed files with 16 additions and 2 deletions

View File

@@ -57,6 +57,7 @@ public:
static void Assign(Tspec *spec); static void Assign(Tspec *spec);
static uint GetClassCount(); static uint GetClassCount();
static uint GetUIClassCount(); static uint GetUIClassCount();
static bool HasUIClass();
static Tid GetUIClass(uint index); static Tid GetUIClass(uint index);
static NewGRFClass *Get(Tid cls_id); static NewGRFClass *Get(Tid cls_id);

View File

@@ -131,6 +131,18 @@ DEFINE_NEWGRF_CLASS_METHOD(uint)::GetUIClassCount()
return cnt; return cnt;
} }
/**
* Get whether at least one class is available to the user.
* @return Whether at least one class is available to the user.
*/
DEFINE_NEWGRF_CLASS_METHOD(bool)::HasUIClass()
{
for (uint i = 0; i < Tmax && classes[i].global_id != 0; i++) {
if (classes[i].GetUISpecCount() > 0) return true;
}
return false;
}
/** /**
* Get the nth-class with user available specs. * Get the nth-class with user available specs.
* @param index UI index of a class. * @param index UI index of a class.
@@ -223,6 +235,7 @@ DEFINE_NEWGRF_CLASS_METHOD(const Tspec *)::GetByGrf(uint32 grfid, byte local_id,
template NewGRFClass<Tspec, Tid, Tmax> *name::Get(Tid cls_id); \ template NewGRFClass<Tspec, Tid, Tmax> *name::Get(Tid cls_id); \
template uint name::GetClassCount(); \ template uint name::GetClassCount(); \
template uint name::GetUIClassCount(); \ template uint name::GetUIClassCount(); \
template bool name::HasUIClass(); \
template Tid name::GetUIClass(uint index); \ template Tid name::GetUIClass(uint index); \
template const Tspec *name::GetSpec(uint index) const; \ template const Tspec *name::GetSpec(uint index) const; \
template int name::GetUIFromIndex(int index) const; \ template int name::GetUIFromIndex(int index) const; \

View File

@@ -755,7 +755,7 @@ static WindowDesc _build_object_desc(
Window *ShowBuildObjectPicker() Window *ShowBuildObjectPicker()
{ {
/* Don't show the place object button when there are no objects to place. */ /* Don't show the place object button when there are no objects to place. */
if (ObjectClass::GetUIClassCount() > 0) { if (ObjectClass::HasUIClass()) {
return AllocateWindowDescFront<BuildObjectWindow>(&_build_object_desc, 0); return AllocateWindowDescFront<BuildObjectWindow>(&_build_object_desc, 0);
} }
return nullptr; return nullptr;

View File

@@ -221,7 +221,7 @@ struct TerraformToolbarWindow : Window {
{ {
/* Don't show the place object button when there are no objects to place. */ /* Don't show the place object button when there are no objects to place. */
NWidgetStacked *show_object = this->GetWidget<NWidgetStacked>(WID_TT_SHOW_PLACE_OBJECT); NWidgetStacked *show_object = this->GetWidget<NWidgetStacked>(WID_TT_SHOW_PLACE_OBJECT);
show_object->SetDisplayedPlane(ObjectClass::GetUIClassCount() != 0 ? 0 : SZSP_NONE); show_object->SetDisplayedPlane(ObjectClass::HasUIClass() ? 0 : SZSP_NONE);
SetWidgetDisabledState(WID_TT_BUY_LAND, _settings_game.construction.purchase_land_permitted == 0); SetWidgetDisabledState(WID_TT_BUY_LAND, _settings_game.construction.purchase_land_permitted == 0);
} }