ELEC2645 (2018/19) / Mbed 2 deprecated el17aj

Dependencies:   mbed

Committer:
adat80
Date:
Wed May 08 23:21:32 2019 +0000
Revision:
6:f06ce4cf068a
Parent:
5:8bd09c675f28
finished

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adat80 1:3916f272663e 1 #ifndef ENEMY_H
adat80 1:3916f272663e 2 #define ENEMY_H
adat80 1:3916f272663e 3
adat80 1:3916f272663e 4 #include "mbed.h"
adat80 1:3916f272663e 5 #include "N5110.h"
adat80 1:3916f272663e 6 #include "Gamepad.h"
adat80 1:3916f272663e 7 #include <time.h>
adat80 1:3916f272663e 8
adat80 1:3916f272663e 9
adat80 1:3916f272663e 10 /** CrossHairs Class
adat80 1:3916f272663e 11 @author Adam Jones, University of Leeds
adat80 1:3916f272663e 12 @brief Controls the Enemy Sprites in the Wall Defence game
adat80 6:f06ce4cf068a 13 @date April 2019
adat80 5:8bd09c675f28 14 @brief Revision 1.0
adat80 5:8bd09c675f28 15
adat80 5:8bd09c675f28 16 @code
adat80 5:8bd09c675f28 17 #include "Enemy.h"
adat80 5:8bd09c675f28 18 #include "N5110.h"
adat80 5:8bd09c675f28 19
adat80 5:8bd09c675f28 20
adat80 5:8bd09c675f28 21 int main()
adat80 5:8bd09c675f28 22 {
adat80 5:8bd09c675f28 23 //initialise
adat80 5:8bd09c675f28 24 float timeToAttack = 0.0; //time at which the enemy will begin to move forwards
adat80 5:8bd09c675f28 25 float speed = 0.5; //speed in pixels per frame at which enemy will move forwards
adat80 5:8bd09c675f28 26 Enemy _enemy;
adat80 5:8bd09c675f28 27 _enemy.init(timeToAttack, speed);
adat80 5:8bd09c675f28 28
adat80 5:8bd09c675f28 29 //set action
adat80 5:8bd09c675f28 30 Action myAc = moving; //Action enumerator
adat80 5:8bd09c675f28 31 _enemy.set_current_action(myAc); //set enemies current action
adat80 5:8bd09c675f28 32
adat80 6:f06ce4cf068a 33 //get action
adat80 6:f06ce4cf068a 34 myAc = _enemy.get_current_action();
adat80 6:f06ce4cf068a 35
adat80 6:f06ce4cf068a 36 //get position
adat80 6:f06ce4cf068a 37 enemy.get_pos()
adat80 6:f06ce4cf068a 38
adat80 6:f06ce4cf068a 39 //set position
adat80 6:f06ce4cf068a 40 Vector2D p = {2, 2} //{x,y}
adat80 6:f06ce4cf068a 41 enemy.set_pos(p);
adat80 6:f06ce4cf068a 42
adat80 6:f06ce4cf068a 43 //get time at which enemy will begin moving
adat80 6:f06ce4cf068a 44 float time = get_timeToAttack();
adat80 6:f06ce4cf068a 45
adat80 6:f06ce4cf068a 46 //set enemies alive flag true/false
adat80 6:f06ce4cf068a 47 enemy.set_alive(true);
adat80 6:f06ce4cf068a 48
adat80 6:f06ce4cf068a 49 //get enemies alive flag true/false
adat80 6:f06ce4cf068a 50 enemy.get_alive();
adat80 6:f06ce4cf068a 51
adat80 6:f06ce4cf068a 52
adat80 6:f06ce4cf068a 53 //update enemy
adat80 6:f06ce4cf068a 54 int fps = 30;
adat80 6:f06ce4cf068a 55 enemy.update(int fps);
adat80 6:f06ce4cf068a 56
adat80 6:f06ce4cf068a 57
adat80 5:8bd09c675f28 58 //draw enemy
adat80 5:8bd09c675f28 59 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
adat80 5:8bd09c675f28 60 lcd.init();
adat80 5:8bd09c675f28 61 _enemy.draw(lcd); //draw enemy sprite to display
adat80 5:8bd09c675f28 62
adat80 5:8bd09c675f28 63
adat80 5:8bd09c675f28 64
adat80 5:8bd09c675f28 65
adat80 6:f06ce4cf068a 66
adat80 6:f06ce4cf068a 67
adat80 5:8bd09c675f28 68 }
adat80 5:8bd09c675f28 69
adat80 5:8bd09c675f28 70 @endcode
adat80 5:8bd09c675f28 71
adat80 5:8bd09c675f28 72
adat80 1:3916f272663e 73 */
adat80 2:88019d96e1da 74
adat80 5:8bd09c675f28 75 //action enumerator keeps track of enemies current state
adat80 5:8bd09c675f28 76 //and allows for quick routing to correct process via switch state
adat80 5:8bd09c675f28 77 enum Action {
adat80 5:8bd09c675f28 78 waiting, //enemy not yet attacking (off screen)
adat80 5:8bd09c675f28 79 moving, //enemy moving towards players wall
adat80 5:8bd09c675f28 80 attacking, //enemy damaging players wall
adat80 5:8bd09c675f28 81 dying //enemy has been killed by player
adat80 5:8bd09c675f28 82 };
adat80 2:88019d96e1da 83
adat80 1:3916f272663e 84 class Enemy
adat80 1:3916f272663e 85 {
adat80 1:3916f272663e 86 public:
adat80 1:3916f272663e 87 Enemy();
adat80 1:3916f272663e 88 ~Enemy();
adat80 2:88019d96e1da 89
adat80 2:88019d96e1da 90
adat80 5:8bd09c675f28 91 /**
adat80 5:8bd09c675f28 92 * @brief Initialises an enemy with a time to attack and a set speed
adat80 5:8bd09c675f28 93 * @param timeToAttack @details The time into the new level that the enemy will start moving forwards
adat80 5:8bd09c675f28 94 * @param speed @details The speed of the enemy in pixels per frame
adat80 5:8bd09c675f28 95 */
adat80 3:97cd7b3d89d0 96 void init(float timeToAttack, float speed);
adat80 5:8bd09c675f28 97 /**
adat80 5:8bd09c675f28 98 * @brief Draws the enemy on the lcd
adat80 5:8bd09c675f28 99 * @param lcd @details the N5110 object
adat80 5:8bd09c675f28 100 */
adat80 1:3916f272663e 101 void draw(N5110 &lcd);
adat80 5:8bd09c675f28 102 /**
adat80 5:8bd09c675f28 103 * @brief Updates the position of the enemy based on its state
adat80 5:8bd09c675f28 104 * @param fps @details the games frames per second as an integer
adat80 5:8bd09c675f28 105 */
adat80 2:88019d96e1da 106 void update(int fps);
adat80 5:8bd09c675f28 107
adat80 1:3916f272663e 108 /// accessors and mutators
adat80 5:8bd09c675f28 109 /**
adat80 5:8bd09c675f28 110 * @brief Gets the enemies position
adat80 5:8bd09c675f28 111 * @return position @details a Vector2D object detailing enemies position
adat80 5:8bd09c675f28 112
adat80 5:8bd09c675f28 113 */
adat80 1:3916f272663e 114 Vector2D get_pos();
adat80 5:8bd09c675f28 115 /**
adat80 5:8bd09c675f28 116 * @brief Sets the enemies position
adat80 5:8bd09c675f28 117 * @param position @details a Vector2D position
adat80 5:8bd09c675f28 118 */
adat80 1:3916f272663e 119 void set_pos(Vector2D p);
adat80 2:88019d96e1da 120
adat80 5:8bd09c675f28 121 /**
adat80 5:8bd09c675f28 122 * @brief Gets the enemies delay time to it starting to attack
adat80 5:8bd09c675f28 123 * @return time to attack @details returns a float value for the time in to the level the enemy begins to attack
adat80 5:8bd09c675f28 124 */
adat80 1:3916f272663e 125 float get_timeToAttack();
adat80 1:3916f272663e 126
adat80 5:8bd09c675f28 127 /**
adat80 5:8bd09c675f28 128 * @brief Sets enemies current action
adat80 5:8bd09c675f28 129 * @param Action @details an enumerator with 1 of the following values { waiting, moving, attacking, dying };
adat80 5:8bd09c675f28 130 */
adat80 2:88019d96e1da 131 void set_current_action(Action act);
adat80 5:8bd09c675f28 132 /**
adat80 5:8bd09c675f28 133 * @brief Returns enemies current action
adat80 5:8bd09c675f28 134 * @return Action @details an enumerator with 1 of the following values { waiting, moving, attacking, dying };
adat80 5:8bd09c675f28 135 */
adat80 3:97cd7b3d89d0 136 Action get_current_action();
adat80 5:8bd09c675f28 137 /**
adat80 5:8bd09c675f28 138 * @brief Set Flag if enemy is alive
adat80 5:8bd09c675f28 139 * @param alive @details a boolean value detailing if the enemy is alive
adat80 5:8bd09c675f28 140 */
adat80 1:3916f272663e 141 void set_alive(bool alive);
adat80 5:8bd09c675f28 142 /**
adat80 5:8bd09c675f28 143 * @brief Get Flag if enemy is alive
adat80 5:8bd09c675f28 144 * @return alive @details a boolean value detailing if the enemy is alive
adat80 5:8bd09c675f28 145 */
adat80 1:3916f272663e 146 bool get_alive();
adat80 2:88019d96e1da 147
adat80 2:88019d96e1da 148
adat80 1:3916f272663e 149 private:
adat80 1:3916f272663e 150
adat80 3:97cd7b3d89d0 151 float _x;
adat80 3:97cd7b3d89d0 152 float _y;
adat80 2:88019d96e1da 153
adat80 1:3916f272663e 154 bool _attack;
adat80 1:3916f272663e 155 bool _alive;
adat80 1:3916f272663e 156 float _timeToAttack;
adat80 3:97cd7b3d89d0 157 float _speed;
adat80 2:88019d96e1da 158
adat80 2:88019d96e1da 159 float _animationTick;
adat80 2:88019d96e1da 160 Action currentAction;
adat80 2:88019d96e1da 161
adat80 2:88019d96e1da 162
adat80 2:88019d96e1da 163
adat80 2:88019d96e1da 164
adat80 1:3916f272663e 165 };
adat80 1:3916f272663e 166 #endif