Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv29197/src
Modified Files:
local.c
Log Message:
Fix atan2 checks for playing sound by distance, to not compute angle is distance is 0.
Fix atan2 checks to change sign of y-coord (since y in netrek coords is opposite cartesian),
and to properly translate between atan and SDL coordinate systems.
Index: local.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/local.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- local.c 13 Dec 2006 09:03:01 -0000 1.50
+++ local.c 8 Feb 2007 08:34:43 -0000 1.51
@@ -731,8 +731,13 @@
// Reason for normalization is Mix_SetDistance requires that range
distance = (int)((255 * distance)/CORNER_DIST);
// Calculate angle, then adjust as necessary for Mix_SetDistance
- angle = (int)(atan2(newdy, newdx)*180/XPI);
- angle = 270 - angle;
+ if (distance != 0)
+ {
+ angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ angle = 90 - angle;
+ }
+ else
+ angle = 0;
// At short distances, don't use angular sound
if (distance < SCALE/2)
Play_Sound(CLOAKED_WAV);
@@ -763,7 +768,7 @@
if (newSound)
{
if (j->p_cloakphase == CLOAK_PHASES - 1)
- {
+ {
newdx = dx - WINSIDE/2;
newdy = dy - WINSIDE/2;
@@ -773,8 +778,13 @@
// Reason for normalization is Mix_SetDistance requires that range
distance = (int)((255 * distance)/CORNER_DIST);
// Calculate angle, then adjust as necessary for Mix_SetDistance
- angle = (int)(atan2(newdy, newdx)*180/XPI);
- angle = 270 - angle;
+ if (distance != 0)
+ {
+ angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ angle = 90 - angle;
+ }
+ else
+ angle = 0;
// At short distances, don't use angular sound
if (distance < SCALE/2)
Play_Sound(UNCLOAK_WAV);
@@ -1334,8 +1344,13 @@
// Reason for normalization is Mix_SetDistance requires that range
distance = (int)((255 * distance)/CORNER_DIST);
// Calculate angle, then adjust as necessary for Mix_SetDistance
- angle = (int)(atan2(newdy, newdx)*180/XPI);
- angle = 270 - angle;
+ if (distance != 0)
+ {
+ angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ angle = 90 - angle;
+ }
+ else
+ angle = 0;
// At short distances, don't use angular sound
if (distance < SCALE/2)
{
@@ -1427,8 +1442,13 @@
// Reason for normalization is Mix_SetDistance requires that range
distance = (int)((255 * distance)/CORNER_DIST);
// Calculate angle, then adjust as necessary for Mix_SetDistance
- angle = (int)(atan2(newdy, newdx)*180/XPI);
- angle = 270 - angle;
+ if (distance != 0)
+ {
+ angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ angle = 90 - angle;
+ }
+ else
+ angle = 0;
// At short distances, don't use angular sound
if (distance < SCALE/2)
Play_Sound(PHASER_OTHER_WAV);
@@ -1858,8 +1878,13 @@
new_other_torp_dist = (int)((255 * new_other_torp_dist)/CORNER_DIST);
// Find how long till torp expires...BROKEN!
// Calculate angle, then adjust as necessary for Mix_SetDistance
- new_angle = (int)(atan2(newdy, newdx)*180/XPI);
- new_angle = 270 - new_angle;
+ if (new_other_torp_dist != 0)
+ {
+ new_angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ new_angle = 90 - new_angle;
+ }
+ else
+ new_angle = 0;
// Choose closest torp - yes this sucks sometimes, but better than nothing
if (new_other_torp_dist < other_torp_dist)
{
@@ -1903,8 +1928,13 @@
// Reason for normalization is Mix_SetDistance requires that range
distance = (int)((255 * distance)/CORNER_DIST);
// Calculate angle, then adjust as necessary for Mix_SetDistance
- angle = (int)(atan2(newdy, newdx)*180/XPI);
- angle = 270 - angle;
+ if (distance != 0)
+ {
+ angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ angle = 90 - angle;
+ }
+ else
+ angle = 0;
// At short distances, don't use angular sound
if (distance < SCALE/2)
Play_Sound(TORP_HIT_WAV);
@@ -2109,8 +2139,13 @@
new_other_plasma_dist = (int)((255 * new_other_plasma_dist)/CORNER_DIST);
// Find how long till torp expires...BROKEN!
// Calculate angle, then adjust as necessary for Mix_SetDistance
- new_angle = (int)(atan2(newdy, newdx)*180/XPI);
- new_angle = 270 - new_angle;
+ if (new_other_plasma_dist != 0)
+ {
+ new_angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ new_angle = 90 - new_angle;
+ }
+ else
+ new_angle = 0;
// Choose closest plasma - yes this sucks sometimes, but better than nothing
if (new_other_plasma_dist < other_plasma_dist)
{
@@ -2154,8 +2189,13 @@
// Reason for normalization is Mix_SetDistance requires that range
distance = (int)((255 * distance)/CORNER_DIST);
// Calculate angle, then adjust as necessary for Mix_SetDistance
- angle = (int)(atan2(newdy, newdx)*180/XPI);
- angle = 270 - angle;
+ if (distance != 0)
+ {
+ angle = (int)(atan2(-newdy, newdx)*180/XPI);
+ angle = 90 - angle;
+ }
+ else
+ angle = 0;
// At short distances, don't use angular sound
if (distance < SCALE/2)
Play_Sound(PLASMA_HIT_WAV);