So as evidenced by questions such as
references to the level blueprint within a class are not considered a Good Thing.
This makes sense, because directly calling events on the level would be the blueprint equivalent of tight coupling between the two classes.
However, it does leave me feeling a little perplexed as to why we bother having the ability to place event dispatchers in the level blueprint at all. If nothing external to the level graphs can issue callbacks into the level blueprint, at least in blueprint, it seems pointless to have a mechanism present for that to occur.
Can the event dispatchers created in a level blueprint be called from C++, or is there some other use case I am just having a brain fart and not recalling?
To elaborate on my use case, I have a number of matinee sequences I would like to have play in response to a number of instances of a blueprint class being interacted with. My initial intention was to have MatineeControlObjectInteracted(int index) implemented as a dispatcher in the level, with my class definition getting a reference to my level and calling that dispatcher with a user variable-specified, per-instance index.
I know I can create the dispatcher in the class, and then bind an event in the level to the class instance’s dispatcher. but this involves manually having to bind every instance’s dispatcher, which seems impractical.
I really would rather not have to create another blueprint actor to place in the level just to provide central point of communication using GetAllActorsOfClass - this idea of a ‘handler’ object always seemed messy to me. More objects in the hierarchy, for one thing, and this functionality is only needed for a single level so making another BP seems overkill.
Seems like a good idea to me to have some way to say “I want to bind this handler in my level to this event for all instances of class x” (essentially, a static dispatcher that passes a reference to the instance that fired it), as a supplement to our current “I want this handler in my level to be bound to an event on this instance, and this one, and this one”.
There are a couple of other solutions to my specific issue such as creating a direct reference to a matinee object in my ControlObject class and not bothering to go through the level blueprint at all, which now I think about it is probably going to be my optimal solution.
I’d still like to know if there’s a reason levels can have Event Dispatchers though, seeing as they seem to be un-callable and standard Custom Events would do the trick internally to the level graph.