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

Revision:
1:9ff7384171ec
Parent:
0:01829868570e
--- a/Fix16/Fix16.h	Sat Jan 03 18:48:11 2015 +0000
+++ b/Fix16/Fix16.h	Sun Jan 04 03:05:13 2015 +0000
@@ -1,11 +1,11 @@
 #ifndef __FIX16_H__
 #define __FIX16_H__
-
 #define FIX_SHIFT   16
 
 typedef int32_t fix16_t;
 
 static const fix16_t fix16_one = 1 << FIX_SHIFT;
+static const fix16_t fix16_100  = 100 << FIX_SHIFT;
 static const fix16_t fix16_half = 0x00008000;
 
 static inline fix16_t fix16_add(fix16_t x, fix16_t y) { return x + y; }
@@ -13,12 +13,7 @@
 static inline fix16_t fix16_mul(fix16_t x, fix16_t y) { return (fix16_t)(((int64_t)x * y) >> FIX_SHIFT); }
 static inline fix16_t fix16_div(fix16_t x, fix16_t y) { return (fix16_t)(((int64_t)x << FIX_SHIFT) / y); }
 
-static inline fix16_t fix16_muldiv(fix16_t x, fix16_t y, fix16_t z)
-{
-    // divide
-    int64_t resultDiv = ((int64_t)y << FIX_SHIFT) / z;
-    return fix16_t((resultDiv * x) >> FIX_SHIFT);
-}
+inline fix16_t fix16_abs(fix16_t value) { return value > 0 ? value : -value; }
 
 static inline fix16_t fix16_from(int x) { return x << FIX_SHIFT; }
 static inline fix16_t fix16_from(float x) { return (fix16_t)(fix16_one * x); }
@@ -26,175 +21,7 @@
 static inline int fix16_to_int(fix16_t x) { return x >> FIX_SHIFT; }
 static inline float fix16_to_float(fix16_t x) { return (float)x / fix16_one; }
 
-class Fix16
-{   
-    public:
-        Fix16() : _value(0) {}
-        Fix16(int32_t value) : _value(fix16_from(value)) {}
-        Fix16(float value) : _value(fix16_from(value)) {}
-        
-        static inline Fix16 createDirect(int32_t value) { Fix16 r; r._value = value; return r; }
-        
-        inline Fix16 operator - () const { Fix16 r; r._value = -_value; return r; }
-        
-        inline operator int() const { return fix16_to_int(_value); }                
-        inline operator float() const { return fix16_to_float(_value); }
-        
-        static const Fix16 Zero;
-        static const Fix16 One;
-        static const Fix16 PI;
-        
-    protected:
-        fix16_t _value;    
-    
-    friend Fix16& operator += (Fix16 &lhs, const Fix16 &rhs);
-    friend Fix16& operator -= (Fix16 &lhs, const Fix16 &rhs);
-    friend Fix16& operator *= (Fix16 &lhs, const Fix16 &rhs);
-    friend Fix16& operator /= (Fix16 &lhs, const Fix16 &rhs);
-    
-    friend Fix16 operator + (const Fix16 &lhs, const Fix16 &rhs);
-    friend Fix16 operator - (const Fix16 &lhs, const Fix16 &rhs);
-    friend Fix16 operator * (const Fix16 &lhs, const Fix16 &rhs);
-    friend Fix16 operator / (const Fix16 &lhs, const Fix16 &rhs);
-    
-    friend Fix16 operator + (const int32_t lhs, const Fix16 &rhs);
-    friend Fix16 operator - (const int32_t lhs, const Fix16 &rhs);
-    friend Fix16 operator * (const int32_t lhs, const Fix16 &rhs);
-    friend Fix16 operator / (const int32_t lhs, const Fix16 &rhs);
-    
-    friend Fix16 operator + (const Fix16 &lhs, const int32_t rhs);
-    friend Fix16 operator - (const Fix16 &lhs, const int32_t rhs);
-    friend Fix16 operator * (const Fix16 &lhs, const int32_t rhs);
-    friend Fix16 operator / (const Fix16 &lhs, const int32_t rhs);
-    
-    friend Fix16 operator + (const float lhs, const Fix16 &rhs);
-    friend Fix16 operator - (const float lhs, const Fix16 &rhs);
-    friend Fix16 operator * (const float lhs, const Fix16 &rhs);
-    friend Fix16 operator / (const float lhs, const Fix16 &rhs);
-    
-    friend Fix16 operator + (const Fix16 &lhs, const float rhs);
-    friend Fix16 operator - (const Fix16 &lhs, const float rhs);
-    friend Fix16 operator * (const Fix16 &lhs, const float rhs);
-    friend Fix16 operator / (const Fix16 &lhs, const float rhs);
-    
-    friend bool operator == (const Fix16 &lhs, const Fix16 &rhs);
-    friend bool operator != (const Fix16 &lhs, const Fix16 &rhs);
 
-    friend bool operator == (const Fix16 &lhs, const int32_t rhs);
-    friend bool operator != (const Fix16 &lhs, const int32_t rhs);
-
-    friend bool operator == (const int32_t lhs, const Fix16 &rhs);
-    friend bool operator != (const int32_t lhs, const Fix16 &rhs);
-
-    friend bool operator == (const Fix16 &lhs, const float rhs);
-    friend bool operator != (const Fix16 &lhs, const float rhs);
-
-    friend bool operator == (const float lhs, const Fix16 &rhs);
-    friend bool operator != (const float lhs, const Fix16 &rhs);
-    
-    friend bool operator < (const Fix16 &lhs, const Fix16 &rhs);
-    friend bool operator > (const Fix16 &lhs, const Fix16 &rhs);
-    friend bool operator <= (const Fix16 &lhs, const Fix16 &rhs);
-    friend bool operator >= (const Fix16 &lhs, const Fix16 &rhs);    
-
-    friend bool operator < (const Fix16 &lhs, const int32_t rhs);
-    friend bool operator > (const Fix16 &lhs, const int32_t rhs);
-    friend bool operator <= (const Fix16 &lhs, const int32_t rhs);
-    friend bool operator >= (const Fix16 &lhs, const int32_t rhs);    
-
-    friend bool operator < (const int32_t lhs, const Fix16 &rhs);
-    friend bool operator > (const int32_t lhs, const Fix16 &rhs);
-    friend bool operator <= (const int32_t lhs, const Fix16 &rhs);
-    friend bool operator >= (const int32_t lhs, const Fix16 &rhs);    
-
-    friend bool operator < (const Fix16 &lhs, const float rhs);
-    friend bool operator > (const Fix16 &lhs, const float rhs);
-    friend bool operator <= (const Fix16 &lhs, const float rhs);
-    friend bool operator >= (const Fix16 &lhs, const float rhs);    
-
-    friend bool operator < (const float lhs, const Fix16 &rhs);
-    friend bool operator > (const float lhs, const Fix16 &rhs);
-    friend bool operator <= (const float lhs, const Fix16 &rhs);
-    friend bool operator >= (const float lhs, const Fix16 &rhs);    
-    
-    friend Fix16 abs(Fix16);    
-};
-
-// += -= *= /=
-inline static Fix16& operator += (Fix16 &lhs, const Fix16 &rhs) { lhs._value = fix16_add(lhs._value, rhs._value); return lhs; }
-inline static Fix16& operator -= (Fix16 &lhs, const Fix16 &rhs) { lhs._value = fix16_sub(lhs._value, rhs._value); return lhs; }
-inline static Fix16& operator *= (Fix16 &lhs, const Fix16 &rhs) { lhs._value = fix16_mul(lhs._value, rhs._value); return lhs; }
-inline static Fix16& operator /= (Fix16 &lhs, const Fix16 &rhs) { lhs._value = fix16_div(lhs._value, rhs._value); return lhs; }
-
-// + - * /
-inline static Fix16 operator + (const Fix16 &lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_add(lhs._value, rhs._value); return r; }
-inline static Fix16 operator - (const Fix16 &lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_sub(lhs._value, rhs._value); return r; }
-inline static Fix16 operator * (const Fix16 &lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_mul(lhs._value, rhs._value); return r; }
-inline static Fix16 operator / (const Fix16 &lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_div(lhs._value, rhs._value); return r; }
-
-inline static Fix16 operator + (const int32_t lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_add(fix16_from(lhs), rhs._value); return r; }
-inline static Fix16 operator - (const int32_t lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_sub(fix16_from(lhs), rhs._value); return r; }
-inline static Fix16 operator * (const int32_t lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_mul(fix16_from(lhs), rhs._value); return r; }
-inline static Fix16 operator / (const int32_t lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_div(fix16_from(lhs), rhs._value); return r; }
-
-inline static Fix16 operator + (const Fix16 &lhs, const int32_t rhs) { Fix16 r; r._value = fix16_add(lhs._value, fix16_from(rhs)); return r; }
-inline static Fix16 operator - (const Fix16 &lhs, const int32_t rhs) { Fix16 r; r._value = fix16_sub(lhs._value, fix16_from(rhs)); return r; }
-inline static Fix16 operator * (const Fix16 &lhs, const int32_t rhs) { Fix16 r; r._value = fix16_mul(lhs._value, fix16_from(rhs)); return r; }
-inline static Fix16 operator / (const Fix16 &lhs, const int32_t rhs) { Fix16 r; r._value = fix16_div(lhs._value, fix16_from(rhs)); return r; }
-
-inline static Fix16 operator + (const float lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_add(fix16_from(lhs), rhs._value); return r; }
-inline static Fix16 operator - (const float lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_sub(fix16_from(lhs), rhs._value); return r; }
-inline static Fix16 operator * (const float lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_mul(fix16_from(lhs), rhs._value); return r; }
-inline static Fix16 operator / (const float lhs, const Fix16 &rhs) { Fix16 r; r._value = fix16_div(fix16_from(lhs), rhs._value); return r; }
-
-inline static Fix16 operator + (const Fix16 &lhs, const float rhs) { Fix16 r; r._value = fix16_add(lhs._value, fix16_from(rhs)); return r; }
-inline static Fix16 operator - (const Fix16 &lhs, const float rhs) { Fix16 r; r._value = fix16_sub(lhs._value, fix16_from(rhs)); return r; }
-inline static Fix16 operator * (const Fix16 &lhs, const float rhs) { Fix16 r; r._value = fix16_mul(lhs._value, fix16_from(rhs)); return r; }
-inline static Fix16 operator / (const Fix16 &lhs, const float rhs) { Fix16 r; r._value = fix16_div(lhs._value, fix16_from(rhs)); return r; }
-
-// == !=
-inline static bool operator == (const Fix16 &lhs, const Fix16 &rhs) { return lhs._value == rhs._value; }
-inline static bool operator != (const Fix16 &lhs, const Fix16 &rhs) { return lhs._value != rhs._value; }               
-
-inline static bool operator == (const Fix16 &lhs, const int32_t rhs) { return lhs._value == fix16_from(rhs); }
-inline static bool operator != (const Fix16 &lhs, const int32_t rhs) { return lhs._value != fix16_from(rhs); }
-
-inline static bool operator == (const int32_t lhs, const Fix16 &rhs) { return fix16_from(lhs) == rhs._value; }
-inline static bool operator != (const int32_t lhs, const Fix16 &rhs) { return fix16_from(lhs) != rhs._value; }
-
-inline static bool operator == (const Fix16 &lhs, const float rhs) { return lhs._value == fix16_from(rhs); }
-inline static bool operator != (const Fix16 &lhs, const float rhs) { return lhs._value != fix16_from(rhs); }
-                                                                   
-inline static bool operator == (const float lhs, const Fix16 &rhs) { return fix16_from(lhs) == rhs._value; }
-inline static bool operator != (const float lhs, const Fix16 &rhs) { return fix16_from(lhs) != rhs._value; }
-
-// < > <= >=
-inline static bool operator < (const Fix16 &lhs, const Fix16 &rhs) { return lhs._value < rhs._value; }
-inline static bool operator > (const Fix16 &lhs, const Fix16 &rhs) { return lhs._value > rhs._value; }
-inline static bool operator <= (const Fix16 &lhs, const Fix16 &rhs) { return lhs._value <= rhs._value; }
-inline static bool operator >= (const Fix16 &lhs, const Fix16 &rhs) { return lhs._value >= rhs._value; }
-
-inline static bool operator < (const Fix16 &lhs, const int32_t rhs) { return lhs._value < fix16_from(rhs); }
-inline static bool operator > (const Fix16 &lhs, const int32_t rhs) { return lhs._value > fix16_from(rhs); }
-inline static bool operator <= (const Fix16 &lhs, const int32_t rhs) { return lhs._value <= fix16_from(rhs); }
-inline static bool operator >= (const Fix16 &lhs, const int32_t rhs) { return lhs._value >= fix16_from(rhs); }
-
-inline static bool operator < (const int32_t lhs, const Fix16 &rhs) { return fix16_from(lhs) < rhs._value; }
-inline static bool operator > (const int32_t lhs, const Fix16 &rhs) { return fix16_from(lhs) > rhs._value; }
-inline static bool operator <= (const int32_t lhs, const Fix16 &rhs) { return fix16_from(lhs) <= rhs._value; }
-inline static bool operator >= (const int32_t lhs, const Fix16 &rhs) { return fix16_from(lhs) >= rhs._value; }
-
-inline static bool operator < (const Fix16 &lhs, const float rhs) { return lhs._value < fix16_from(rhs); }
-inline static bool operator > (const Fix16 &lhs, const float rhs) { return lhs._value > fix16_from(rhs); }
-inline static bool operator <= (const Fix16 &lhs, const float rhs) { return lhs._value <= fix16_from(rhs); }
-inline static bool operator >= (const Fix16 &lhs, const float rhs) { return lhs._value >= fix16_from(rhs); }
-
-inline static bool operator < (const float lhs, const Fix16 &rhs) { return fix16_from(lhs) < rhs._value; }
-inline static bool operator > (const float lhs, const Fix16 &rhs) { return fix16_from(lhs) > rhs._value; }
-inline static bool operator <= (const float lhs, const Fix16 &rhs) { return fix16_from(lhs) <= rhs._value; }
-inline static bool operator >= (const float lhs, const Fix16 &rhs) { return fix16_from(lhs) >= rhs._value; }
-
-inline Fix16 abs(const Fix16 &value) { return value > Fix16::Zero ? value : -value; }
 
 
 #endif //__FIX16_H__
\ No newline at end of file