Create Actor “GridManager”. And then you can either reference that actor and call event in it. Or other way around GridManager finds player controller and calls events there.
Do not use level blueprint if you are not really forced to do it because:
- loading order, from level blueprint you are never sure if other actors are loaded
- not all can be referenced, not all nodes can be used in it
- every new level and you need to make new blueprint script inside
- using single actor that keeps all code for some functionality is easier to maintain later
Also with actors you can create dispatchers, add blueprint interfaces, inheritance, CPP base code class etc.