ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

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?

UserRevisionLine numberNew 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