Initial publish
Dependencies: mbed
Fork of el17dg by
collision_lib/collision_lib.h@36:207ec7db8648, 2019-05-02 (annotated)
- Committer:
- Noximilien
- Date:
- Thu May 02 13:35:22 2019 +0000
- Revision:
- 36:207ec7db8648
- Parent:
- 35:172db1608332
Have added boss explosion animation. have added debug sections. Have cleaned a code a bit. positioned some functions from public to private.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Noximilien | 33:c623c6d5ed16 | 1 | #ifndef COLLISION_LIB_H |
Noximilien | 33:c623c6d5ed16 | 2 | #define COLLISION_LIB_H |
Noximilien | 33:c623c6d5ed16 | 3 | |
Noximilien | 33:c623c6d5ed16 | 4 | #include <math.h> |
Noximilien | 33:c623c6d5ed16 | 5 | |
Noximilien | 33:c623c6d5ed16 | 6 | /** |
Noximilien | 33:c623c6d5ed16 | 7 | * @struct Point |
Noximilien | 33:c623c6d5ed16 | 8 | * @brief Position or vector on the screen. Supports basic vector arithmetics. |
Noximilien | 33:c623c6d5ed16 | 9 | */ |
Noximilien | 33:c623c6d5ed16 | 10 | struct Point { |
Noximilien | 33:c623c6d5ed16 | 11 | /*@{*/ |
Noximilien | 33:c623c6d5ed16 | 12 | int x; /**< the x position */ |
Noximilien | 33:c623c6d5ed16 | 13 | int y; /**< the y position */ |
Noximilien | 33:c623c6d5ed16 | 14 | /** Default constructor */ |
Noximilien | 33:c623c6d5ed16 | 15 | Point() : x(0), y(0) {} |
Noximilien | 33:c623c6d5ed16 | 16 | /** Constructor with x and y parameters */ |
Noximilien | 33:c623c6d5ed16 | 17 | Point(int _x, int _y) : x(_x), y(_y) {} |
Noximilien | 33:c623c6d5ed16 | 18 | |
Noximilien | 33:c623c6d5ed16 | 19 | /** |
Noximilien | 33:c623c6d5ed16 | 20 | * @brief Vector addition. |
Noximilien | 33:c623c6d5ed16 | 21 | */ |
Noximilien | 33:c623c6d5ed16 | 22 | Point operator+ (const Point& rhs) const { |
Noximilien | 33:c623c6d5ed16 | 23 | Point result(x + rhs.x, y + rhs.y); |
Noximilien | 33:c623c6d5ed16 | 24 | return result; |
Noximilien | 33:c623c6d5ed16 | 25 | } |
Noximilien | 33:c623c6d5ed16 | 26 | |
Noximilien | 33:c623c6d5ed16 | 27 | /** |
Noximilien | 33:c623c6d5ed16 | 28 | * @brief Vector substraction. |
Noximilien | 33:c623c6d5ed16 | 29 | */ |
Noximilien | 33:c623c6d5ed16 | 30 | Point operator- (const Point& rhs) const { |
Noximilien | 33:c623c6d5ed16 | 31 | Point result(x - rhs.x, y - rhs.y); |
Noximilien | 33:c623c6d5ed16 | 32 | return result; |
Noximilien | 33:c623c6d5ed16 | 33 | } |
Noximilien | 33:c623c6d5ed16 | 34 | |
Noximilien | 33:c623c6d5ed16 | 35 | /** |
Noximilien | 33:c623c6d5ed16 | 36 | * @brief Length of vector squared. |
Noximilien | 33:c623c6d5ed16 | 37 | */ |
Noximilien | 33:c623c6d5ed16 | 38 | int lengthSquared() { |
Noximilien | 33:c623c6d5ed16 | 39 | return x * x + y * y; |
Noximilien | 33:c623c6d5ed16 | 40 | } |
Noximilien | 33:c623c6d5ed16 | 41 | }; |
Noximilien | 33:c623c6d5ed16 | 42 | |
Noximilien | 33:c623c6d5ed16 | 43 | /** |
Noximilien | 33:c623c6d5ed16 | 44 | * CicleBounds Class |
Noximilien | 33:c623c6d5ed16 | 45 | * @brief Class to define object's bounds as a circle with center(e.g. offset). |
Noximilien | 33:c623c6d5ed16 | 46 | * @author Dmitrijs Griskovs |
Noximilien | 33:c623c6d5ed16 | 47 | * @date 15/04/2019 |
Noximilien | 33:c623c6d5ed16 | 48 | */ |
Noximilien | 33:c623c6d5ed16 | 49 | class CircleBounds { |
Noximilien | 33:c623c6d5ed16 | 50 | public: |
Noximilien | 33:c623c6d5ed16 | 51 | /** Default constructor */ |
Noximilien | 33:c623c6d5ed16 | 52 | CircleBounds() {}; |
Noximilien | 33:c623c6d5ed16 | 53 | /** Constructor with center and radius parameters */ |
Noximilien | 33:c623c6d5ed16 | 54 | CircleBounds(Point _center, float _radius): center(_center), radius(_radius) {}; |
Noximilien | 33:c623c6d5ed16 | 55 | Point center; |
Noximilien | 33:c623c6d5ed16 | 56 | float radius; |
Noximilien | 33:c623c6d5ed16 | 57 | |
Noximilien | 33:c623c6d5ed16 | 58 | /** |
Noximilien | 33:c623c6d5ed16 | 59 | * @brief Determines whether the two circles collide. |
Noximilien | 33:c623c6d5ed16 | 60 | * @details the function takes in position and circle bounds (center and radius) |
Noximilien | 36:207ec7db8648 | 61 | * of two objects and returns wether they collided. |
Noximilien | 33:c623c6d5ed16 | 62 | * |
Noximilien | 33:c623c6d5ed16 | 63 | * @param pos_a positon of x and y of the first object. (const Point&). |
Noximilien | 33:c623c6d5ed16 | 64 | * @param bounds_a center point and radius of the first object. (const CircleBounds&). |
Noximilien | 33:c623c6d5ed16 | 65 | * @param pos_b positon of x and y of the second object. (const Point&). |
Noximilien | 33:c623c6d5ed16 | 66 | * @param bounds_b center point and radius of the second object. (const CircleBounds&). |
Noximilien | 33:c623c6d5ed16 | 67 | * @return true if the two circles overlap. |
Noximilien | 33:c623c6d5ed16 | 68 | */ |
Noximilien | 33:c623c6d5ed16 | 69 | inline bool circleCollideTwoObjects( |
Noximilien | 33:c623c6d5ed16 | 70 | const Point& pos_a, const CircleBounds& bounds_a, |
Noximilien | 33:c623c6d5ed16 | 71 | const Point& pos_b, const CircleBounds& bounds_b |
Noximilien | 33:c623c6d5ed16 | 72 | ) { |
Noximilien | 33:c623c6d5ed16 | 73 | Point center_a = pos_a + bounds_a.center; |
Noximilien | 33:c623c6d5ed16 | 74 | Point center_b = pos_b + bounds_b.center; |
Noximilien | 33:c623c6d5ed16 | 75 | Point difference = center_a - center_b; |
Noximilien | 33:c623c6d5ed16 | 76 | return difference.lengthSquared() <= pow(bounds_a.radius + bounds_b.radius, 2); |
Noximilien | 33:c623c6d5ed16 | 77 | } |
Noximilien | 33:c623c6d5ed16 | 78 | }; |
Noximilien | 33:c623c6d5ed16 | 79 | |
Noximilien | 33:c623c6d5ed16 | 80 | #endif |