After decimating the enemy forces that have attacked your ship, you are charged with taking out as many of the remaining enemy fighters as possible. 3d space fighter game was initially written while I was testing some 3d routines I was implementing for a flight simulator, but my daughter started playing it and seemed to enjoy it so I added a few sound effects, explosions etc. and so this little game was born.

Dependencies:   mbed

Committer:
taylorza
Date:
Sun Feb 08 01:38:18 2015 +0000
Revision:
4:b857db213f10
Parent:
0:01829868570e
Removed duty lookup table

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:01829868570e 1 #ifndef __CANVAS_H__
taylorza 0:01829868570e 2 #define __CANVAS_H__
taylorza 0:01829868570e 3
taylorza 0:01829868570e 4 template <typename T>
taylorza 0:01829868570e 5 class Canvas
taylorza 0:01829868570e 6 {
taylorza 0:01829868570e 7 public:
taylorza 0:01829868570e 8 Canvas(T *pSurface)
taylorza 0:01829868570e 9 {
taylorza 0:01829868570e 10 _pSurface = pSurface;
taylorza 0:01829868570e 11 }
taylorza 0:01829868570e 12
taylorza 0:01829868570e 13 inline void clear()
taylorza 0:01829868570e 14 {
taylorza 0:01829868570e 15 _pSurface->clear();
taylorza 0:01829868570e 16 }
taylorza 0:01829868570e 17
taylorza 0:01829868570e 18 inline void setPixel(int x, int y, uint16_t color)
taylorza 0:01829868570e 19 {
taylorza 0:01829868570e 20 _pSurface->setPixel(x, y, color);
taylorza 0:01829868570e 21 }
taylorza 0:01829868570e 22
taylorza 0:01829868570e 23 static inline void swap(int &a, int &b)
taylorza 0:01829868570e 24 {
taylorza 0:01829868570e 25 int t = a;
taylorza 0:01829868570e 26 a = b;
taylorza 0:01829868570e 27 b = t;
taylorza 0:01829868570e 28 }
taylorza 0:01829868570e 29
taylorza 0:01829868570e 30 void drawLine(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:01829868570e 31 {
taylorza 0:01829868570e 32 int dx = abs(x2 - x1);
taylorza 0:01829868570e 33 int dy = abs(y2 - y1);
taylorza 0:01829868570e 34
taylorza 0:01829868570e 35 if (dx == 0)
taylorza 0:01829868570e 36 {
taylorza 0:01829868570e 37 if (y1 > y2) swap(y1, y2);
taylorza 0:01829868570e 38 drawVertLine(x1, y1, y2, color);
taylorza 0:01829868570e 39 return;
taylorza 0:01829868570e 40 }
taylorza 0:01829868570e 41 else if(dy == 0)
taylorza 0:01829868570e 42 {
taylorza 0:01829868570e 43 if (x1 > x2) swap(x1, x2);
taylorza 0:01829868570e 44 drawHorizLine(x1, y1, x2, color);
taylorza 0:01829868570e 45 return;
taylorza 0:01829868570e 46 }
taylorza 0:01829868570e 47
taylorza 0:01829868570e 48 int sx = (x1 < x2) ? 1 : -1;
taylorza 0:01829868570e 49 int sy = (y1 < y2) ? 1 : -1;
taylorza 0:01829868570e 50 int err = dx - dy;
taylorza 0:01829868570e 51 while(x1 != x2 || y1 != y2)
taylorza 0:01829868570e 52 {
taylorza 0:01829868570e 53 setPixel(x1, y1, color);
taylorza 0:01829868570e 54 int e2 = err << 1;
taylorza 0:01829868570e 55 if (e2 > -dy)
taylorza 0:01829868570e 56 {
taylorza 0:01829868570e 57 err -= dy;
taylorza 0:01829868570e 58 x1 += sx;
taylorza 0:01829868570e 59 }
taylorza 0:01829868570e 60 if (e2 < dx)
taylorza 0:01829868570e 61 {
taylorza 0:01829868570e 62 err += dx;
taylorza 0:01829868570e 63 y1 += sy;
taylorza 0:01829868570e 64 }
taylorza 0:01829868570e 65 }
taylorza 0:01829868570e 66 setPixel(x2, y2, color);
taylorza 0:01829868570e 67 }
taylorza 0:01829868570e 68
taylorza 0:01829868570e 69 void drawRect(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:01829868570e 70 {
taylorza 0:01829868570e 71 if (x1 > x2) swap(x1, x2);
taylorza 0:01829868570e 72 if (y1 > y2) swap(y1, y2);
taylorza 0:01829868570e 73
taylorza 0:01829868570e 74 drawHorizLine(x1, y1, x2, color);
taylorza 0:01829868570e 75 drawHorizLine(x1, y2, x2, color);
taylorza 0:01829868570e 76 drawVertLine(x1, y1, y2, color);
taylorza 0:01829868570e 77 drawVertLine(x2, y1, y2, color);
taylorza 0:01829868570e 78 }
taylorza 0:01829868570e 79
taylorza 0:01829868570e 80 private:
taylorza 0:01829868570e 81 void drawHorizLine(int x1, int y1, int x2, uint16_t color)
taylorza 0:01829868570e 82 {
taylorza 0:01829868570e 83 for(int x = x1; x < x2; ++x) setPixel(x, y1, color);
taylorza 0:01829868570e 84 }
taylorza 0:01829868570e 85
taylorza 0:01829868570e 86 void drawVertLine(int x1, int y1, int y2, uint16_t color)
taylorza 0:01829868570e 87 {
taylorza 0:01829868570e 88 for(int y = y1; y < y2; ++y) setPixel(x1, y, color);
taylorza 0:01829868570e 89 }
taylorza 0:01829868570e 90
taylorza 0:01829868570e 91 private:
taylorza 0:01829868570e 92 T *_pSurface;
taylorza 0:01829868570e 93 };
taylorza 0:01829868570e 94
taylorza 0:01829868570e 95 #endif // __CANVAS_H__