Esta serie de posts probablemente sea larga, pero cubre conceptos que un programador C# tendría que dominar. Desde que arrancamos con C# estamos acostumbrados a la definición de clase como elemento básico para implementar código. Sin embargo, existen otros tipos de entidades que podemos definir como son enums, structs, interfaces y clases abstractas por mencionar algunas.
La entidad Enum
La entidad enum se refiere a enumeraciones, es una lista de strings ya definidos y enumerados. Usualmente muy usada para definir estados de un objeto o del juego, categorías, atributos fijos como serian puntos cardinales, y un gran etc. Los enums pueden ser casteados como enteros y desde enteros sin problema, pueden ser convertidos a string con su valor de enumeración, no pueden repetirse y pueden ser comparados. En teoría, su funcionalidad puede ser equiparada a un simple int, excepto que el enum te provee la referencia del contexto de cada valor del entero.

En el ejemplo de PowerUpType, no se especifica índice, por ende, se asigna por defecto, secuencialmente empezando de cero. Así que el índice de Repair seria 0, y el de Cash seria 3. Sin embargo, en la definición del enum podemos ponerle los índices que queramos.

Usualmente una buena práctica es contener todos los enums en una carpeta específica para ellos.

Los enums son extremadamente útiles para los switch cases. En el ejemplo de los powerups por ejemplo, los powerups se comportan prácticamente de la misma manera, el jugador los toca y estos desaparecen y causan el efecto. Todo el comportamiento de los powerups es común excepto por el efecto que causan en el objeto que los agarre. Por ende, tiene sentido crear un único script y variar el efecto según el tipo de powerup.

A nivel de clase podemos definirnos una variable pública del tipo de nuestro enum

Y luego en el editor va a estar expuesto como un drop down

Mas allá del uso del ejemplo, hay varias cosas que vale la pena expandir sobre enums, por ejemplo, el tipo de operaciones que se pueden hacer. Podemos obtener los valores y la cantidad de valores de un enum, podemos leer un valor como entero, o leer un entero como valor del enum, y también podemos comparar y operar sobre el enum.
