<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Intro and question about how to show a line being drawn</title>
		<link>http://www.allegro.cc/forums/view/615415</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 30 May 2015 20:46:11 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi All,</p><p>Without being a completely random person asking a random question please allow me to introduce myself. My name is scorliss and I am new member to the Allegro.cc community. I am currently working towards my Game Development Certification.</p><p>I am in the process of making a Missile Defense game and I have learnt quite a bit from all of you and your previous posts. </p><p>I am currently creating the game in Allegro 5 and the source code that I am porting contains a call to do_line. 
</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">void</span> doline<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> d<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="c">//line callback function...fills the points array</span>
<span class="number">  4</span>    points<span class="k2">[</span>totalpoints<span class="k2">]</span>.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number">  5</span>    points<span class="k2">[</span>totalpoints<span class="k2">]</span>.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number">  6</span>    totalpoints<span class="k3">+</span><span class="k3">+</span><span class="k2">;</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> firenewmissile<span class="k2">(</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="c">//random starting location</span>
<span class="number"> 13</span>    x1 <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span>SCREEN_W-1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    y1 <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>
<span class="number"> 15</span>    
<span class="number"> 16</span>    <span class="c">//random ending location</span>
<span class="number"> 17</span>    x2 <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="k2">(</span>SCREEN_W-1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    y2 <span class="k3">=</span> SCREEN_H-50<span class="k2">;</span>
<span class="number"> 19</span>        
<span class="number"> 20</span>    <span class="c">//construct the line point-by-point</span>
<span class="number"> 21</span>    <a href="http://www.allegro.cc/manual/do_line"><span class="a">do_line</span></a><span class="k2">(</span>buffer,x1,y1,x2,y2,<span class="n">0</span>,<span class="k3">&amp;</span>doline<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>

So reprogramming this call I am now just drawing a line on the display instead of a line being draw segment by segment. </p><p>The issue that I am having is that al_draw_soft_line has no examples and I am unsure how and why to use the state parameter for this function. Can someone please point me to or show me how to use this.<br />Thanks and again, <br />Scorliss
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (scorliss)</author>
		<pubDate>Fri, 29 May 2015 03:29:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&quot;<i>see the implementation of the various shading routines in addons/primitives/line_soft.c</i>&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Fri, 29 May 2015 15:12:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, </p><p>what exactly are you trying to achieve? I must admit I don&#39;t remember Missile Defense clearly. Do you want to track the position for collision detection? What is points[totalpoints]?</p><p>Maybe you could do it with simple (floating point) 2D vectors instead of tracking pixels in software as you seem to do?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Polybios)</author>
		<pubDate>Sat, 30 May 2015 13:01:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi scorliss!</p><p>When you call <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_soft_line"><span class="a">al_draw_soft_line</span></a></span> you pass in three functions, first, step and draw. Allegro will call your functions:
</p><div class="source-code snippet"><div class="inner"><pre>first<span class="k2">(</span>...<span class="k2">)</span><span class="k2">;</span> <span class="c">// Just once</span>

step<span class="k2">(</span>...<span class="k2">)</span><span class="k2">;</span>
draw<span class="k2">(</span>...<span class="k2">)</span><span class="k2">;</span>
step<span class="k2">(</span>...<span class="k2">)</span><span class="k2">;</span>
draw<span class="k2">(</span>...<span class="k2">)</span><span class="k2">;</span> 
... <span class="c">// for every point on the line</span>
</pre></div></div><p>
So to do the equivalent your code you need something like:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> v1<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> v2<span class="k2">;</span>
v1.x <span class="k3">=</span> x1<span class="k2">;</span>
v1.y <span class="k3">=</span> y1<span class="k2">;</span>
v2.x <span class="k3">=</span> x2<span class="k2">;</span>
v2.y <span class="k3">=</span> y2<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_soft_line"><span class="a">al_draw_soft_line</span></a><span class="k2">(</span><span class="k3">&amp;</span>v1, <span class="k3">&amp;</span>v2, NULL, NULL, NULL, doline<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
with 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> doline<span class="k2">(</span>uintptr_t pv, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="k2">{</span>
<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> pv<span class="k2">;</span>
<span class="c">//line callback function...fills the points array   </span>
points<span class="k2">[</span>totalpoints<span class="k2">]</span>.x <span class="k3">=</span> x<span class="k2">;</span>   
points<span class="k2">[</span>totalpoints<span class="k2">]</span>.y <span class="k3">=</span> y<span class="k2">;</span>   
totalpoints<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

For your example you don&#39;t need <span class="source-code">state</span> so it&#39;s null. In other cases it&#39;s useful to have some extra data that gets passed along to each function in turn.  This is quite a common pattern for callbacks; it helps to avoid global variables.</p><p>Bogus example using state:
</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> counter <span class="k2">{</span>
<span class="number">  2</span> <span class="k1">int</span> minor_steps<span class="k2">;</span>
<span class="number">  3</span> <span class="k1">int</span> major_steps<span class="k2">;</span>
<span class="number">  4</span> <span class="k1">int</span> points<span class="k2">;</span> 
<span class="number">  5</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">void</span> first<span class="k2">(</span>uintptr_t state, <span class="k1">int</span> x0, <span class="k1">int</span> y0, <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v1, <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v2<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span> <span class="c">/* Initialise */</span>
<span class="number">  9</span> <span class="k1">struct</span> counter<span class="k3">*</span> pc <span class="k3">=</span> <span class="k2">(</span><span class="k1">struct</span> counter<span class="k3">*</span><span class="k2">)</span> state<span class="k2">;</span>
<span class="number"> 10</span> pc-&gt;minor_steps <span class="k3">=</span> pc-&gt;major_steps <span class="k3">=</span> pc-&gt;points <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 11</span><span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">void</span> step<span class="k2">(</span>uintptr_t state, <span class="k1">int</span> type<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span> <span class="c">/* count steps */</span>
<span class="number"> 15</span> <span class="k1">struct</span> counter<span class="k3">*</span> pc <span class="k3">=</span> <span class="k2">(</span><span class="k1">struct</span> counter<span class="k3">*</span><span class="k2">)</span> state<span class="k2">;</span>
<span class="number"> 16</span> <span class="k1">if</span> <span class="k2">(</span>type<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>  <span class="k3">+</span><span class="k3">+</span>pc-&gt;minor_steps<span class="k2">;</span>
<span class="number"> 18</span> <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 19</span>  <span class="k3">+</span><span class="k3">+</span>pc-&gt;major_steps<span class="k2">;</span>
<span class="number"> 20</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="k1">void</span> draw<span class="k2">(</span>uintptr_t state, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span> <span class="c">/* count points */</span>
<span class="number"> 25</span> <span class="k1">struct</span> counter<span class="k3">*</span> pc <span class="k3">=</span> <span class="k2">(</span><span class="k1">struct</span> counter<span class="k3">*</span><span class="k2">)</span> state<span class="k2">;</span>
<span class="number"> 26</span> <span class="k3">+</span><span class="k3">+</span>pc-&gt;points<span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k1">void</span> countline<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v1, <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v2<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span> <span class="k1">struct</span> counter mycount<span class="k2">;</span>
<span class="number"> 31</span> <a href="http://www.allegro.cc/manual/al_draw_soft_line"><span class="a">al_draw_soft_line</span></a><span class="k2">(</span>v1, v2, <span class="k3">&amp;</span>mycount, first, step, draw<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d minor steps, %d major steps, %d points\n"</span>, mycount.minor_steps, mycount.major_steps, mycount.points<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>
(typed in by hand so may have mistakes!!)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Sat, 30 May 2015 20:46:11 +0000</pubDate>
	</item>
</rss>
