public static void DeductMagic(this ICharacterStateVariables state, int change, int?maxMagic = null)
        {
            var newValue = state.Magic() - change;

            if (maxMagic.HasValue)
            {
                state.EnsureMagicInBounds(newValue, maxMagic.Value);
            }
            else
            {
                state.Magic(newValue);
            }
        }
        public static void DeductHealth(this ICharacterStateVariables state, int change, int?maxHealth = null)
        {
            var newValue = state.Health() - change;

            if (maxHealth == null)
            {
                state.Health(newValue);
            }
            else
            {
                state.EnsureHealthInBounds(newValue, maxHealth.Value);
            }
        }
 public static void EnsureMagicInBounds(this ICharacterStateVariables state, int value, int maxMagic)
 {
     if (value > maxMagic)
     {
         state[CharacterStateVariableTypes.Magic] = maxMagic;
     }
     else if (value <= 0)
     {
         state[CharacterStateVariableTypes.Magic] = 0;
     }
     else
     {
         state[CharacterStateVariableTypes.Magic] = value;
     }
 }
 public static void EnsureHealthInBounds(this ICharacterStateVariables state, int value, int maxHealth)
 {
     if (value > maxHealth)
     {
         state[CharacterStateVariableTypes.Health] = maxHealth;
     }
     else if (value <= 0)
     {
         state[CharacterStateVariableTypes.Health] = 0;
     }
     else
     {
         state[CharacterStateVariableTypes.Health] = value;
     }
 }
 public static void Magic(this ICharacterStateVariables state, int value) => state[CharacterStateVariableTypes.Magic] = value;
 public static int Magic(this ICharacterStateVariables state) => (int)state.Get(CharacterStateVariableTypes.Magic);
 public static void Health(this ICharacterStateVariables state, int value) => state[CharacterStateVariableTypes.Health] = value;
 public static int Health(this ICharacterStateVariables state) => (int)state.Get(CharacterStateVariableTypes.Health);