<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>get all pressed keys?</title>
		<link>http://www.allegro.cc/forums/view/617978</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 14 Nov 2019 07:04:23 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>does anybody know how to get all currently pressed keys?</p><p>I have a function called getMouseButtons which does this..
</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">int</span>  getMouseButtons<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 2</span>      <span class="k2">{</span>
<span class="number"> 3</span>          <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> state<span class="k2">;</span>
<span class="number"> 4</span>          <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 5</span>          <span class="k1">return</span> state.buttons<span class="k2">;</span>
<span class="number"> 6</span>      <span class="k2">}</span>
</div></div><p>

and I( was trying to make a keyboard version..</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">int</span>  getKeyboardKeys<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 2</span>      <span class="k2">{</span>
<span class="number"> 3</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> state<span class="k2">;</span>
<span class="number"> 4</span>        <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 5</span>        <span class="k1">return</span> state.keys<span class="k2">;</span>
<span class="number"> 6</span>      <span class="k2">}</span>
</div></div><p>

the problem is ALLEGRO_KEYBOARD_STATE doesn&#39;t have a member called keys like ALLEGRO_MOUSE_STATE has a member called buttons.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Sun, 10 Nov 2019 10:46:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>With ALLEGRO_KEYBOARD_STATE you have to use function called al_key_down ( <a href="https://www.allegro.cc/manual/5/al_key_down">https://www.allegro.cc/manual/5/al_key_down</a> ) to read a single key.</p><p>Otherwise if the function alone is not sufficient and you would like to always have something similar to the mouse buttons variable then you will need to create an array of keys and update it yourself by reading each key. Something along the lines of:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
...
<a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>kbdstate<span class="k2">)</span><span class="k2">;</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>ALLEGRO_KEY_MAX<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>kbdstate, i<span class="k2">)</span><span class="k2">)</span>
      pressed_key<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
    <span class="k1">else</span>
      pressed_key<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Sun, 10 Nov 2019 16:00:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Polling is outdated, and honestly shouldn&#39;t have been included in A5. :/</p><p>The proper way to monitor the state of the keyboard and mouse is through the event system.</p><p>If you poll, you stand the risk of losing events in-between polls.</p><p>Some example code to get you started :</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">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="c">//...</span>
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> q <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>q<span class="k2">)</span> <span class="k2">{</span>Bail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q , <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q , <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q , <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   <span class="c">/// Some variables to track our key and mouse state</span>
<span class="number"> 12</span>   <span class="k1">int</span> mx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 13</span>   <span class="k1">int</span> my <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">int</span> mb <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="c">/// bitfield</span>
<span class="number"> 15</span>
<span class="number"> 16</span>   <span class="k1">bool</span> keys<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>   <span class="c">/// Typical event loop</span>
<span class="number"> 19</span>   <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 20</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>      <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>         Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>         redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 26</span>      <span class="k2">}</span>
<span class="number"> 27</span>      <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 28</span>         <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> e<span class="k2">;</span>
<span class="number"> 29</span>         <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>q , <span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 32</span>         <span class="k2">}</span>
<span class="number"> 33</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span> e.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 34</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 35</span>         <span class="k2">}</span>
<span class="number"> 36</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 37</span>            keys<span class="k2">[</span>e.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 38</span>         <span class="k2">}</span>
<span class="number"> 39</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 40</span>            keys<span class="k2">[</span>e.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 41</span>         <span class="k2">}</span>
<span class="number"> 42</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 43</span>            mb <span class="k3">|</span><span class="k3">=</span> <span class="k2">(</span><span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> e.mouse.button<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>         <span class="k2">}</span>
<span class="number"> 45</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span>            mb <span class="k3">&amp;</span><span class="k3">=</span> ~<span class="k2">(</span><span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> e.mouse.button<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>         <span class="k2">}</span>
<span class="number"> 48</span>         <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>            mx <span class="k3">=</span> e.mouse.x<span class="k2">;</span>
<span class="number"> 50</span>            my <span class="k3">=</span> e.mouse.y<span class="k2">;</span>
<span class="number"> 51</span>         <span class="k2">}</span>
<span class="number"> 52</span>      <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>q<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>   <span class="k2">}</span>
<span class="number"> 54</span>
<span class="number"> 55</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 56</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 10 Nov 2019 16:14:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>can events be used in a way that I can do..<br />key_is_down()<br />key_is_held()<br />key_is_up  ()</p><p>I would rather not have to keep my game logic in main&#39;s events
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Mon, 11 Nov 2019 02:10:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes.</p><p>You can use pointers, you can pass variables, you can do whatever you want.</p><p>Hint (you only need one event loop)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 11 Nov 2019 03:10:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hmm ok I think I am going to go with this..
</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">bool</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  2</span>...
<span class="number">  3</span><a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>kbdstate<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</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>ALLEGRO_KEY_MAX<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>kbdstate, i<span class="k2">)</span><span class="k2">)</span>
<span class="number">  7</span>      pressed_key<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  8</span>    <span class="k1">else</span>
<span class="number">  9</span>      pressed_key<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Thu, 14 Nov 2019 07:04:23 +0000</pubDate>
	</item>
</rss>
