As a general heads up “The cursor is on” events do not care about button visibility. It cares about location.
With that said, every event that deals with buttons need to have their own visibility required as a condition.
E.g. Lets say your other layer with buttons is called “Test”.
For every event that deals with buttons on test, they need to have “Layer “Test” is visible” as a condition.
Additionally, if their layer is going to remain visible while Research is visible, but are “on top” of research buttons, and you don’t want the research buttons to activate, this means you must also go into every Research button event, and add “Layer “Test” is visible (inverted)” as a condition.
You can make all of this simpler by having a parent event that is just “Layer “Blah” is visible” by itself, and make the rest of your events subevents of that.
Just to clarify in case it comes up: Layer visibility DOES NOT impact Object visibility for conditions. Objects on a hidden layer are not treated as hidden for purposes of conditions such as “ObjectBlah is visible (not marked as hidden)”
Edit:
Also, as a heads up, these two events are potentially going to conflict. Since all events are processed every frame, it’s either going to immediately hide then unhide the object, or the inverse, if you move the cursor off the engineR object while the button is held.
You will need to implement some kind of “mouse has been clicked” toggle variable where you track if the mouse has been released since it was last clicked, require that variable to be true as part of the event conditions, then set it to false as the last action in the event. You’ll need a separate event that checks that the mouse is not pressed (Do not use released conditions, they won’t apply for this purposes), and set the variable back to true.
Double also, whenever dealing with any hide or show events, you want to use the trigger once condition.