<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Can&#39;t get the right angle...</title>
		<link>http://www.allegro.cc/forums/view/591237</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 02 May 2007 19:05:28 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi guys! I thought I could get away with my hacks. But when I needed to track a certain object&#39;s angle things started to get messy.</p><p>In a certain class, I have the following code...</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>    <span class="k1">if</span> <span class="k2">(</span> s-&gt;isVisible<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span></td></tr><tr><td class="number">2</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>        <span class="c">//wc-&gt;fireWeapon();</span></td></tr><tr><td class="number">4</td><td>        </td></tr><tr><td class="number">5</td><td>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"targetY: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> targetY <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" sY: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> sY <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"targetX: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> targetX <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" sX: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> sX <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>        <span class="k1">int</span> r1 <span class="k3">=</span> <span class="k2">(</span>targetY <span class="k3">-</span> sY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>        <span class="k1">int</span> r2 <span class="k3">=</span> <span class="k2">(</span>targetX <span class="k3">-</span> sX<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>        </td></tr><tr><td class="number">11</td><td>        <span class="k1">if</span> <span class="k2">(</span>r1 <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">12</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>            r1 <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>        </td></tr><tr><td class="number">16</td><td>        <span class="k1">if</span> <span class="k2">(</span>r2 <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">17</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>            r2 <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>        <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> fangle <span class="k3">=</span> fatan<span class="k2">(</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>r1 <span class="k3">/</span> r2<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>        <span class="k1">int</span> angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span>fangle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>        </td></tr><tr><td class="number">24</td><td>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"angle: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> angle <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>        </td></tr><tr><td class="number">26</td><td>        wc-&gt;getCurrentWeapon<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>fire<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    <span class="k2">}</span></td></tr></tbody></table></div></div><p>


When weapon is fired and releases a projectile... The projectile moves like this...</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> Vulcan::update<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span>            </td></tr><tr><td class="number">3</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> fAngle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span> <span class="k2">(</span>angle<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    </td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> newX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">int</span> newY <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>        </td></tr><tr><td class="number">8</td><td>    <span class="k1">if</span> <span class="k2">(</span>this-&gt;x <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>        newX <span class="k3">=</span> x <span class="k3">+</span> <span class="k2">(</span>speed <span class="k3">*</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span> fcos<span class="k2">(</span>fAngle<span class="k2">)</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>        newY <span class="k3">=</span> y <span class="k3">+</span> <span class="k2">(</span>speed <span class="k3">*</span> <a href="http://www.allegro.cc/manual/fixtoi" target="_blank"><span class="a">fixtoi</span></a><span class="k2">(</span> fsin<span class="k2">(</span>fAngle<span class="k2">)</span> <span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        move<span class="k2">(</span>newX, newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>       </td></tr><tr><td class="number">14</td><td>        animation-&gt;animate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k2">}</span>   </td></tr><tr><td class="number">16</td><td>     </td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I&#39;m aware that my code(if it ever went well) would move in only 8 directions. But I could live with that. What I don&#39;t want is that my projectile doesn&#39;t go in the right direction like when I&#39;m on the left side, the enemy would shoot right! Thanks for the help!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Wed, 02 May 2007 16:54:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you <b>have</b> to use fixed point? I suggest <a href="http://en.wikipedia.org/wiki/Radian">radian</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Wed, 02 May 2007 17:38:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the link. BTW, it seems like functions like fatan, fcos, and fsin requires a fixed type?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Wed, 02 May 2007 18:55:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>[long time later, I realized I was mistaken. So I rewrote this to just say...]<br />Use cosf, sinf, and tanf for float values.</p><p>This may be the source of the problem you&#39;re having. Try something like this
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>s-&gt;isVisible<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
  <span class="k1">float</span> angle<span class="k3">=</span>atan2f<span class="k2">(</span>targetY-sY,targetX-sX<span class="k2">)</span><span class="k2">;</span>
  wc-&gt;getCurrentWeapon<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>fire<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>

<span class="k1">void</span> Vulcan::update<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">float</span> newX<span class="k3">=</span>x<span class="k3">+</span>speed<span class="k3">*</span>cosf<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">float</span> newY<span class="k3">=</span>y<span class="k3">+</span>speed<span class="k3">*</span>sinf<span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
    move<span class="k2">(</span>newX,newY<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 (Ceagon Xylas)</author>
		<pubDate>Wed, 02 May 2007 19:05:28 +0000</pubDate>
	</item>
</rss>
