public AxisInputMap(bool isVertical, AxisSource primarySource, AxisSource secondarySource = null)
        {
            if (primarySource == null)
                throw new Exception("An axis must have at least the primary source.");

            this.isVertical = isVertical;
            this.PrimarySource = primarySource;
            this.SecondarySource = secondarySource;
        }
        public AxisInputMap(bool isVertical, AxisSource primarySource, AxisSource secondarySource = null)
        {
            if (primarySource == null)
            {
                throw new Exception("An axis must have at least the primary source.");
            }

            this.isVertical      = isVertical;
            this.PrimarySource   = primarySource;
            this.SecondarySource = secondarySource;
        }
        protected void MapInputsPerMapInAxisSource(
            AxisSource axisSource, Maps map,
            Dictionary<MappableKeys, HashSet<Maps>> mapsPerKeyboardKey,
            Dictionary<MouseButton, HashSet<Maps>> mapsPerMouseButton,
            Dictionary<XboxJoystickButtons, HashSet<Maps>> mapsPerJoystickButton,
            Dictionary<XboxJoystickDPad, HashSet<Maps>> mapsPerJoystickDPad,
            Dictionary<MouseAxis, HashSet<Maps>> mapsPerMouseAxis,
            Dictionary<XboxJoystickAxis, HashSet<Maps>> mapsPerJoystickAxis
            )
        {
            if (axisSource == null) return;

            if (axisSource.GetType() == typeof(KeyboardAxisSource))
            {
                RelateMapWithKeyboardKey(map, mapsPerKeyboardKey, ((KeyboardAxisSource)axisSource).positiveKeyCode);
                RelateMapWithKeyboardKey(map, mapsPerKeyboardKey, ((KeyboardAxisSource)axisSource).negativeKeyCode);
            }
            else if (axisSource.GetType() == typeof(MouseAxisSource))
            {
                RelateMapWithMouseAxis(map, mapsPerMouseAxis, ((MouseAxisSource)axisSource).axis);
            }
            else if (axisSource.GetType() == typeof(XboxJoystickAxisSource))
            {
                RelateMapWithJoystickAxis(map, mapsPerJoystickAxis, ((XboxJoystickAxisSource)axisSource).axis);
            }
            else if (axisSource.GetType() == typeof(XboxJoystickButtonAsAxisSource))
            {
                RelateMapWithJoystickButton(map, mapsPerJoystickButton, ((XboxJoystickButtonAsAxisSource)axisSource).positiveButton);
                RelateMapWithJoystickButton(map, mapsPerJoystickButton, ((XboxJoystickButtonAsAxisSource)axisSource).negativeButton);
            }
            else if (axisSource.GetType() == typeof(XboxJoystickDPadButtonAsAxisSource))
            {
                RelateMapWithJoystickDPad(map, mapsPerJoystickDPad, ((XboxJoystickDPadButtonAsAxisSource)axisSource).positiveButton);
                RelateMapWithJoystickDPad(map, mapsPerJoystickDPad, ((XboxJoystickDPadButtonAsAxisSource)axisSource).negativeButton);
            }
        }