|
|
1.1 root 1: #include <jerq.h>
2: #include "event.h"
3: #include "rock.h"
4: typedef struct{
5: Point x;
6: Rectangle r;
7: Point v;
8: char allocated;
9: char nmoves;
10: }Bomb;
11: #define NBOMB 16 /* known in event type */
12: #define BOMBTICKS 20
13: #define VBOMB 15
14: #define RADBOMB 2
15: static int NMOVES;
16: Bomb bomb[NBOMB];
17: int bombadvance();
18: initbomb()
19: {
20: register Bomb *b;
21: NMOVES=((Drect.corner.y/2)/VBOMB);
22: for(b=bomb; b<&bomb[NBOMB]; b++)
23: b->allocated=0;
24: }
25: startbomb(p, v, dir)
26: Point p, v;
27: register dir;
28: {
29: register i;
30: register Bomb *b;
31: for(i=0, b=bomb; i<NBOMB; i++, b++)
32: if(b->allocated==0){
33: if(addevent(newevent(), BOMBTICKS, bombadvance, EBOMB|i)){
34: b->x=p;
35: b->r.origin=add(p, Pt(-1, -1));
36: b->r.corner=add(p, Pt(1, 1));
37: b->nmoves=NMOVES;
38: b->v=v;
39: b->v.x+=muldiv(VBOMB, cos(dir), 1024);
40: b->v.y+=muldiv(VBOMB, sin(dir), 1024);
41: b->allocated=1;
42: jrectf(b->r, F_XOR);
43: }
44: break;
45: }
46: }
47: bombadvance(x)
48: {
49: register Bomb *b= &bomb[x&=~EBOMB];
50: register Rock *r;
51: extern notdrawn;
52: jrectf(b->r, F_XOR);
53: if(--b->nmoves==0){
54: ReturnNo:
55: b->allocated=0;
56: return 0;
57: }
58: r=collision(b->x, hash(b->x), RADBOMB);
59: if(r){
60: explode(r->x);
61: split(r);
62: killrock(r);
63: goto ReturnNo;
64: }
65: b->x.x+=b->v.x;
66: b->x.y+=b->v.y;
67: onscreen(&b->x);
68: b->r.origin=add(b->x, Pt(-1, -1));
69: b->r.corner=add(b->x, Pt(1, 1));
70: jrectf(b->r, F_XOR);
71: if(notdrawn > -20)
72: notdrawn-=2;
73: return 1;
74: }
75:
76: Point
77: transform(p)
78: Point p;
79: {
80: # define o Drect.origin
81: # define c Drect.corner
82: p.x=muldiv(c.x-o.x, p.x, Drect.corner.x)+o.x;
83: p.y=muldiv(c.y-o.y, p.y, Drect.corner.y)+o.y;
84: #undef o
85: #undef c
86: return p;
87: }
88: Rectangle
89: rtransform(r)
90: Rectangle r;
91: {
92: r.origin=transform(r.origin);
93: r.corner=transform(r.corner);
94: return r;
95: }
96:
97: jrectf(r, fc)
98: Rectangle r;
99: {
100: rectf(&display, rtransform(r), fc);
101: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.