public Achievement(Interfaces.IDataEntry data, CheckValue cval = CheckValue.ValueEqual, object val2Check = null)
        {
            if (val2Check != null && !(val2Check is string ^ val2Check is int))
            {
                throw new Exception("Invalid Data type");
            }

            if (data is Switch)
            {
                switch (cval)
                {
                case CheckValue.ValueEqual:
                    _checkValue = CheckValue.ValueON;
                    break;

                case CheckValue.ValueGreater:
                case CheckValue.ValueGreaterEqual:
                case CheckValue.ValueLess:
                case CheckValue.ValueLessEqual:
                    throw new Exception("Invalid Check Type - Numeral Booleans cannot be used on Switches");

                default:
                    _checkValue = cval;
                    break;
                }
            }
            if (data is Variable)
            {
                switch (cval)
                {
                case CheckValue.ValueOFF:
                case CheckValue.ValueON:
                    throw new Exception("Invalid Check Type - Switch Checks cannot be used on Variables");

                case CheckValue.ValueGreater:
                case CheckValue.ValueGreaterEqual:
                case CheckValue.ValueLess:
                case CheckValue.ValueLessEqual:
                    if (val2Check is string)
                    {
                        throw new Exception("Invalid Check Value - Cannot test Numeral Booleans on String Variables");
                    }
                    break;

                default:
                    _checkValue = cval;
                    break;
                }
            }

            _value              = val2Check;
            _unlocked           = false;
            _data               = data;
            data.OnValueChange += ValueCheck;
        }
        public Achievement(Interfaces.IDataEntry data, CheckValue cval = CheckValue.ValueEqual, object val2Check = null)
        {
            if (val2Check != null && !(val2Check is string ^ val2Check is int))
                throw new Exception("Invalid Data type");

            if (data is Switch)
            {
                switch (cval)
                {
                    case CheckValue.ValueEqual:
                        _checkValue = CheckValue.ValueON;
                        break;
                    case CheckValue.ValueGreater:
                    case CheckValue.ValueLess:
                        throw new Exception("Invalid Check Type - Numeral Booleans cannot be used on Switches");
                    default :
                        _checkValue = cval;
                        break;
                }
            }
            if (data is Variable)
            {
                switch (cval)
                {
                    case CheckValue.ValueOFF:
                    case CheckValue.ValueON:
                        throw new Exception("Invalid Check Type - Switch Checks cannot be used on Variables");
                    case CheckValue.ValueGreater:
                    case CheckValue.ValueLess:
                        if (val2Check is string)
                            throw new Exception("Invalid Check Value - Cannot test Numeral Booleans on String Variables");
                        break;
                    default:
                        _checkValue = cval;
                        break;
                }
            }

            _value = val2Check;
            _unlocked = false;
            _data = data;
            data.OnValueChange += ValueCheck;
        }
 public void RegisterData(Interfaces.IDataEntry data)
 {
     _data = data;
     data.OnValueChange += ValueCheck;
 }
 public void RegisterData(Interfaces.IDataEntry data)
 {
     _data = data;
     data.OnValueChange += ValueCheck;
 }