public void Update(double dT)
        {
            var pad = m_selectCtrler.GetState().Gamepad;

            m_leftThumbInput  = _ComputeThumbInput(pad.LeftThumbX, pad.LeftThumbY, LeftThumbSpec);
            m_rightThumbInput = _ComputeThumbInput(pad.RightThumbX, pad.RightThumbY, RightThumbSpec);

            //Trace.WriteLine("LeftThumbInput(Raw=" + m_leftThumbInput.RawMagnitude + ", Magnitude =" + m_leftThumbInput.Magnitude + ", Normalized=" + m_leftThumbInput.NormalizedMagnitude + ")");
            //Trace.WriteLine("RightThumbInput(Raw=" + m_rightThumbInput.RawMagnitude + ", Magnitude =" + m_rightThumbInput.Magnitude + ", Normalized=" + m_rightThumbInput.NormalizedMagnitude + ")");

            // process pad button input
            var s_buttonTable = new Tuple <InputSystem.PadButtons, GamepadButtonFlags>[]
            {
                Tuple.Create(InputSystem.PadButtons.Down, GamepadButtonFlags.DPadDown),
                Tuple.Create(InputSystem.PadButtons.Up, GamepadButtonFlags.DPadUp),
                Tuple.Create(InputSystem.PadButtons.Left, GamepadButtonFlags.DPadLeft),
                Tuple.Create(InputSystem.PadButtons.Right, GamepadButtonFlags.DPadRight),
            };

            foreach (var button in s_buttonTable)
            {
                bool flag = ((int)pad.Buttons & (int)button.Item2) != 0;
                if (m_buttonStateTable.ContainsKey(button.Item1))
                {
                    m_buttonStateTable[button.Item1] = flag;
                }
                else
                {
                    m_buttonStateTable.Add(button.Item1, flag);
                }
            }
        }
        /// <summary>
        /// compute ThumbInput data from game pad input
        /// </summary>
        /// <param name="thumbX">game pad input about x coord</param>
        /// <param name="thumbY">game pad input about y coord</param>
        /// <param name="spec">input spec data</param>
        /// <returns>computed data</returns>
        private InputSystem.ThumbInput _ComputeThumbInput(short thumbX, short thumbY, InputSystem.ThumbSpec spec)
        {
            var input = new InputSystem.ThumbInput();

            input.Direction    = new Vector2(thumbX, thumbY);
            input.RawMagnitude = input.Direction.Length();
            input.Direction.Normalize();

            if (input.RawMagnitude > spec.MinMagnitude)
            {
                input.Magnitude           = Math.Min(input.RawMagnitude, spec.MaxMagnitude);
                input.Magnitude          -= spec.MinMagnitude;
                input.NormalizedMagnitude = input.Magnitude / (spec.MaxMagnitude - spec.MinMagnitude);
            }
            else
            {
                input.Magnitude           = 0;
                input.NormalizedMagnitude = 0;
            }

            return(input);
        }