There are a lot of Classes that you could use for that. You could create a logic for that in the GameState
or spawn your own BombManager in the GameState and save it in a Variable, so you can access it, but
all in all that still requires you to figure out a method to check that only one bomb can call the explosion.
Just a small note here: You are making a network game. The Overlap function is called on Server and Client.
So the Explosion actor will get spawned on both. But you only activate it on the Owning Client, which means you
assume the Overlap is only called by the Server. Make sure to use “Switch on Authority” to really limit the
spawning etc to the Server (and set the Explosion actor to replicate, so that the Server Spawn also spawns it for the client).
My idea:
Create your own GameState Blueprint. Create a function in there called “Try Spawning Explosion”. Give it a Transform as Input.
When overlapping in the Bomb, get the GameState, cast it to your GameStateClass and call the function + passing the Transform.
Now in the GameState, create a Variable of type “Explosion Reference”, so that you can store the spawned explosion Actor.
In the TrySpawningExplosion function, you now FIRST OF ALL check if this reference variable “IsValid”. Which checks if the Reference
is empty or not.
If it is EMPTY (so not Valid), spawn a new explosion, save it to the Variable and call Activate on it.
if it is NOT EMPTY (so Valid), don’t do anything.
Why? Because when spawning the Explosion and saving it, the Variable gets Valid and the next Bomb can’t call the Explosion
until the Variable is NotValid (empty) again.
It get’s empty by the GarbageCollector as soon as you Destroy the Explosion Actor, but you could also clean it manually from inside
the Explosion actor by just getting the GameState again and setting it to nothing.
Make sure to set your custom GameState class in the GameMode settings, like you do for the Controller and stuff.