Why don't you make button.show() simply do an early exit if the visibility state being passed in is already the same? I'm surprised it doesn't already work this way.
void Button::show(bool visibilevisible) {
if (visible == _currentVisibility) {
return;
}
// complicated CPU intensive logic below
_currentVisibility = visible;
}
Then you can skip all these variable checks and say:
void Update()
{
handleInputEvents();
button.show(bShow);
}
Can't change the Button control? Make a wrapper or use inheritance
class ButtonWrapper : public Button {
std::optional<bool> _visibility;
void ShowFast(bool visibility) {
if (_visibility.hasValue() && *_visibility == visibility) {
return
}
show(visibility);
*_visibility = visibility;
}
}
Or
class ButtonWrapper {
std::optional<bool> _visibility;
Button* _b;
public:
ButtonWrapper(Button *b) : _b(b) {}
void ShowFast(bool visibility) {
if (_visibility.hasValue() && *_visibility == visibility) {
return
}
_b->show(visibility);
*_visibility = visibility;
}
}