//returns the analog value associated with the analog inputs
 public float GetAnalogValue(JoyAnalog ja)
 {
     switch(ja){
     case JoyAnalog.DPadHorizontal:
         return GetDPadHoriz();
     case JoyAnalog.DPadVertical:
         return GetDPadVert();
     case JoyAnalog.LeftStickHorizontal:
         return GetLeftStickHoriz();
     case JoyAnalog.LeftStickVertical:
         return GetLeftStickVert();
     case JoyAnalog.RightStickHorizontal:
         return GetRightStickHoriz();
     case JoyAnalog.RightStickVertical:
         return GetRightStickVert();
     case JoyAnalog.LeftTrigger:
         return GetLeftTrigger();
     case JoyAnalog.RightTrigger:
         return GetRightTrigger();
     }
     return 0.0f;
 }
 public string GetButtonName(JoyAnalog j)
 {
     string name = _buttons.GetButtonName((int)j);
     return (name == "")? j.ToString() : name;
 }
    bool RemoveKey(Hashtable cfg, JoyAnalog ja, int jplayer, KeyConfig except)
    {
        ArrayList al = null;
        if( FindKey(cfg, ja, jplayer, out al) ){

            foreach(KeyConfig e in al){
                if( e == except ) continue;

                e.JoystickAxis = JoyAnalog.None;
            }
        }
        return al.Count >= 1 && !(al.Count == 1 && al.Contains(except));
    }
 bool HasKey(KeyConfig config, JoyAnalog ja, int jplayer)
 {
     if( config == null ) return false;
     return config.JoystickAxis == ja && config._joyAxisPlayer == jplayer;
 }
    string GetControllerKeyName(JoyAnalog ja, int jplayer)
    {
        ControllerManager.JoyInterface ji = CMRef.GetController(jplayer);

        if(ji != null)
        {
            return "P" + jplayer + " " + ji.GetButtonName(ja);
        }
        else
        {
            return "P" + jplayer + " " + ja.ToString();
        }
    }
    bool FindKey(Hashtable cfg, JoyAnalog ja, int jplayer, out ArrayList keyConfigList)
    {
        bool found = false;
        keyConfigList = new ArrayList();

        foreach(IDictionaryEnumerator d in cfg){
            KeyConfig config = d.Value as KeyConfig;

            if( HasKey(config, ja, jplayer) ) keyConfigList.Add(config);
        }

        return found;
    }
    //edit the current config if a analog joystick input was changed
    bool EditKey( KeyConfig config, EditStates es, JoyAnalog ja, int jplayer)
    {
        if( !( (es == EditStates.PosKey && !config.isAxis) || (es == EditStates.NegKey && config.isAxis) ) || !config.isAxis ) return false;

        config._joyAxisPlayer = jplayer;
        config.JoystickAxis = ja;

        if(config._biDirLink != null){

            KeyConfig HorizConfig;
            KeyConfig VertConfig;

            if( config.Direction == BiDir.Horizontal ){
                HorizConfig = config;
                VertConfig = config._biDirLink;
            }else{
                VertConfig = config;
                HorizConfig = config._biDirLink;
            }

            // SET
            switch(ja){
            case JoyAnalog.DPadHorizontal:
            case JoyAnalog.DPadVertical:
                ClearKeys(HorizConfig, true);
                ClearKeys(VertConfig, true);

                HorizConfig._joyAxisPlayer = jplayer;
                HorizConfig.JoystickAxis = JoyAnalog.DPadHorizontal;
                VertConfig._joyAxisPlayer = jplayer;
                VertConfig.JoystickAxis = JoyAnalog.DPadVertical;
                break;
            case JoyAnalog.LeftStickHorizontal:
            case JoyAnalog.LeftStickVertical:
                ClearKeys(HorizConfig, true);
                ClearKeys(VertConfig, true);

                HorizConfig._joyAxisPlayer = jplayer;
                HorizConfig.JoystickAxis = JoyAnalog.LeftStickHorizontal;
                VertConfig._joyAxisPlayer = jplayer;
                VertConfig.JoystickAxis = JoyAnalog.LeftStickVertical;
                break;
            case JoyAnalog.RightStickHorizontal:
            case JoyAnalog.RightStickVertical:
                ClearKeys(HorizConfig, true);
                ClearKeys(VertConfig, true);

                HorizConfig._joyAxisPlayer = jplayer;
                HorizConfig.JoystickAxis = JoyAnalog.RightStickHorizontal;
                VertConfig._joyAxisPlayer = jplayer;
                VertConfig.JoystickAxis = JoyAnalog.RightStickVertical;
                break;
            default:
                return false;
            }
        }
        else
        {
            // SET
            ClearKeys(config, true);
            config._joyAxisPlayer = jplayer;
            config.JoystickAxis = ja;
        }
        return true;
    }