0,0 → 1,466 |
/* Rocket Forces |
* Filename: objects.h |
* Version 0.1 |
* Copyright (c) Serial 2007 |
*/ |
|
|
void ppx(int x, int y, int color); |
void pline(int x1, int y1, int x2, int y2, int color); |
void draw4(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int color); |
|
|
class cBuilding |
{ |
public: |
void Draw(int x, int y, int color) |
{ |
draw4(x, y, x+10, y-5, x+20, y, x, y, color); |
draw4(x, y, x+20, y, x+20, y+11, x, y+11, color); |
draw4(x+3, y+3, x+8, y+3, x+8, y+8, x+3, y+8, color); |
draw4(x+15, y+3, x+20, y+3, x+20, y+11, x+15, y+11, color); |
} |
}; |
|
class cCursor |
{ |
public: |
cCursor() |
{ |
cx = -1; |
cy = -1; |
} |
void Delete(int color) |
{ |
ppx(cx, cy, color); |
|
ppx(cx-3, cy, color); |
ppx(cx-4, cy, color); |
ppx(cx-5, cy, color); |
ppx(cx, cy-3, color); |
ppx(cx, cy-4, color); |
ppx(cx, cy-5, color); |
ppx(cx-1, cy-3, color); |
ppx(cx-2, cy-3, color); |
ppx(cx-3, cy-3, color); |
ppx(cx-3, cy-2, color); |
ppx(cx-3, cy-1, color); |
ppx(cx+1, cy-3, color); |
|
ppx(cx+3, cy, color); |
ppx(cx+4, cy, color); |
ppx(cx+5, cy, color); |
ppx(cx, cy+3, color); |
ppx(cx, cy+4, color); |
ppx(cx, cy+5, color); |
ppx(cx+1, cy+3, color); |
ppx(cx+2, cy+3, color); |
ppx(cx+3, cy+3, color); |
ppx(cx+3, cy+2, color); |
ppx(cx+3, cy+1, color); |
ppx(cx+1, cy-3, color); |
ppx(cx-1, cy+3, color); |
} |
void Draw(int x, int y, int color) |
{ |
if (cx!=x || cy!=y) |
{ |
Delete(BG_COLOR); |
cx = x; |
cy = y; |
ppx(cx, cy, color); |
|
ppx(cx-3, cy, color); |
ppx(cx-4, cy, color); |
ppx(cx-5, cy, color); |
ppx(cx, cy-3, color); |
ppx(cx, cy-4, color); |
ppx(cx, cy-5, color); |
ppx(cx-1, cy-3, color); |
ppx(cx-2, cy-3, color); |
//ppx(cx-3, cy-3, color); |
ppx(cx-3, cy-2, color); |
ppx(cx-3, cy-1, color); |
ppx(cx+1, cy-3, color); |
|
ppx(cx+3, cy, color); |
ppx(cx+4, cy, color); |
ppx(cx+5, cy, color); |
ppx(cx, cy+3, color); |
ppx(cx, cy+4, color); |
ppx(cx, cy+5, color); |
ppx(cx+1, cy+3, color); |
ppx(cx+2, cy+3, color); |
//ppx(cx+3, cy+3, color); |
ppx(cx+3, cy+2, color); |
ppx(cx+3, cy+1, color); |
ppx(cx+1, cy-3, color); |
ppx(cx-1, cy+3, color); |
} |
} |
private: |
int cx, cy; |
}; |
|
class cExplode |
{ |
public: |
cExplode() |
{ |
cx = -1; |
cy = -1; |
} |
void Enable(int cx, int cy) |
{ |
step = 1; |
cExplode::cx = cx; |
cExplode::cy = cy; |
} |
int IsEnabled(void) |
{ |
if (cx==-1 && cy==-1) |
{ |
return 0; |
} |
else |
{ |
return 1; |
} |
} |
void Draw(int r, int color) |
{ |
int d=3-2*r, x=-1, y=r; |
while (x++<y) |
{ |
ppx(cx+x, cy+y, color); |
ppx(cx+x, cy-y, color); |
ppx(cx-x, cy+y, color); |
ppx(cx-x, cy-y, color); |
ppx(cx+y, cy+x, color); |
ppx(cx+y, cy-x, color); |
ppx(cx-y, cy+x, color); |
ppx(cx-y, cy-x, color); |
if (d<0) |
{ |
d += 4*x+6; |
} |
else |
{ |
d += 4*(x-y)+10; |
y--; |
} |
} |
} |
void DrawNext(int color) |
{ |
if (step>=EXP_RAD) |
{ |
Disable(BG_COLOR); |
} |
else |
{ |
Draw(step, BG_COLOR); |
Draw(++step, color); |
} |
} |
void Disable(int color) |
{ |
Draw(step, color); |
cx = -1; |
cy = -1; |
} |
int cx, cy; |
int step; |
}; |
|
class cRocket |
{ |
public: |
cRocket() |
{ |
cx = -1; |
cy = -1; |
} |
void Enable(int x, int y, int width, int height, int cx, int cy) |
{ |
coord[0][0] = x; |
coord[0][1] = y; |
coord[1][0] = x+width; |
coord[1][1] = y; |
coord[2][0] = x+width; |
coord[2][1] = y+height; |
coord[3][0] = x; |
coord[3][1] = y+height; |
cRocket::cx = cx; |
cRocket::cy = cy; |
for (int j=0; j<4; j++) |
{ |
dist[j] = sqrt((double)((coord[j][0]-cx)*(coord[j][0]-cx)+(coord[j][1]-cy)*(coord[j][1]-cy))); |
fi[j] = acos((coord[j][0]-cx)/dist[j]); |
if (coord[j][1]<cy) fi[j]*=-1; |
fire[j][0] = -1; |
fire[j][1] = -1; |
} |
} |
int IsEnabled(void) |
{ |
if (cx==-1 && cy==-1) |
{ |
return 0; |
} |
else |
{ |
return 1; |
} |
} |
void Draw(int color) |
{ |
draw4(coord[0][0], coord[0][1], coord[1][0], coord[1][1], coord[2][0], coord[2][1], coord[3][0], coord[3][1], color); |
if (fire[3][0]!=-1 || fire[3][1]!=-1) |
{ |
ppx(fire[3][0], fire[3][1], BG_COLOR); |
} |
} |
void DrawAngle(int mx, int my, int color) |
{ |
// Delete old rectangle |
Draw(BG_COLOR); |
|
// Draw new rectangle |
double a; |
long int dx = (long int) (cx-mx)*(cx-mx); |
long int dy = (long int) (cy-my)*(cy-my); |
if (cx!=mx || cy!=my) |
{ |
a = -M_PI/2+acos((cx-mx)/sqrt((double)(dx+dy))); |
for (int j=0; j<4; j++) |
{ |
coord[j][0] = round_int((double)(cx+dist[j]*cos(a+fi[j]))); |
coord[j][1] = round_int((double)(cy+dist[j]*sin(a+fi[j]))); |
} |
} |
draw4(coord[0][0], coord[0][1], coord[1][0], coord[1][1], coord[2][0], coord[2][1], coord[3][0], coord[3][1], color); |
for (int i=3; i>0; i--) |
{ |
fire[i][0] = fire[i-1][0]; |
fire[i][1] = fire[i-1][1]; |
} |
fire[0][0] = cx; |
fire[0][1] = cy; |
for (int i=1; i<4; i++) |
{ |
if (fire[i][0]!=-1 || fire[i][1]!=-1) ppx(fire[i][0], fire[i][1], SMOKE_COLOR); |
} |
} |
void Disable(int color) |
{ |
for (int i=0; i<4; i++) |
{ |
ppx(fire[i][0], fire[i][1], color); |
fire[i][0] = 0; |
fire[i][1] = 0; |
} |
Draw(color); |
cx = -1; |
cy = -1; |
} |
int cx, cy; |
protected: |
int coord[4][2]; |
double dist[4]; |
double fi[4]; |
int fire[4][2]; |
}; |
|
class cBomb: public cRocket |
{ |
public: |
void Draw(int color) |
{ |
draw4(coord[0][0], coord[0][1], coord[1][0], coord[1][1], coord[2][0], coord[2][1], coord[3][0], coord[3][1], color); |
ppx(cx-1, coord[2][1]+1, color); |
ppx(cx, coord[2][1]+1, color); |
ppx(cx+1, coord[2][1]+1, color); |
for (int i=1; i<4; i++) |
{ |
if (fire[i][0]!=-1 || fire[i][1]!=-1) |
{ |
if (i==1) |
{ |
ppx(fire[i][0]-1, fire[i][1], BG_COLOR); |
ppx(fire[i][0]+1, fire[i][1], BG_COLOR); |
} |
else |
{ |
ppx(fire[i][0], fire[i][1], BG_COLOR); |
} |
} |
} |
} |
void DrawAngle(int mx, int my, int color) |
{ |
// Delete old rectangle |
Draw(BG_COLOR); |
|
// Draw new rectangle |
for (int j=0; j<4; j++) |
{ |
coord[j][1] += B_SPEED; |
} |
draw4(coord[0][0], coord[0][1], coord[1][0], coord[1][1], coord[2][0], coord[2][1], coord[3][0], coord[3][1], color); |
ppx(cx-1, coord[2][1]+1, color); |
ppx(cx, coord[2][1]+1, color); |
ppx(cx+1, coord[2][1]+1, color); |
for (int i=3; i>0; i--) |
{ |
fire[i][0] = fire[i-1][0]; |
fire[i][1] = fire[i-1][1]; |
} |
fire[0][0] = cx; |
fire[0][1] = cy; |
for (int i=1; i<4; i++) |
{ |
if (fire[i][0]!=-1 || fire[i][1]!=-1) |
{ |
if (i==1) |
{ |
ppx(fire[i][0]-1, fire[i][1], SMOKE_COLOR); |
ppx(fire[i][0]+1, fire[i][1], SMOKE_COLOR); |
} |
else |
{ |
ppx(fire[i][0], fire[i][1], SMOKE_COLOR); |
} |
} |
} |
} |
void Disable(int color) |
{ |
for (int i=0; i<4; i++) |
{ |
ppx(fire[i][0], fire[i][1], color); |
fire[i][0] = 0; |
fire[i][1] = 0; |
} |
Draw(color); |
cx = -1; |
cy = -1; |
} |
}; |
|
class cGun: public cRocket |
{ |
public: |
void Enable(int x, int y, int width, int height, int cx, int cy) |
{ |
old_mx = -1; |
old_my = -1; |
coord[0][0] = x; |
coord[0][1] = y; |
coord[1][0] = x+width; |
coord[1][1] = y; |
coord[2][0] = x+width; |
coord[2][1] = y+height; |
coord[3][0] = x; |
coord[3][1] = y+height; |
cRocket::cx = cx; |
cRocket::cy = cy; |
for (int j=0; j<4; j++) |
{ |
dist[j] = sqrt((double)((coord[j][0]-cx)*(coord[j][0]-cx)+(coord[j][1]-cy)*(coord[j][1]-cy))); |
fi[j] = acos((coord[j][0]-cx)/dist[j]); |
if (coord[j][1]<cy) fi[j]*=-1; |
} |
} |
void DrawAngle(int mx, int my, int color) |
{ |
if (old_mx!=mx || old_my!=my) |
{ |
// Delete old rectangle |
old_mx = mx; |
old_my = my; |
Draw(BG_COLOR); |
|
// Draw new rectangle |
double a; |
long int dx = (long int)(cx-mx)*(cx-mx); |
long int dy = (long int)(cy-my)*(cy-my); |
if (my<=cy && (cx!=mx || cy!=my)) |
{ |
a = -M_PI/2+acos((cx-mx)/sqrt((double)(dx+dy))); |
for (int j=0; j<4; j++) |
{ |
coord[j][0] = round_int((double)(cx+dist[j]*cos(a+fi[j]))); |
coord[j][1] = round_int((double)(cy+dist[j]*sin(a+fi[j]))); |
} |
} |
draw4(coord[0][0], coord[0][1], coord[1][0], coord[1][1], coord[2][0], coord[2][1], coord[3][0], coord[3][1], color); |
draw4(cx-14, cy+2, cx+14, cy+2, cx+14, cy+18, cx-14, cy+18, color); |
} |
} |
protected: |
int old_mx, old_my; |
}; |
|
class cCross |
{ |
public: |
cCross() |
{ |
x = -1; |
y = -1; |
} |
void Enable(int x, int y) |
{ |
cCross::x = x; |
cCross::y = y; |
size = 2; |
} |
int IsEnabled(void) |
{ |
if (x == -1 && y == -1) |
{ |
return 0; |
} |
else |
{ |
return 1; |
} |
} |
void Draw(int color) |
{ |
pline(x-size, y, x+size, y, color); |
pline(x, y-size, x, y+size, color); |
ppx(x, y, BG_COLOR); |
} |
void Disable(int color) |
{ |
pline(x-size, y, x+size, y, color); |
pline(x, y-size, x, y+size, color); |
x = -1; |
y = -1; |
} |
int x, y; |
protected: |
int size; |
}; |
|
|
void ppx(int x, int y, int color) |
{ |
if (x >= 0 && x < WINDOW_WIDTH && y >= 0 && y < WINDOW_HEIGHT) kos_PutPixel(x, y, color); |
} |
|
void pline(int x1, int y1, int x2, int y2, int color) |
{ |
kos_DrawLine(x1, y1, x2, y2, color); |
} |
|
|
void draw4(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int color) |
{ |
pline(x1, y1, x2, y2, color); |
pline(x2, y2, x3, y3, color); |
pline(x3, y3, x4, y4, color); |
pline(x4, y4, x1, y1, color); |
} |