ELEC2645 (2018/19) / Mbed 2 deprecated ll16o2l_ELEC2645

Dependencies:   mbed Gamepad

Committer:
ll16o2l
Date:
Tue May 07 18:01:54 2019 +0000
Revision:
15:807eba7c7811
Parent:
3:aa82968b7a8e
Re-organised the documentation and finished the project.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ll16o2l 2:888634fff8ff 1 #include "Player.h"
ll16o2l 2:888634fff8ff 2
ll16o2l 2:888634fff8ff 3 // nothing doing in the constructor and destructor
ll16o2l 2:888634fff8ff 4 Player::Player()
ll16o2l 2:888634fff8ff 5 {
ll16o2l 2:888634fff8ff 6
ll16o2l 2:888634fff8ff 7 }
ll16o2l 2:888634fff8ff 8
ll16o2l 2:888634fff8ff 9 Player::~Player()
ll16o2l 2:888634fff8ff 10 {
ll16o2l 2:888634fff8ff 11
ll16o2l 2:888634fff8ff 12 }
ll16o2l 2:888634fff8ff 13
ll16o2l 2:888634fff8ff 14 void Player::init(int player_height,int player_width)
ll16o2l 2:888634fff8ff 15 {
ll16o2l 2:888634fff8ff 16 // Initialise at the centre
ll16o2l 2:888634fff8ff 17
ll16o2l 2:888634fff8ff 18 _x = HEIGHT/2 - player_height/2;
ll16o2l 2:888634fff8ff 19 _y = WIDTH/2 - player_width/2;
ll16o2l 2:888634fff8ff 20
ll16o2l 2:888634fff8ff 21 _player_height = player_height;
ll16o2l 2:888634fff8ff 22 _player_width = player_width;
ll16o2l 2:888634fff8ff 23
ll16o2l 2:888634fff8ff 24 _speed = 1; // default speed
ll16o2l 2:888634fff8ff 25 }
ll16o2l 2:888634fff8ff 26
ll16o2l 2:888634fff8ff 27 void Player::draw(N5110 &lcd)
ll16o2l 2:888634fff8ff 28 {
ll16o2l 2:888634fff8ff 29 int Player_sprite[14][14] = {
ll16o2l 2:888634fff8ff 30 {1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ll16o2l 2:888634fff8ff 31 {1,1,1,0,0,0,1,1,0,0,0,1,1,1},
ll16o2l 2:888634fff8ff 32 {1,1,1,1,0,0,1,1,0,0,1,1,1,1},
ll16o2l 2:888634fff8ff 33 {1,0,1,1,1,0,1,1,0,1,1,1,0,1},
ll16o2l 2:888634fff8ff 34 {1,0,0,1,1,1,1,1,1,1,1,0,0,1},
ll16o2l 2:888634fff8ff 35 {1,0,0,0,1,1,1,1,1,1,0,0,0,1},
ll16o2l 2:888634fff8ff 36 {1,0,0,0,0,1,1,1,1,0,0,0,0,1},
ll16o2l 2:888634fff8ff 37 {1,0,0,0,0,1,1,1,1,0,0,0,0,1},
ll16o2l 2:888634fff8ff 38 {1,0,0,0,1,1,1,1,1,1,0,0,0,1},
ll16o2l 2:888634fff8ff 39 {1,0,0,1,1,1,1,1,1,1,1,0,0,1},
ll16o2l 2:888634fff8ff 40 {1,0,1,1,1,0,1,1,0,1,1,1,0,1},
ll16o2l 2:888634fff8ff 41 {1,1,1,1,0,0,1,1,0,0,1,1,1,1},
ll16o2l 2:888634fff8ff 42 {1,1,1,0,0,0,1,1,0,0,0,1,1,1},
ll16o2l 2:888634fff8ff 43 {1,1,1,1,1,1,1,1,1,1,1,1,1,1},
ll16o2l 2:888634fff8ff 44 };
ll16o2l 2:888634fff8ff 45
ll16o2l 2:888634fff8ff 46 // Instantiate the Bitmap object using the data above
ll16o2l 3:aa82968b7a8e 47 lcd.drawSprite(_x, _y, _player_height, _player_width,(int *)Player_sprite);
ll16o2l 2:888634fff8ff 48 }
ll16o2l 2:888634fff8ff 49
ll16o2l 3:aa82968b7a8e 50 void Player::update(Direction d, float mag)
ll16o2l 2:888634fff8ff 51 {
ll16o2l 2:888634fff8ff 52 _speed = int(mag*10.0f); // scale is arbitrary, could be changed in future
ll16o2l 2:888634fff8ff 53
ll16o2l 2:888634fff8ff 54 // update y value depending on direction of movement
ll16o2l 2:888634fff8ff 55 // North is decrement as origin is at the top-left so decreasing moves up
ll16o2l 2:888634fff8ff 56 if (d == N) {
ll16o2l 3:aa82968b7a8e 57 _y-=_speed; // updates the speed in directions depending on joystick position, d.
ll16o2l 3:aa82968b7a8e 58 } else if (d == NE) {
ll16o2l 2:888634fff8ff 59 _y-=_speed;
ll16o2l 2:888634fff8ff 60 _x+=_speed;
ll16o2l 2:888634fff8ff 61 } else if (d == E) {
ll16o2l 2:888634fff8ff 62 _x+=_speed;
ll16o2l 2:888634fff8ff 63 } else if (d == SE) {
ll16o2l 2:888634fff8ff 64 _y+=_speed;
ll16o2l 2:888634fff8ff 65 _x+=_speed;
ll16o2l 2:888634fff8ff 66 } else if (d == S) {
ll16o2l 2:888634fff8ff 67 _y+=_speed;
ll16o2l 2:888634fff8ff 68 } else if (d == SW) {
ll16o2l 2:888634fff8ff 69 _y+=_speed;
ll16o2l 2:888634fff8ff 70 _x-=_speed;
ll16o2l 2:888634fff8ff 71 } else if (d == W) {
ll16o2l 2:888634fff8ff 72 _x-=_speed;
ll16o2l 2:888634fff8ff 73 } else if (d == NW) {
ll16o2l 2:888634fff8ff 74 _y-=_speed;
ll16o2l 2:888634fff8ff 75 _x-=_speed;
ll16o2l 2:888634fff8ff 76 }
ll16o2l 2:888634fff8ff 77
ll16o2l 3:aa82968b7a8e 78 // check the y origin to ensure that the player doesn't go off screen
ll16o2l 2:888634fff8ff 79 if (_y < 1) {
ll16o2l 2:888634fff8ff 80 _y = 1;
ll16o2l 2:888634fff8ff 81 }
ll16o2l 2:888634fff8ff 82 if (_y > HEIGHT - _player_height - 1) {
ll16o2l 2:888634fff8ff 83 _y = HEIGHT - _player_height - 1;
ll16o2l 2:888634fff8ff 84 }
ll16o2l 2:888634fff8ff 85
ll16o2l 3:aa82968b7a8e 86 // check the x origin to ensure that the player doesn't go off screen
ll16o2l 2:888634fff8ff 87 if (_x < 1) {
ll16o2l 2:888634fff8ff 88 _x = 1;
ll16o2l 2:888634fff8ff 89 }
ll16o2l 2:888634fff8ff 90 if (_x > WIDTH - _player_width - 1) {
ll16o2l 2:888634fff8ff 91 _x = WIDTH - _player_width - 1;
ll16o2l 2:888634fff8ff 92 }
ll16o2l 2:888634fff8ff 93 }
ll16o2l 2:888634fff8ff 94
ll16o2l 3:aa82968b7a8e 95 /**
ll16o2l 3:aa82968b7a8e 96 * This method will be used to retun the position of the player.
ll16o2l 3:aa82968b7a8e 97 * @author Oliver Luong
ll16o2l 3:aa82968b7a8e 98 * @date 22/04/2019
ll16o2l 3:aa82968b7a8e 99 */
ll16o2l 2:888634fff8ff 100 Vector2D Player::get_pos() {
ll16o2l 2:888634fff8ff 101 Vector2D p = {_x,_y};
ll16o2l 2:888634fff8ff 102 return p;
ll16o2l 2:888634fff8ff 103 }