Handling different combinations of enum selection

I’m trying to build a system where the player can configure the bullet used by its gun in a highly customizable way.

I would like to have options for:

  • The status effect applied by the bullet (none, burning, freezing, poisoning)
  • The way it handles collisions (pierce targets, explodes, bounces)
  • Trajectory modifiers (none, follow mouse position, autro track enemies)

I’ve done this using enums (I have one enum for each one of these categories), but I will have to configure some attributes according to what is selected. Example:

  • For an explosive round, I will have to configure the radius of the explosion and its damage
  • For a burning round, I will have to determine the duration of the DoT effect and its damage

… and so on

I was wondering what is the most effective way of handling this in a OOP approach. I don’t expect you guys to do all the work for me, but if you could guide my through the best approach (e.g. “create a class”/“use scriptable objects”/other) it would be really helpful.


If you select an effect type from the UI, a switch could then show the relevant attribute to input:

  doTInput.SetActive = true;

allowing you to input and update the doT value

when complete you can then do a call to create a new bullet object with the values you need.

var customBullet = new Bullet(dot, radius, damage...)

class Bullet{
 public int dot;
 public int radius;
 public int damage;

  Bullet (doT, radius...damage){
   this.doT = doT;
   this.radius = radius;
   this.damage = damage;


giving you a customBullet object should then be able to use for further logic…

OnBulletHit(Bullet customBullet){
 if(customBullet.doT >0){
...do fire effect etc.
...do explosion effect.

Sorry if this isn’t too helpful in terms of implementation it’s just what I could think of at the moment. I’m sure someone else could figure a more robust solution that simply checking the bullet object for what values it has out of all of them…