<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Last Ray of Hope &#187; Input</title>
	<atom:link href="http://www.lastrayofhope.com/tag/input/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lastrayofhope.com</link>
	<description>Home of Kaluriel Hargrove</description>
	<lastBuildDate>Thu, 02 Feb 2012 00:21:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>AGT: Using XBox360 Pad with XInput</title>
		<link>http://www.lastrayofhope.com/2008/01/07/agt-using-xbox360-pad-with-xinput/</link>
		<comments>http://www.lastrayofhope.com/2008/01/07/agt-using-xbox360-pad-with-xinput/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 19:12:22 +0000</pubDate>
		<dc:creator>Kaluriel</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Legend of Bob]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[Input]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[XBox]]></category>

		<guid isPermaLink="false">http://www.lastrayofhope.com/?p=2193</guid>
		<description><![CDATA[For my AGT assignment I've decided to use a XBox 360 pad for input since I found out it can be used in Windows. To do this requires use of the XInput library that comes with DirectX. So after setting up my input manager which automatically updates all input devices (there can be a maximum [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lastrayofhope.com/wp-content/uploads/2008/01/800px-xbox_360_controller.jpg"><img class="alignleft size-medium wp-image-2256" title="XBox 360 Controller" src="http://www.lastrayofhope.com/wp-content/uploads/2008/01/800px-xbox_360_controller-300x214.jpg" alt="XBox 360 Controller" width="180" height="128" /></a>For my AGT assignment I've decided to use a XBox 360 pad for input since I found out it can be used in Windows. To do this requires use of the XInput library that comes with DirectX.</p>
<p>So after setting up my input manager which automatically updates all input devices (there can be a maximum of four pad devices, defined by the variable XUSER_MAX_COUNT in the XInput header), I began work on the controller class to manage the state information about the pad.</p>
<p>The following header is my source for this class, when a controller is created, an id is passed to it that is used as the pad index for XInput.</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="cpp" style="font-family:monospace;"><span class="co2">#ifndef CONTROLLER_H_INCLUDED</span>
<span class="co2">#define CONTROLLER_H_INCLUDED</span>
&nbsp;
<span class="co1">// --- [ libraries ] ------------------------------------------</span>
<span class="co2">#pragma comment(lib, &quot;XInput.lib&quot;)</span>
&nbsp;
<span class="co1">// --- [ includes ] -------------------------------------------</span>
<span class="co2">#include &lt;windows.h&gt;</span>
<span class="co2">#include &lt;XInput.h&gt;</span>
&nbsp;
<span class="co1">// --- [ class ] ----------------------------------------------</span>
<span class="kw2">class</span> Controller
<span class="br0">&#123;</span>
	<span class="co1">//</span>
	<span class="kw2">public</span><span class="sy4">:</span>
		<span class="kw2">enum</span> Button
		<span class="br0">&#123;</span>
			kButton_DPad_Up <span class="sy1">=</span> 0,
			kButton_DPad_Down,
			kButton_DPad_Left,
			kButton_DPad_Right,
			kButton_Start,
			kButton_Back,
			kButton_Thumb_Left,
			kButton_Thumb_Right,
			kButton_Shoulder_Left,
			kButton_Shoulder_Right,
			kButton_X,
			kButton_Y,
			kButton_A,
			kButton_B
		<span class="br0">&#125;</span>
&nbsp;
		<span class="kw2">enum</span> AxisType
		<span class="br0">&#123;</span>
			kAxis_Left <span class="sy1">=</span> 0,
			kAxis_Right,
			kNumAxisTypes
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
		<span class="kw2">enum</span> MotorType
		<span class="br0">&#123;</span>
			kMotor_Left <span class="sy1">=</span> 0,
			kMotor_Right,
			kNumMotorTypes
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
		<span class="kw2">enum</span> TriggerType
		<span class="br0">&#123;</span>
			kTrigger_Left <span class="sy1">=</span> 0,
			kTrigger_Right,
			kNumTriggerTypes
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
		<span class="kw4">struct</span> AxisData
		<span class="br0">&#123;</span>
			<span class="kw4">double</span> x<span class="sy4">;</span>
			<span class="kw4">double</span> y<span class="sy4">;</span>
		<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Attributes</span>
	<span class="kw2">private</span><span class="sy4">:</span>
		<span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> m_id<span class="sy4">;</span>
		<span class="kw4">bool</span> m_isConnected<span class="sy4">;</span>
&nbsp;
		<span class="kw4">unsigned</span> <span class="kw4">int</span> m_currentButtons<span class="sy4">;</span>
		<span class="kw4">unsigned</span> <span class="kw4">int</span> m_previousButtons<span class="sy4">;</span>
&nbsp;
		AxisData m_axis<span class="br0">&#91;</span>kNumAxisTypes<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="kw4">float</span> m_triggers<span class="br0">&#91;</span>kNumTriggerTypes<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="kw4">double</span> m_motorSpeed<span class="br0">&#91;</span>kNumMotorTypes<span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Functions</span>
	<span class="kw2">public</span><span class="sy4">:</span>
		<span class="co1">// Constructor</span>
		Controller<span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> inControllerId <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
		<span class="co1">// Check button has just been pressed</span>
		<span class="kw4">bool</span> IsButtonDown<span class="br0">&#40;</span> <span class="kw4">const</span> Button inButton <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> <span class="br0">&#40;</span> ~m_previousButtons <span class="sy3">&amp;</span> m_currentButtons <span class="br0">&#41;</span> <span class="sy3">&amp;</span> <span class="br0">&#40;</span> 1 <span class="sy1">&lt;&lt;</span> inButton <span class="br0">&#41;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Check button has just been released</span>
		<span class="kw4">bool</span> IsButtonUp<span class="br0">&#40;</span> <span class="kw4">const</span> Button inButton <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> <span class="br0">&#40;</span> m_previousButtons <span class="sy3">&amp;</span> ~m_currentButtons <span class="br0">&#41;</span> <span class="sy3">&amp;</span> <span class="br0">&#40;</span> 1 <span class="sy1">&lt;&lt;</span> inButton <span class="br0">&#41;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Check button is pressed</span>
		<span class="kw4">bool</span> IsButtonPressed<span class="br0">&#40;</span> <span class="kw4">const</span> Button inButton <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_currentButtons <span class="sy3">&amp;</span> <span class="br0">&#40;</span> 1 <span class="sy1">&lt;&lt;</span> inButton <span class="br0">&#41;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Thumb Axis</span>
		<span class="kw4">void</span> GetAxis<span class="br0">&#40;</span> <span class="kw4">const</span> AxisType inType, AxisData <span class="sy3">&amp;</span> outData <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			outData <span class="sy1">=</span> m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Trigger Values</span>
		<span class="kw4">float</span> GetTrigger<span class="br0">&#40;</span> <span class="kw4">const</span> TriggerType inType <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_triggers<span class="br0">&#91;</span>inType<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Motor Speed</span>
		<span class="kw4">double</span> GetMotorSpeed<span class="br0">&#40;</span> <span class="kw4">const</span> MotorType inType <span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_motorSpeed<span class="br0">&#91;</span>inType<span class="br0">&#93;</span><span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Set MotorSpeed</span>
		<span class="kw4">void</span> SetMotorSpeed<span class="br0">&#40;</span> <span class="kw4">const</span> MotorType inType, <span class="kw4">const</span> <span class="kw4">double</span> inValue <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
		<span class="co1">// Check Controller is Connected</span>
		<span class="kw4">bool</span> IsConnected<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_isConnected<span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Get Controller Id</span>
		<span class="kw4">unsigned</span> <span class="kw4">int</span> GetId<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw4">const</span>
		<span class="br0">&#123;</span>
			<span class="kw1">return</span> m_id<span class="sy4">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		<span class="co1">// Update</span>
		<span class="kw4">void</span> Update<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	<span class="kw2">private</span><span class="sy4">:</span>
		<span class="co1">// Update an Axis</span>
		<span class="kw4">void</span> UpdateAxis<span class="br0">&#40;</span> <span class="kw4">const</span> AxisType inType, <span class="kw4">const</span> <span class="kw4">short</span> inX, <span class="kw4">const</span> <span class="kw4">short</span> inY <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
		<span class="co1">// Update a Trigger</span>
		<span class="kw4">void</span> UpdateTrigger<span class="br0">&#40;</span> <span class="kw4">const</span> TriggerType inType, <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">char</span> inValue <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span><span class="sy4">;</span></pre></div></div>
<p>&nbsp;</p>
<p>All values that are variable are values between 0.0 and 1.0 in the case of triggers and motor speeds, and -1.0 and 1.0 in the case of axis components. You may have noticed that there is only one function that can change values explicitly, <em>SetMotorSpeed()</em>, the only other way to change values is direct input from the controller, so <em>Update()</em> must be called every frame.</p>
<p>You may notice that the division used to normalise the speed is 0x7FFF instead of 0xFFFF, this is because the number is signed, not unsigned like the other values we normalise.</p>
<p>Calling <em>Update()</em> more than once will break the <em>IsButtonUp()</em> and <em>IsButtonDown()</em> calls to always return false since they are based on the previous button states gotten by an update call.</p>
<p>The following is the source code for the controller class source file.</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.lastrayofhope.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="cpp" style="font-family:monospace;"><span class="co1">// --- [ includes ] -------------------------------------------</span>
<span class="co2">#include &quot;Controller.h&quot;</span>
&nbsp;
<span class="co1">// --- [ constructor / destructor ] ---------------------------</span>
Controller<span class="sy4">::</span><span class="me2">Controller</span><span class="br0">&#40;</span> <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> inControllerId <span class="br0">&#41;</span>
	<span class="sy4">:</span>
	m_id<span class="br0">&#40;</span> inControllerId <span class="br0">&#41;</span>,
	m_isConnected<span class="br0">&#40;</span> <span class="kw2">false</span> <span class="br0">&#41;</span>,
	m_currentButtons<span class="br0">&#40;</span> 0 <span class="br0">&#41;</span>,
	m_previousButtons<span class="br0">&#40;</span> 0 <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> kNumAxisTypes<span class="sy4">;</span> <span class="sy2">++</span>i <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_axis<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">x</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
		m_axis<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">y</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> kNumTriggerTypes<span class="sy4">;</span> <span class="sy2">++</span>i <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_triggers<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="nu17">0.0f</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">unsigned</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> i <span class="sy1">&lt;</span> kNumMotorTypes<span class="sy4">;</span> <span class="sy2">++</span>i <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_motorSpeed<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="nu17">0.0f</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// --- [ functions ] ------------------------------------------</span>
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">Update</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	XINPUT_STATE state<span class="sy4">;</span>
&nbsp;
	<span class="co1">// Get new controller state and check if it is connected</span>
	m_isConnected <span class="sy1">=</span> XInputGetState<span class="br0">&#40;</span> m_id, <span class="sy3">&amp;</span>state <span class="br0">&#41;</span> <span class="sy1">==</span> ERROR_SUCCESS<span class="sy4">;</span>
	<span class="kw1">if</span><span class="br0">&#40;</span> <span class="sy3">!</span>m_isConnected <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		<span class="kw1">return</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="co1">// Set New Axis Positions and normalise</span>
	UpdateAxis<span class="br0">&#40;</span> kAxis_Left, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLX</span>, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLY</span> <span class="br0">&#41;</span><span class="sy4">;</span>
	UpdateAxis<span class="br0">&#40;</span> kAxis_Right, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbRX</span>, state.<span class="me1">Gamepad</span>.<span class="me1">sThumbRY</span> <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Set New Trigger Values and normalise</span>
	UpdateTrigger<span class="br0">&#40;</span> kTrigger_Left, state.<span class="me1">Gamepad</span>.<span class="me1">bLeftTrigger</span> <span class="br0">&#41;</span><span class="sy4">;</span>
	UpdateTrigger<span class="br0">&#40;</span> kTrigger_Right, state.<span class="me1">Gamepad</span>.<span class="me1">bRightTrigger</span> <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	<span class="co1">// Set previous button states to m_currentButtons, and current button</span>
	<span class="co1">// state to new button state.</span>
	m_previousButtons <span class="sy1">=</span> m_currentButtons<span class="sy4">;</span>
	m_currentButtons <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">unsigned</span> <span class="kw4">int</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> state.<span class="me1">Gamepad</span>.<span class="me1">wButtons</span> <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">SetMotorSpeed</span><span class="br0">&#40;</span> <span class="kw4">const</span> MotorType inType, <span class="kw4">const</span> <span class="kw4">double</span> inValue <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	XINPUT_VIBRATION vibration<span class="sy4">;</span>
&nbsp;
	m_motorSpeed<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy1">=</span> inValue<span class="sy4">;</span>
&nbsp;
	vibration.<span class="me1">wLeftMotorSpeed</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span>WORD<span class="sy1">&gt;</span><span class="br0">&#40;</span> 0xffff <span class="sy2">*</span> m_motorSpeed<span class="br0">&#91;</span>kMotor_Left<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy4">;</span>
	vibration.<span class="me1">wRightMotorSpeed</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span>WORD<span class="sy1">&gt;</span><span class="br0">&#40;</span> 0xffff <span class="sy2">*</span> m_motorSpeed<span class="br0">&#91;</span>kMotor_Right<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
	XInputSetState<span class="br0">&#40;</span> m_id, <span class="sy3">&amp;</span>vibration <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">UpdateAxis</span><span class="br0">&#40;</span> <span class="kw4">const</span> AxisType inType, <span class="kw4">const</span> <span class="kw4">short</span> inX, <span class="kw4">const</span> <span class="kw4">short</span> inY <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	<span class="kw4">const</span> <span class="kw4">short</span> kAxisDeadzones<span class="br0">&#91;</span>kNumAxisTypes<span class="br0">&#93;</span> <span class="sy1">=</span>
	<span class="br0">&#123;</span>
	XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE,
	XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE
	<span class="br0">&#125;</span><span class="sy4">;</span>
&nbsp;
	m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">x</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
	m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">y</span> <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy4">;</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span> inX <span class="sy1">&lt;</span> <span class="sy2">-</span>kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy3">||</span> inX <span class="sy1">&gt;</span> kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">x</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLX</span> <span class="br0">&#41;</span> <span class="sy2">/</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> 0x7fff <span class="br0">&#41;</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span> inY <span class="sy1">&lt;</span> <span class="sy2">-</span>kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy3">||</span> inY <span class="sy1">&gt;</span> kAxisDeadzones<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_axis<span class="br0">&#91;</span>inType<span class="br0">&#93;</span>.<span class="me1">y</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> state.<span class="me1">Gamepad</span>.<span class="me1">sThumbLY</span> <span class="br0">&#41;</span> <span class="sy2">/</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">double</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> 0x7fff <span class="br0">&#41;</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">void</span> Controller<span class="sy4">::</span><span class="me2">UpdateTrigger</span><span class="br0">&#40;</span> <span class="kw4">const</span> TriggerType inType, <span class="kw4">const</span> <span class="kw4">unsigned</span> <span class="kw4">char</span> inValue <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
	m_triggers<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="nu17">0.0f</span><span class="sy4">;</span>
&nbsp;
	<span class="kw1">if</span><span class="br0">&#40;</span> inValue <span class="sy1">&gt;</span> XINPUT_GAMEPAD_TRIGGER_THRESHOLD <span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		m_triggers<span class="br0">&#91;</span>inType<span class="br0">&#93;</span> <span class="sy1">=</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">float</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> inValue <span class="br0">&#41;</span> <span class="sy2">/</span> <span class="kw2">static_cast</span><span class="sy1">&lt;</span><span class="kw4">float</span><span class="sy1">&gt;</span><span class="br0">&#40;</span> 0xff <span class="br0">&#41;</span><span class="sy4">;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>&nbsp;</p>
<p>And that is all that is required for getting state information from a XBox 360 pad.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lastrayofhope.com/2008/01/07/agt-using-xbox360-pad-with-xinput/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

