<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Multiple Timers</title>
		<link>http://www.allegro.cc/forums/view/608197</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 29 Aug 2011 02:42:31 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I want to setup multiple timers, how do I differentiate them inside the ALLEGRO_EVENT_TIMER event?</p><p>Thank you
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (InfiniteLoop)</author>
		<pubDate>Sun, 28 Aug 2011 23:26:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">event.timer.source</span> is a pointer to the timer that triggered the event. Just compare your timer pointers to this pointer to see which one triggered the event.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sun, 28 Aug 2011 23:45:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You sir, are a gentlemen and a scholar. </p><p>How would you recommend setting the timer up so you can fire it off so that it comes back only once? For example, if a ship is destroyed, I want it to re-appear 2 seconds later. Obviously, I don&#39;t need the timer firing off every 2 seconds, only upon a ship destroyed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (InfiniteLoop)</author>
		<pubDate>Mon, 29 Aug 2011 00:41:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I typically use a single timer for my entire game running at 60hz. I run the game logic once for each timer event. If I wanted something to happen after two seconds I would store a countdown in a variable (starting at 120 in my 60hz setup to get 2 seconds) and decrement it each time the logic runs. When the countdown reaches 0, I do whatever it is I wanted to do.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>shipdestroyed<span class="k2">)</span>
<span class="k2">{</span>
    countdown <span class="k3">=</span> <span class="n">120</span><span class="k2">;</span>
<span class="k2">}</span>
<span class="k1">if</span><span class="k2">(</span>countdown <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="k2">{</span>
    countdown--<span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>countdown <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
    <span class="k2">{</span>
        respawnship<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

If you really wanted to use a separate timer to do this (I don&#39;t recommend this method), you can create the timer and use <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_timer_speed"><span class="a">al_set_timer_speed</span></a><span class="k2">(</span>timer, <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span></span> and <span class="source-code"><a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span></span> when the ship is destroyed. When the timer event is triggered you can respawn your ship and use <span class="source-code"><a href="http://www.allegro.cc/manual/al_stop_timer"><span class="a">al_stop_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Mon, 29 Aug 2011 01:32:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I prefer an alternative approach to countdowns. I keep a global time variable (incremented every game logic step), this way I can specify when to do some action.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>shipdestroyed<span class="k2">)</span>
    time_to_respawn <span class="k3">=</span> game_time <span class="k3">+</span> <span class="n">120</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>game_time <span class="k3">&gt;</span><span class="k3">=</span> time_to_respawn<span class="k2">)</span>
    respawnship<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 29 Aug 2011 01:38:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;d put the respawn time in the array of structs for the ships.</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">struct</span> _ship
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">int</span> dead<span class="k2">;</span>
<span class="number">  4</span>  <span class="k1">float</span> x<span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">float</span> y<span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">float</span> angle<span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">float</span> time_to_respawn<span class="k2">;</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</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>NUMSHIPS<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 11</span>  <span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">if</span><span class="k2">(</span>ship<span class="k2">[</span>i<span class="k2">]</span>.time_to_respawn <span class="k3">&gt;</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 13</span>    <span class="k2">{</span>
<span class="number"> 14</span>      ship<span class="k2">[</span>i<span class="k2">]</span>.dead <span class="k3">=</span> TRUE<span class="k2">;</span>  <span class="c">//this might be done by bullet collision logic</span>
<span class="number"> 15</span>      ship<span class="k2">[</span>i<span class="k2">]</span>.time_to_respawn <span class="k3">-</span><span class="k3">=</span> timer_interval<span class="k2">;</span>
<span class="number"> 16</span>    <span class="k2">}</span>
<span class="number"> 17</span>    <span class="k1">else</span>
<span class="number"> 18</span>    <span class="k2">{</span>
<span class="number"> 19</span>      ship<span class="k2">[</span>i<span class="k2">]</span>.dead <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 20</span>      respawn_ship<span class="k2">(</span><span class="k3">&amp;</span>ship<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>    <span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    .
<span class="number"> 24</span>    .
<span class="number"> 25</span>    .
<span class="number"> 26</span>  <span class="k2">}</span>
</div></div><p>

I haven&#39;t thought this through more than 2 minutes, so YMMV.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Mon, 29 Aug 2011 01:55:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey, thanks for the responses. I will agree that keeping a running time is a good idea, but I am still curious about firing off situational timers. Is that something that is possible? Even if it is not an optimal solution, I would still like to know how to do it if it is possible. Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (InfiniteLoop)</author>
		<pubDate>Mon, 29 Aug 2011 02:34:54 +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/608197/929516#target">Todd Cope</a> said:</div><div class="quote"><p>If you really wanted to use a separate timer to do this, you can create the timer and use al_set_timer_speed(timer, 2.0) and al_start_timer(timer) when the ship is destroyed. When the timer event is triggered you can respawn your ship and use al_stop_timer(timer).</p></div></div><p>
Here is an example:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>ship_hit<span class="k2">)</span>
<span class="k2">{</span>
    destroy_ship<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/al_set_timer_speed"><span class="a">al_set_timer_speed</span></a><span class="k2">(</span>mytimer, <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>mytimer<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
When you process events:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">if</span><span class="k2">(</span>event.timer.source <span class="k3">=</span><span class="k3">=</span> mytimer<span class="k2">)</span>
    <span class="k2">{</span>
        respawn_ship<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
        <a href="http://www.allegro.cc/manual/al_stop_timer"><span class="a">al_stop_timer</span></a><span class="k2">(</span>mytimer<span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Mon, 29 Aug 2011 02:42:31 +0000</pubDate>
	</item>
</rss>
