The Solution:
Create an abstract class
Spawner which sets custom bounds and has an amount of objects to spawn.
It sets the transform of the object and instantiates it with a custom prefab. The purpose of the abstract class
is that it increases the modularity of spawning. There are similarities in spawning both monsters and blocks,
like needing boundries and an amount of items to spawn. Having monster and block child classes now allow much more
customizability! For example, for a specific type of monster that is stronger than others, you may want to spawn less of them
or have them spawn in different bounds. This way you can create an
ImpSpawner with it's own custom prefab, amount of items,
and bounds. Or in the case of blocks, there are gem blocks and regular blocks. We can inject the functionality of a 50% spawn
probability within the spawn method of the block spawner child class, as seen below.