<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>key define KEY_MAX</title>
		<link>http://www.allegro.cc/forums/view/599902</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 16 Apr 2009 12:04:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What is it good for? Is it only used internally?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Fri, 10 Apr 2009 20:58:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It lets you know how big the <span class="source-code"><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a></span> array is for one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 10 Apr 2009 21:03:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could you give me an example where this is usefull in a game? I write a wrapper and I don&#39;t know if I need to add it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Fri, 10 Apr 2009 21:07:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s good, because, for example, say you want to keep an array of keys that were just pressed, or just released, since the last update. You could do something like this:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">char</span> oldKeys<span class="k2">[</span>KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="k1">char</span> curKeys<span class="k2">[</span>KEY_MAX<span class="k2">]</span><span class="k2">;</span>

<span class="c">/* Later... */</span>
<span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> KEY_MAX<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="k2">{</span>
  oldKeys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> curKeys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
  curKeys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Then you could do something like:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>oldKeys<span class="k2">[</span>KEY_ENTER<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>curKeys<span class="k2">[</span>KEY_ENTER<span class="k2">]</span><span class="k2">)</span>
  <span class="c">/* Just released... */</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Fri, 10 Apr 2009 21:21:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://wiki.allegro.cc/index.php?title=Checking_key_release">Here is an example what it is good for.</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Fri, 10 Apr 2009 21:33:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you only use 4 keys in your game it&#39;s poinless looping round 50
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Fri, 10 Apr 2009 23:08:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/599902/805313#target">Neil Walker</a> said:</div><div class="quote"><p>If you only use 4 keys in your game it&#39;s poinless looping round 50 </p></div></div><p>

All my games have customizable input (that used Allegro 4), so I would need to keep track of all of the keys... That&#39;s why I needed to loop.</p><p>It&#39;s just an example, though. Some people may need all keys checked, some may not. <tt>KEY_MAX</tt> would still be &quot;required&quot; for a faithful Allegro port.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Fri, 10 Apr 2009 23:20:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks to all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Fri, 10 Apr 2009 23:24:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes, you keep a reference to the keys you redefine, you don&#39;t need to loop through them all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Fri, 10 Apr 2009 23:48:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not when you do it dynamically.</p><p>[edit] And looping fifty times in a game won&#39;t kill performance.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Fri, 10 Apr 2009 23:50:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Course you do, you&#39;ll always know which keys you&#39;ve defined. Create an array holding all the keys (left, right, up, down, fire, etc) and references to the key and states, whether it&#39;s an array of structs, multi-dimensioned array or multiple arrays, that&#39;s just implementation specific.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Fri, 10 Apr 2009 23:58:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/599902/805315#target">Aaron Bolyard</a> said:</div><div class="quote"><p>All my games have customizable input (that used Allegro 4), so I would need to keep track of all of the keys...</p></div></div><p>
Technically you&#39;d just need to keep track of the keys that were configured. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Primitive [untested] example:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">enum</span> <span class="k2">{</span>
<span class="number">  2</span>    GAME_KEY_LEFT <span class="k3">=</span> <span class="n">0</span>,
<span class="number">  3</span>    GAME_KEY_RIGHT <span class="k3">=</span> <span class="n">1</span>,
<span class="number">  4</span>    GAME_KEY_UP <span class="k3">=</span> <span class="n">2</span>,
<span class="number">  5</span>    GAME_KEY_DOWN <span class="k3">=</span> <span class="n">3</span>,
<span class="number">  6</span>    GAME_KEY_FIRE <span class="k3">=</span> <span class="n">4</span>,
<span class="number">  7</span>    GAME_KEY_DEFEND <span class="k3">=</span> <span class="n">5</span>,
<span class="number">  8</span>    GAME_KEY_USE <span class="k3">=</span> <span class="n">6</span>,
<span class="number">  9</span>    GAME_KEY_MENU <span class="k3">=</span> <span class="n">7</span>,
<span class="number"> 10</span>    GAME_KEY_EXIT <span class="k3">=</span> <span class="n">8</span>,
<span class="number"> 11</span>
<span class="number"> 12</span>    GAME_KEY_MAX <span class="k3">=</span> <span class="n">9</span>
<span class="number"> 13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="c">/*</span>
<span class="number"> 16</span><span class="c"> * Ctrl+Alt+Shift will complicate things, obviously, but a struct instead of an</span>
<span class="number"> 17</span><span class="c"> * int could handle that. ;)</span>
<span class="number"> 18</span><span class="c"> */</span>
<span class="number"> 19</span><span class="k1">int</span> game_key<span class="k2">[</span>GAME_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="c">// Set by user configuration or whatever.</span>
<span class="number"> 22</span>game_key<span class="k2">[</span>GAME_KEY_LEFT<span class="k2">]</span> <span class="k3">=</span> KEY_A<span class="k2">;</span>
<span class="number"> 23</span>game_key<span class="k2">[</span>GAME_KEY_RIGHT<span class="k2">]</span> <span class="k3">=</span> KEY_D<span class="k2">;</span>
<span class="number"> 24</span>game_key<span class="k2">[</span>GAME_KEY_UP<span class="k2">]</span> <span class="k3">=</span> KEY_W<span class="k2">;</span>
<span class="number"> 25</span>game_key<span class="k2">[</span>GAME_KEY_DOWN<span class="k2">]</span> <span class="k3">=</span> KEY_S<span class="k2">;</span>
<span class="number"> 26</span>game_key<span class="k2">[</span>GAME_KEY_FIRE<span class="k2">]</span> <span class="k3">=</span> KEY_SPACE<span class="k2">;</span>
<span class="number"> 27</span>game_key<span class="k2">[</span>GAME_KEY_DEFEND<span class="k2">]</span> <span class="k3">=</span> KEY_E<span class="k2">;</span>
<span class="number"> 28</span>game_key<span class="k2">[</span>GAME_KEY_USE<span class="k2">]</span> <span class="k3">=</span> KEY_F<span class="k2">;</span>
<span class="number"> 29</span>game_key<span class="k2">[</span>GAME_KEY_MENU<span class="k2">]</span> <span class="k3">=</span> KEY_ENTER<span class="k2">;</span>
<span class="number"> 30</span>game_key<span class="k2">[</span>GAME_KEY_EXIT<span class="k2">]</span> <span class="k3">=</span> KEY_ESC<span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>.
<span class="number"> 33</span>.
<span class="number"> 34</span>.
<span class="number"> 35</span>
<span class="number"> 36</span><span class="k1">char</span> old_game_keys<span class="k2">[</span>GAME_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k1">char</span> cur_game_keys<span class="k2">[</span>GAME_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>.
<span class="number"> 40</span>.
<span class="number"> 41</span>.
<span class="number"> 42</span>
<span class="number"> 43</span><span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 44</span>
<span class="number"> 45</span><span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>GAME_KEY_MAX<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 46</span><span class="k2">{</span>
<span class="number"> 47</span>  old_game_keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> cur_game_keys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 48</span>  cur_game_keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>game_key<span class="k2">[</span>i<span class="k2">]</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 49</span><span class="k2">}</span>
<span class="number"> 50</span>
<span class="number"> 51</span>.
<span class="number"> 52</span>.
<span class="number"> 53</span>.
<span class="number"> 54</span>
<span class="number"> 55</span><span class="k1">if</span><span class="k2">(</span>old_game_keys<span class="k2">[</span>GAME_KEY_FIRE<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>cur_game_keys<span class="k2">[</span>GAME_KEY_FIRE<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 56</span>    <span class="c">/* Just released... */</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sat, 11 Apr 2009 00:06:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>During the reconfiguring step this could be used.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Sat, 11 Apr 2009 00:08:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know you can do all of that. It&#39;s just I write my games in Lua generally, so rarely do I care about the C/C++ side. It&#39;s easier just to update the keys in a loop and use the array in Lua than it is to do most of the (boring) stuff in C/C++.</p><p>[edit] Plus what Miquel said. To find which key was pressed, I need to scan through the array and find the most recent &quot;just-pressed&quot; key. Otherwise, I&#39;d have to do &quot;iskeypressed()&quot; and &quot;readkey()&quot;, but those don&#39;t work nice in my game (the way I designed it to be Lua-centric, rather than C/C++-centric).</p><p>[edit again] I would also like to add that it takes more processing time drawing a 32 x 32 sprite than it does looping over a few keys in an array... Especially once you start mixing in blending modes (this is regarding Allegro 4, where this applies).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Sat, 11 Apr 2009 00:09:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would second <b>bamccaig</b>&#39;s post, and not just because it&#39;s what I&#39;ve been using myself.  Instead of your program worrying about which KEYS were pressed, it worried about what ACTION is being requested.</p><p>You may have, at most, 12 different &quot;actions&quot; that the player can perform.  Things like UP/DOWN/LEFT/RIGHT, JUMP, FIRE, CONFIRM, CANCEL, etc.  Like was mentioned before, there&#39;s no real reason to loop through all 50 (or so) possible keys when you only ever use 12 (or less).</p><p>In addition, it gives the added benefit of allowing you to map two actions to the same key, if you want.  Your FIRE action button can be the same as your CONFIRM action button, CANCEL and RUN can be the same, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Thu, 16 Apr 2009 12:04:48 +0000</pubDate>
	</item>
</rss>
