summaryrefslogtreecommitdiff
path: root/noncore/games/kbill/Cable.cc
authormark <mark>2002-04-14 17:08:03 (UTC)
committer mark <mark>2002-04-14 17:08:03 (UTC)
commitbfeb067c8acfb5f1797fdc886ac71ca1b10ccf57 (patch) (unidiff)
treead77e90c90f4bfb598bbe93aa4b3e14b689c96f4 /noncore/games/kbill/Cable.cc
parenta0fe593db4e700989cc19e28b67a58f87823afeb (diff)
downloadopie-bfeb067c8acfb5f1797fdc886ac71ca1b10ccf57.zip
opie-bfeb067c8acfb5f1797fdc886ac71ca1b10ccf57.tar.gz
opie-bfeb067c8acfb5f1797fdc886ac71ca1b10ccf57.tar.bz2
Import of kbill
Diffstat (limited to 'noncore/games/kbill/Cable.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/kbill/Cable.cc94
1 files changed, 94 insertions, 0 deletions
diff --git a/noncore/games/kbill/Cable.cc b/noncore/games/kbill/Cable.cc
new file mode 100644
index 0000000..6fdb3d1
--- a/dev/null
+++ b/noncore/games/kbill/Cable.cc
@@ -0,0 +1,94 @@
1#include "objects.h"
2
3void Cable::setup() {
4 c1 = game.RAND(0, net.units-1);
5 do {
6 c2 = game.RAND(0, net.units-1);
7 } while (c2 == c1);
8 active = index = 0;
9 delay = spark.delay(game.level);
10 x1 = net.computers[c1].x + net.width/3;
11 x2 = net.computers[c2].x + net.width/3;
12 y1 = net.computers[c1].y + net.height/2;
13 y2 = net.computers[c2].y + net.height/2;
14}
15
16void Cable::update () {
17 if (active) {
18 if ((net.computers[c1].os == OS.WINGDOWS) ==
19 (net.computers[c2].os == OS.WINGDOWS))
20 active=0;
21 else if (net.computers[c1].os == OS.WINGDOWS ||
22 net.computers[c2].os == OS.WINGDOWS)
23 {
24 int dir, xdist, ydist,c;
25 float sx, sy;
26 dir = (net.computers[c2].os == OS.WINGDOWS);
27 if (dir)
28 {xdist=x1-x; ydist=y1-y;}
29 else
30 {xdist=x2-x; ydist=y2-y;}
31 sx = xdist >= 0 ? 1.0 : -1.0;
32 sy = ydist >= 0 ? 1.0 : -1.0;
33 xdist = abs(xdist);
34 ydist = abs(ydist);
35 if (xdist==0 && ydist==0) {
36 if (dir==0) c=c2; else c=c1;
37 if (!net.computers[c].busy) {
38 if (net.computers[c].os == OS.OFF)
39 net.off--;
40 else
41 net.base--;
42 net.win++;
43 net.computers[c].os=OS.WINGDOWS;
44 }
45 active=0;
46 }
47 else if (game.MAX (xdist, ydist) < spark.speed) {
48 if (dir)
49 {x = x1; y = y1;}
50 else
51 {x = x2; y = y2;}
52 }
53 else {
54 fx+=(xdist*spark.speed*sx)/(xdist+ydist);
55 fy+=(ydist*spark.speed*sy)/(xdist+ydist);
56 x = (int)fx;
57 y = (int)fy;
58 }
59 index = 1 - index;
60 }
61 }
62 else {
63 if ((net.computers[c1].os == OS.WINGDOWS) ==
64 (net.computers[c2].os == OS.WINGDOWS))
65 delay = spark.delay(game.level);
66 else if (net.computers[c1].os == OS.WINGDOWS ||
67 net.computers[c2].os == OS.WINGDOWS)
68 {
69 if (delay>0) delay--;
70 else {
71 active = 1;
72 if (net.computers[c1].os == OS.WINGDOWS)
73 {fx=x=x1; fy=y=y1;}
74 else
75 {fx=x=x2; fy=y=y2;}
76 }
77 }
78 }
79}
80
81int Cable::onspark (int locx, int locy) {
82 if (!active) return 0;
83 return (abs(locx-x) < spark.width
84 && abs(locy-y) < spark.height);
85}
86
87void Cable::draw() {
88 int rx = x - spark.width/2;
89 int ry = y - spark.height/2;
90 ui.draw_line(x1,y1,x2,y2);
91 if (active)
92 ui.draw(spark.pictures[index], rx, ry);
93}
94