Update of /cvsroot/netrek/client/netrekxp/src
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv11382
Modified Files:
input.c util.c
Log Message:
Autophaser, optimize code to reduce math operations.
Index: input.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/input.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- input.c 23 May 2009 15:21:20 -0000 1.52
+++ input.c 24 May 2009 01:38:55 -0000 1.53
@@ -1920,9 +1920,8 @@
phaseraction (W_Event * data)
{
unsigned char course;
- int x, y;
+ int x, y, dx, dy;
int distance;
- register struct player *j;
struct obtype *gettarget (W_Window ww,
int x,
int y,
@@ -1939,47 +1938,31 @@
sendPhaserReq (course);
return;
}
- if (target->o_type == PLAYERTYPE)
- {
- j = &players[target->o_num];
- if (data->Window == mapw)
- {
- x = j->p_x * GWINSIDE / GWIDTH;
- y = j->p_y * GWINSIDE / GWIDTH;
- }
- else if (data->Window == w)
- {
- x = (j->p_x - me->p_x) / scaleFactor + TWINSIDE / 2;
- y = (j->p_y - me->p_y) / scaleFactor + TWINSIDE / 2;
- }
- }
- else if (target->o_type == PLASMATYPE)
- {
- x = target->o_dist_x;
- y = target->o_dist_y;
- }
+ dx = target->o_dist_x - me->p_x;
+ dy = target->o_dist_y - me->p_y;
- /* Sanity check on distance. Negative x or y indicates phaser is in local
- window but target is outside viewable range. */
- if (x < 0 || y < 0)
+ /* Sanity check on distance. */
+ /* Check ship max phaser range for phasers. Sometimes phasers are fired to "point". */
+
+ distance = (int) sqrt((double) dx*dx + (double) dy*dy);
+ if (distance > (PHASEDIST * me->p_ship.s_phaserdamage / 100))
{
course = (unsigned char) (getcourse (data->Window, data->x, data->y));
sendPhaserReq (course);
return;
}
- /* Check ship max phaser range for local window phasers. Sometimes phasers
- are fired to "point". Not checking galaxy map phasers. */
+
+ /* Everything checks out. Scale to window coordinates. */
if (data->Window == w)
{
- distance = (int) sqrt((x- TWINSIDE / 2)*(x - TWINSIDE / 2) + (y - TWINSIDE / 2)*(y - TWINSIDE /2));
- if (distance > (PHASEDIST * j->p_ship.s_phaserdamage / 100 / scaleFactor))
- {
- course = (unsigned char) (getcourse (data->Window, data->x, data->y));
- sendPhaserReq (course);
- return;
- }
+ x = dx / scaleFactor + TWINSIDE / 2;
+ y = dy / scaleFactor + TWINSIDE / 2;
+ }
+ else
+ {
+ x = target->o_dist_x * GWINSIDE / GWIDTH;
+ y = target->o_dist_y * GWINSIDE / GWIDTH;
}
- /* Everything checks out */
course = (unsigned char) (getcourse (data->Window, x, y));
}
else
Index: util.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/util.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- util.c 23 May 2009 15:21:20 -0000 1.9
+++ util.c 24 May 2009 01:38:55 -0000 1.10
@@ -123,8 +123,8 @@
{
_target.o_type = PLANETTYPE;
_target.o_num = i;
- _target.o_dist_x = -1;
- _target.o_dist_y = -1;
+ _target.o_dist_x = k->pl_x;
+ _target.o_dist_y = k->pl_y;
closedist = dist;
}
@@ -152,8 +152,8 @@
{
_target.o_type = PLAYERTYPE;
_target.o_num = i;
- _target.o_dist_x = -1;
- _target.o_dist_y = -1;
+ _target.o_dist_x = j->p_x;
+ _target.o_dist_y = j->p_y;
closedist = dist;
}
}
@@ -172,8 +172,8 @@
{
_target.o_type = PLASMATYPE;
_target.o_num = -1;
- _target.o_dist_x = (int) ((x - pt->pt_x) / scaleFactor + TWINSIDE / 2);
- _target.o_dist_y = (int) ((y - pt->pt_y) / scaleFactor + TWINSIDE / 2);
+ _target.o_dist_x = pt->pt_x;
+ _target.o_dist_y = pt->pt_y;
closedist = dist;
}
}