Initial publish

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

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?

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 * @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