Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of el17dg by
collision_lib/collision_lib.h@33:c623c6d5ed16, 2019-04-29 (annotated)
- Committer:
- Noximilien
- Date:
- Mon Apr 29 08:10:52 2019 +0000
- Revision:
- 33:c623c6d5ed16
- Child:
- 35:172db1608332
Have started working on boss mode. Changed the structure of game.cpp to finite state machine. Moved Game Over to a separate class. slightlight changed the player class. changed geometry into collision library. Cleaned the code to be under 20 lines.
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 | /** |
| Noximilien | 33:c623c6d5ed16 | 60 | * @brief Determines whether the two circles collide. |
| Noximilien | 33:c623c6d5ed16 | 61 | * @details the function takes in position and circle bounds (center and radius) |
| Noximilien | 33:c623c6d5ed16 | 62 | * of two objects and returns wether they collide. |
| Noximilien | 33:c623c6d5ed16 | 63 | * |
| Noximilien | 33:c623c6d5ed16 | 64 | * @param pos_a positon of x and y of the first object. (const Point&). |
| Noximilien | 33:c623c6d5ed16 | 65 | * @param bounds_a center point and radius of the first object. (const CircleBounds&). |
| Noximilien | 33:c623c6d5ed16 | 66 | * @param pos_b positon of x and y of the second object. (const Point&). |
| Noximilien | 33:c623c6d5ed16 | 67 | * @param bounds_b center point and radius of the second object. (const CircleBounds&). |
| Noximilien | 33:c623c6d5ed16 | 68 | * @return true if the two circles overlap. |
| Noximilien | 33:c623c6d5ed16 | 69 | */ |
| Noximilien | 33:c623c6d5ed16 | 70 | inline bool circleCollideTwoObjects( |
| Noximilien | 33:c623c6d5ed16 | 71 | const Point& pos_a, const CircleBounds& bounds_a, |
| Noximilien | 33:c623c6d5ed16 | 72 | const Point& pos_b, const CircleBounds& bounds_b |
| Noximilien | 33:c623c6d5ed16 | 73 | ) { |
| Noximilien | 33:c623c6d5ed16 | 74 | Point center_a = pos_a + bounds_a.center; |
| Noximilien | 33:c623c6d5ed16 | 75 | Point center_b = pos_b + bounds_b.center; |
| Noximilien | 33:c623c6d5ed16 | 76 | Point difference = center_a - center_b; |
| Noximilien | 33:c623c6d5ed16 | 77 | return difference.lengthSquared() <= pow(bounds_a.radius + bounds_b.radius, 2); |
| Noximilien | 33:c623c6d5ed16 | 78 | } |
| Noximilien | 33:c623c6d5ed16 | 79 | }; |
| Noximilien | 33:c623c6d5ed16 | 80 | |
| Noximilien | 33:c623c6d5ed16 | 81 | #endif |
