1 #ifndef INC_COLLISION_H 2 #define INC_COLLISION_H 3 4 #include "coords.h" 5 6 // pointHitsCircle: given a point starting at (x,y) moving with velocity 7 // (vx,vy), determines when the point first is in the circle at the origin 8 // with radius rad. Returns -1 for "never". If et is non-negative, also 9 // returns -1 for "after et". 10 float pointHitsCircle(float x, float y, float vx, float vy, float rad, float et=-1); 11 12 // pointHitsPolygon: as for pointHitsCircleWithin. 'points' must march 13 // anticlockwise around the polygon. 14 float pointHitsPolygon(CartCoord* points, int n, CartCoord p, RelCartCoord v, float et=-1); 15 16 struct CollisionCircle; 17 struct CollisionPolygon; 18 19 // CollisionObject: Virtual representing an object moving with constant velocity. 20 struct CollisionObject 21 { 22 CartCoord startPos; 23 RelCartCoord velocity; 24 virtual float pointHits(CartCoord p, RelCartCoord v, float et=-1) const 25 =0; 26 float pointHits(float x, float y, float vx, float vy, float et) const; 27 bool pointIn(float x, float y) const; 28 bool pointIn(CartCoord p) const; 29 30 virtual bool circleIntersects(CartCoord c, float rad) const =0; 31 32 bool objectCollides(const CollisionCircle& other) const; 33 bool objectCollides(const CollisionPolygon& other) const; 34 CollisionObjectCollisionObject35 CollisionObject(CartCoord startPos, RelCartCoord velocity) 36 : startPos(startPos), velocity(velocity) {}; CollisionObjectCollisionObject37 CollisionObject() {} ~CollisionObjectCollisionObject38 virtual ~CollisionObject() {} 39 }; 40 41 struct CollisionCircle : public CollisionObject 42 { 43 float radius; 44 45 CollisionCircle(CartCoord istartPos, RelCartCoord ivelocity, float iradius=1) CollisionObjectCollisionCircle46 : CollisionObject(startPos, velocity), radius(iradius) 47 {} 48 49 bool circleIntersects(CartCoord c, float rad) const; 50 51 float pointHits(CartCoord p, RelCartCoord v, float et=-1) const; 52 }; 53 54 struct CollisionPolygon : public CollisionObject 55 { 56 int numPoints; 57 RelCartCoord* points; 58 float angle; 59 60 CollisionPolygon(int inumPoints, RelCartCoord* ipoints, float iangle=0) : numPointsCollisionPolygon61 numPoints(inumPoints), points(ipoints), angle(iangle) {} 62 63 bool circleIntersects(CartCoord c, float rad) const; 64 65 float pointHits(CartCoord p, RelCartCoord v, float et=-1) const; 66 }; 67 #endif /* INC_COLLISION_H */ 68