<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>get all pressed keys? (part two)</title>
		<link>http://www.allegro.cc/forums/view/617986</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 28 Nov 2019 19:11:43 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>sorry for the new post but my old one was locked for some reason.</p><p>is there a way to read keyboard up and down events and mouse up and down events outside of main without needing to pass a handle to the display?</p><p>I want to make a simple 6 functions without needing to update them in main..
</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> is_keyboard_key_down<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 2</span><span class="k1">bool</span> is_keyboard_key_held<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 3</span><span class="k1">bool</span> is_keyboard_key_up  <span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 4</span>
<span class="number"> 5</span><span class="k1">bool</span> is_mouse_button_down<span class="k2">(</span><span class="k1">int</span> btn<span class="k2">)</span>
<span class="number"> 6</span><span class="k1">bool</span> is_mouse_button_held<span class="k2">(</span><span class="k1">int</span> btn<span class="k2">)</span>
<span class="number"> 7</span><span class="k1">bool</span> is_mouse_button_up  <span class="k2">(</span><span class="k1">int</span> btn<span class="k2">)</span>
</div></div><p>


is there a easy way to do this?</p><p>EDIT: I think this might be able to be done with threads but I am afraid to use them due to mutex locks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Fri, 15 Nov 2019 05:35:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could use global variables. Something like:</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> key_down<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  2</span><span class="k1">bool</span> key_held<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  3</span><span class="k1">int</span> key_up<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">void</span> after_game_tick<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</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> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>        key_down<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>        key_up<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  9</span>    <span class="k2">}</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">void</span> on_event_key_down<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>    key_down<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 14</span>    key_held<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">void</span> on_event_key_up<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 18</span>    key_up<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 19</span>    key_held<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k1">bool</span> is_keyboard_key_down<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> key_down<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 23</span><span class="k1">bool</span> is_keyboard_key_held<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> key_held<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 24</span><span class="k1">bool</span> is_keyboard_key_up<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> key_up<span class="k2">[</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">]</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">;</span> <span class="k2">}</span>
</div></div><p>

Call the two event functions when you receive a key up/down event in main. Call the after_game_tick function when you&#39;re done handling game input to reset the down/up counters.</p><p>Exactly the same will work for mouse.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Fri, 15 Nov 2019 09:50:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your old topic wasn&#39;t locked. You just can&#39;t double post.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 15 Nov 2019 20:42:08 +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/617986/1044036#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> Your old topic wasn&#39;t locked. You just can&#39;t double post. </p></div></div><p>Could mention the trick to get around that: Edit the post, preferreably putting &quot;APPEND:&quot; or similiar before the additions, then click on Send to top <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sat, 16 Nov 2019 00:29:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />, why? You just did it for me. :/
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 16 Nov 2019 00:31:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I meant that I could :p
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sat, 16 Nov 2019 01:26:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Elias<br />is there a way to implement this so I don&#39;t have to handler the events in the main loop?<br />I was thinking something like a simple init function.</p><p>@Edgar Reynaldo and @torhu</p><p>sorry I didn&#39;t realize that.<br />does APPEND notify users of the topic that it has updated?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Sat, 16 Nov 2019 02:14:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, but the &quot;Send to Top&quot; button does (if it has been more than an hour since your last update).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sat, 16 Nov 2019 02:27:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The way I do it is I have an init() function and tick() function for the game and do everything there (and the actual main loop inside of main() does nothing but handling the Allegro events).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sat, 16 Nov 2019 03:01:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@bamccaig awesome i will keep that in mind.<br />@Elias so is it possible to handle events for my gui in tick without a display?<br />and if so is it possiable to do it so I can use the same events for another module?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Sat, 16 Nov 2019 03:34:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For now, you have to have a window to get input. Because that&#39;s where Windows sends you the input. There&#39;s no way around it.</p><p>Please explain what you are trying to do.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 16 Nov 2019 04:33:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It seems that the OP is having a case of the “XY Problem”. He is asking about an attempted solution rather than his actual problem. </p><p>In other words, he is trying to solve a problem X. He really thinks solution Y will work. Now, instead of asking about X, he is asking about Y. </p><p>Can you start from 0 and tell us what you want to do? I saw a red flag when you mentioned threads. Most code doesn’t need threads at all. You also said modules. Are you trying to abstract Allegro into different components or something like that?  The more information and code you provide, the more likely someone here will give you a solution.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Rodolfo Lam)</author>
		<pubDate>Sat, 16 Nov 2019 05:45:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Examples are often made as single file / function, but I understand the issue is about organizing the code in different modules (C files).</p><p>The main event loop, wherever it is, could include this part : (Adapted from Edgar&#39;s earlier 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">do</span>
<span class="number">  2</span>     <span class="k2">{</span>
<span class="number">  3</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">  4</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">  5</span>         <span class="k2">(</span>...<span class="k2">)</span>
<span class="number">  6</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="c">//  </span>
<span class="number">  7</span>         <span class="k2">{</span>                                     <span class="c">//</span>
<span class="number">  8</span>            input_notify<span class="k2">(</span><span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">;</span>                  <span class="c">//</span>
<span class="number">  9</span>         <span class="k2">}</span>                                     <span class="c">// This part communicates with input.c</span>
<span class="number"> 10</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="c">// </span>
<span class="number"> 11</span>         <span class="k2">{</span>                                     <span class="c">//</span>
<span class="number"> 12</span>            input_notify<span class="k2">(</span><span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">;</span>                  <span class="c">//</span>
<span class="number"> 13</span>         <span class="k2">}</span>                                     <span class="c">//</span>
<span class="number"> 14</span>         <span class="k2">(</span>...<span class="k2">)</span>
<span class="number"> 15</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>
</div></div><p>

<u>input.c:</u>
</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="c">// 'private'</span>
<span class="number">  2</span><span class="k1">int</span> mykeys<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">void</span> input_init<span class="k2">(</span><span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span> <span class="c">// clear mykeys[] using memset or whatever</span>
<span class="number">  7</span><span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">void</span> input_notify<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> <span class="k3">*</span>evt<span class="k2">)</span> <span class="c">// &lt; this</span>
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>   <span class="c">// examine the event and update the keyboard state</span>
<span class="number"> 12</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="number"> 13</span>   <span class="k2">{</span>
<span class="number"> 14</span>      mykeys<span class="k2">[</span>e.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="k2">}</span>
<span class="number"> 16</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="number"> 17</span>   <span class="k2">{</span>
<span class="number"> 18</span>      mykeys<span class="k2">[</span>e.keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span>   <span class="k2">}</span>
<span class="number"> 20</span><span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k1">int</span> input_is_key_down<span class="k2">(</span>ALLEGRO_KEY k<span class="k2">)</span>
<span class="number"> 23</span><span class="k2">{</span>
<span class="number"> 24</span>   <span class="c">// examine the keyboard state, return 0 or 1</span>
<span class="number"> 25</span>   <span class="k1">return</span> mykeys<span class="k2">[</span>e.keyboard.keycode<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
</div></div><p>

<u>input.h:</u>
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// the declaration of all the above methods</span>
<span class="c">// mykeys is *not* declared here, because other modules don't need to know about it</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Mon, 18 Nov 2019 21:03:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>so I wrote this yesterday. however I can&#39;t test it since it&#39;s in a dll project and I can&#39;t figure out how to link it into my executable</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="c">//app.h</span>
<span class="number">   2</span><span class="p">#pragma once</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;algorithm&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">   6</span><span class="k1">namespace</span>
<span class="number">   7</span><span class="k2">{</span>
<span class="number">   8</span>  <span class="k1">int</span>         _w       <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   9</span>  <span class="k1">int</span>         _h       <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  10</span>  <span class="k1">int</span>         _fps     <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  11</span>  <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> _text    <span class="k3">=</span> <span class="s">"untitled"</span><span class="k2">;</span>
<span class="number">  12</span>  <span class="k1">bool</span>        _visible <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  13</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span>     _display <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number">  14</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> _queue   <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number">  15</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span>       _timer   <span class="k3">=</span> nullptr<span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="k2">}</span>
<span class="number">  18</span><span class="k1">namespace</span> pure <span class="k2">{</span>
<span class="number">  19</span><span class="k1">namespace</span> app  <span class="k2">{</span>
<span class="number">  20</span>
<span class="number">  21</span>  Event init<span class="k2">;</span>
<span class="number">  22</span>  Event tick<span class="k2">;</span>
<span class="number">  23</span>  Event draw<span class="k2">;</span>
<span class="number">  24</span>  Event <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>  <span class="k1">int</span> getW<span class="k2">(</span><span class="k2">)</span>
<span class="number">  27</span>  <span class="k2">{</span>
<span class="number">  28</span>    <span class="k1">return</span> _w<span class="k2">;</span>
<span class="number">  29</span>  <span class="k2">}</span>
<span class="number">  30</span>  <span class="k1">int</span> getH<span class="k2">(</span><span class="k2">)</span>
<span class="number">  31</span>  <span class="k2">{</span>
<span class="number">  32</span>    <span class="k1">return</span> _h<span class="k2">;</span>
<span class="number">  33</span>  <span class="k2">}</span>
<span class="number">  34</span>  <span class="k1">int</span> getFPS<span class="k2">(</span><span class="k2">)</span>
<span class="number">  35</span>  <span class="k2">{</span>
<span class="number">  36</span>    <span class="k1">return</span> _fps<span class="k2">;</span>
<span class="number">  37</span>  <span class="k2">}</span>
<span class="number">  38</span>
<span class="number">  39</span>  <span class="k1">void</span> run<span class="k2">(</span><span class="k1">int</span> w<span class="k3">=</span><span class="n">256</span>, <span class="k1">int</span> h<span class="k3">=</span><span class="n">240</span>, <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> text <span class="k3">=</span> <span class="s">"untitled"</span>, <span class="k1">int</span> fps<span class="k3">=</span><span class="n">60</span><span class="k2">)</span>
<span class="number">  40</span>  <span class="k2">{</span>
<span class="number">  41</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>
<span class="number">  43</span>    _w    <span class="k3">=</span> w<span class="k2">;</span>
<span class="number">  44</span>    _h    <span class="k3">=</span> h<span class="k2">;</span>
<span class="number">  45</span>    _fps  <span class="k3">=</span> fps<span class="k2">;</span>
<span class="number">  46</span>    _text <span class="k3">=</span> text<span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span>    init.invoke<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>
<span class="number">  50</span>    <span class="k1">bool</span> running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  51</span>    <span class="k1">while</span> <span class="k2">(</span>running<span class="k2">)</span>
<span class="number">  52</span>    <span class="k2">{</span>
<span class="number">  53</span>      <span class="k1">if</span> <span class="k2">(</span>_visible<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  56</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>_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>      <span class="k1">switch</span> <span class="k2">(</span>event.type<span class="k2">)</span>
<span class="number">  59</span>      <span class="k2">{</span>
<span class="number">  60</span>        <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number">  61</span>          running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  62</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number">  63</span>        <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number">  64</span>          tick.invoke<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>          draw.invoke<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number">  67</span>      <span class="k2">}</span>
<span class="number">  68</span>    <span class="k2">}</span>
<span class="number">  69</span>    free.invoke<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>  <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>  <span class="k1">void</span> show<span class="k2">(</span><span class="k2">)</span>
<span class="number">  73</span>  <span class="k2">{</span>
<span class="number">  74</span>    _display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>_w, _h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>    _queue   <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">  76</span>    _timer   <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span> <span class="k3">/</span> _fps<span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>    <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>_display, _text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>
<span class="number">  80</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>_queue, <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">  81</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>_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>_timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>    _visible <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  84</span>  <span class="k2">}</span>
<span class="number">  85</span>
<span class="number">  86</span>  <span class="k1">struct</span> Event
<span class="number">  87</span>  <span class="k2">{</span>
<span class="number">  88</span>    private:
<span class="number">  89</span>    std::vector<span class="k3">&lt;</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k3">&gt;</span> functions<span class="k2">;</span>
<span class="number">  90</span>
<span class="number">  91</span>    public:
<span class="number">  92</span>    <span class="k1">void</span> invoke<span class="k2">(</span><span class="k2">)</span>
<span class="number">  93</span>    <span class="k2">{</span>
<span class="number">  94</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> functions.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  95</span>      <span class="k2">{</span>
<span class="number">  96</span>        <span class="k1">if</span> <span class="k2">(</span>functions<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> nullptr<span class="k2">)</span> functions<span class="k2">[</span>i<span class="k2">]</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>        <span class="k1">else</span> functions.erase<span class="k2">(</span>std::remove<span class="k2">(</span>functions.begin<span class="k2">(</span><span class="k2">)</span>, functions.end<span class="k2">(</span><span class="k2">)</span>, functions<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span>, functions.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>      <span class="k2">}</span>
<span class="number">  99</span>    <span class="k2">}</span>
<span class="number"> 100</span>    <span class="k1">void</span> <span class="k1">operator</span> <span class="k3">+</span><span class="k3">=</span><span class="k2">(</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>function<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 101</span>    <span class="k2">{</span>
<span class="number"> 102</span>      functions.push_back<span class="k2">(</span>function<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>    <span class="k2">}</span>    
<span class="number"> 104</span>    <span class="k1">void</span> <span class="k1">operator</span> <span class="k3">-</span><span class="k3">=</span><span class="k2">(</span><span class="k1">void</span><span class="k2">(</span><span class="k3">*</span>function<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 105</span>    <span class="k2">{</span>
<span class="number"> 106</span>      functions.erase<span class="k2">(</span>std::remove<span class="k2">(</span>functions.begin<span class="k2">(</span><span class="k2">)</span>, functions.end<span class="k2">(</span><span class="k2">)</span>, function<span class="k2">)</span>, functions.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>    <span class="k2">}</span>
<span class="number"> 108</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 109</span><span class="k2">}</span><span class="k2">}</span>
</div></div><p>

</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="c">///inp.h</span>
<span class="number">  2</span><span class="p">#pragma once</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">  4</span><span class="p">#include "app.h"</span>
<span class="number">  5</span><span class="k1">namespace</span>
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span>  <span class="k1">bool</span> initalized <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>  <span class="c">//keyboard</span>
<span class="number"> 10</span>  <span class="k1">int</span> curr_keys<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">int</span> prev_keys<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>  <span class="c">//mouse</span>
<span class="number"> 14</span>  <span class="k1">int</span> curr_curs<span class="k2">[</span><span class="n">16</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">int</span> prev_curs<span class="k2">[</span><span class="n">16</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>  <span class="k1">void</span> tick<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 18</span>  <span class="k2">{</span>
<span class="number"> 19</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>initalized<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> k_state<span class="k2">;</span>
<span class="number"> 22</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>k_state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</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> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 24</span>    <span class="k2">{</span>
<span class="number"> 25</span>      prev_keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> curr_keys<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 26</span>      curr_keys<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</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>k_state, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>    <span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> m_state<span class="k2">;</span>
<span class="number"> 30</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>m_state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</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> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 32</span>    <span class="k2">{</span>
<span class="number"> 33</span>      prev_curs<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> curr_curs<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 34</span>      curr_curs<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_mouse_button_down"><span class="a">al_mouse_button_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>m_state, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>    <span class="k2">}</span>
<span class="number"> 36</span>  <span class="k2">}</span>
<span class="number"> 37</span><span class="k2">}</span>
<span class="number"> 38</span>
<span class="number"> 39</span><span class="k1">namespace</span> pure <span class="k2">{</span>
<span class="number"> 40</span><span class="k1">namespace</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_472.html" target="_blank">inp</a>  <span class="k2">{</span>
<span class="number"> 41</span>
<span class="number"> 42</span>  <span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 43</span>  <span class="k2">{</span>
<span class="number"> 44</span>    <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>    <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    <span class="c">//pure::app::tick is a Event which is struct around a vector of function pointers</span>
<span class="number"> 48</span>    pure::app::tick <span class="k3">+</span><span class="k3">=</span> tick<span class="k2">;</span>
<span class="number"> 49</span>    initalized <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 50</span>  <span class="k2">}</span>
<span class="number"> 51</span>
<span class="number"> 52</span>  <span class="k1">bool</span> is_key_down<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 53</span>  <span class="k2">{</span>
<span class="number"> 54</span>    <span class="k1">return</span> <span class="k3">!</span>prev_keys <span class="k3">&amp;</span><span class="k3">&amp;</span> curr_keys<span class="k2">;</span>
<span class="number"> 55</span>  <span class="k2">}</span>
<span class="number"> 56</span>  <span class="k1">bool</span> is_key_held<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 57</span>  <span class="k2">{</span>
<span class="number"> 58</span>    <span class="k1">return</span> prev_keys <span class="k3">&amp;</span><span class="k3">&amp;</span> curr_keys<span class="k2">;</span>
<span class="number"> 59</span>  <span class="k2">}</span>
<span class="number"> 60</span>  <span class="k1">bool</span> is_key_up  <span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 61</span>  <span class="k2">{</span>
<span class="number"> 62</span>    <span class="k1">return</span> prev_keys <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>curr_keys<span class="k2">;</span>
<span class="number"> 63</span>  <span class="k2">}</span>
<span class="number"> 64</span>
<span class="number"> 65</span>  <span class="k1">bool</span> is_mouse_down<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 66</span>  <span class="k2">{</span>
<span class="number"> 67</span>    <span class="k1">return</span> <span class="k3">!</span>prev_curs <span class="k3">&amp;</span><span class="k3">&amp;</span> curr_curs<span class="k2">;</span>
<span class="number"> 68</span>  <span class="k2">}</span>
<span class="number"> 69</span>  <span class="k1">bool</span> is_mouse_held<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 70</span>  <span class="k2">{</span>
<span class="number"> 71</span>    <span class="k1">return</span> prev_curs <span class="k3">&amp;</span><span class="k3">&amp;</span>  curr_curs<span class="k2">;</span>
<span class="number"> 72</span>  <span class="k2">}</span>
<span class="number"> 73</span>  <span class="k1">bool</span> is_mouse_up  <span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number"> 74</span>  <span class="k2">{</span>
<span class="number"> 75</span>    <span class="k1">return</span> prev_curs <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>curr_curs<span class="k2">;</span>
<span class="number"> 76</span>  <span class="k2">}</span>
<span class="number"> 77</span><span class="k2">}</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Shadowblitz16)</author>
		<pubDate>Tue, 19 Nov 2019 06:39:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I cannot test this either though one thing seems to be wrong - namely, second source file, at line 31:
</p><div class="source-code snippet"><div class="inner"><pre><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> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
</pre></div></div><p>

I believe you should change ALLEGRO_KEY_MAX to a variable that your would set in your program&#39;s initialization part using the function call that Edgar suggested here: <a href="https://www.allegro.cc/forums/thread/617983">https://www.allegro.cc/forums/thread/617983</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Sun, 24 Nov 2019 04:54:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>MikiZX, nope. ALLEGRO_KEY_MAX is a constant that doesn&#39;t change. It&#39;s perfectly safe to use.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 Nov 2019 19:34:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There are two &#39;for&#39; loops in Shadowblitz&#39;s source, one after the other. The first one is for the keys while the second one is for the mouse buttons. It seems the second loop is the one that accesses an array of 16 elements using an index well out of bounds - sorry, I should have explained it better in my previous post.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Sun, 24 Nov 2019 20:17:36 +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/617986/1044104#target">Shadowblitz16</a> said:</div><div class="quote"><p> so I wrote this yesterday. however I can&#39;t test it since it&#39;s in a dll project and I can&#39;t figure out how to link it into my executable</p></div></div><p>You need to split it into header files and implementation (*.cpp) files. Function definitions go in the implementation files. Class/struct declarations, function prototypes, symbolic constants, typedefs, etc. go in the headers.</p><p>Then you just add these files to your game project, which should be configured to build an executable. You don&#39;t need to create DLL&#39;s unless you have a specific reason to want that level of separation.</p><p>Also, you don&#39;t really need multiple levels of namespaces in a small project, it&#39;s just more to type.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sun, 24 Nov 2019 23:20:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, MikiZX, you&#39;re right, sorry I can&#39;t read. No, you definitely don&#39;t want to check ALLEGRO_KEY_MAX mouse buttons.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 25 Nov 2019 01:14:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/617986/1044160#target">torhu</a> said:</div><div class="quote"><p>
You need to split it into header files and implementation (*.cpp) files. Function definitions go in the implementation files. Class/struct declarations, function prototypes, symbolic constants, typedefs, etc. go in the headers.
</p></div></div><p>

<a href="https://wiki.allegro.cc/index.php?title=Header_file">https://wiki.allegro.cc/index.php?title=Header_file</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 25 Nov 2019 23:20:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is something good, I would like to bookmark it.</p><p>And... I just did.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Doctor Cop)</author>
		<pubDate>Thu, 28 Nov 2019 19:11:43 +0000</pubDate>
	</item>
</rss>
