1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
#include "objects.h"
void Cable::setup() {
c1 = game.RAND(0, net.units-1);
do {
c2 = game.RAND(0, net.units-1);
} while (c2 == c1);
active = index = 0;
delay = spark.delay(game.level);
x1 = net.computers[c1].x + net.width/3;
x2 = net.computers[c2].x + net.width/3;
y1 = net.computers[c1].y + net.height/2;
y2 = net.computers[c2].y + net.height/2;
}
void Cable::update () {
if (active) {
if ((net.computers[c1].os == OS.WINGDOWS) ==
(net.computers[c2].os == OS.WINGDOWS))
active=0;
else if (net.computers[c1].os == OS.WINGDOWS ||
net.computers[c2].os == OS.WINGDOWS)
{
int dir, xdist, ydist,c;
float sx, sy;
dir = (net.computers[c2].os == OS.WINGDOWS);
if (dir)
{xdist=x1-x; ydist=y1-y;}
else
{xdist=x2-x; ydist=y2-y;}
sx = xdist >= 0 ? 1.0 : -1.0;
sy = ydist >= 0 ? 1.0 : -1.0;
xdist = abs(xdist);
ydist = abs(ydist);
if (xdist==0 && ydist==0) {
if (dir==0) c=c2; else c=c1;
if (!net.computers[c].busy) {
if (net.computers[c].os == OS.OFF)
net.off--;
else
net.base--;
net.win++;
net.computers[c].os=OS.WINGDOWS;
}
active=0;
}
else if (game.MAX (xdist, ydist) < spark.speed) {
if (dir)
{x = x1; y = y1;}
else
{x = x2; y = y2;}
}
else {
fx+=(xdist*spark.speed*sx)/(xdist+ydist);
fy+=(ydist*spark.speed*sy)/(xdist+ydist);
x = (int)fx;
y = (int)fy;
}
index = 1 - index;
}
}
else {
if ((net.computers[c1].os == OS.WINGDOWS) ==
(net.computers[c2].os == OS.WINGDOWS))
delay = spark.delay(game.level);
else if (net.computers[c1].os == OS.WINGDOWS ||
net.computers[c2].os == OS.WINGDOWS)
{
if (delay>0) delay--;
else {
active = 1;
if (net.computers[c1].os == OS.WINGDOWS)
{fx=x=x1; fy=y=y1;}
else
{fx=x=x2; fy=y=y2;}
}
}
}
}
int Cable::onspark (int locx, int locy) {
if (!active) return 0;
return (abs(locx-x) < spark.width
&& abs(locy-y) < spark.height);
}
void Cable::draw() {
int rx = x - spark.width/2;
int ry = y - spark.height/2;
ui.draw_line(x1,y1,x2,y2);
if (active)
ui.draw(spark.pictures[index], rx, ry);
}
|