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
Player/Player.cpp@5:158e2951654b, 2017-04-30 (annotated)
- Committer:
- el15as
- Date:
- Sun Apr 30 22:51:35 2017 +0000
- Revision:
- 5:158e2951654b
- Parent:
- 4:1f7f32f3e017
- Child:
- 7:b54323241435
Added a switch and a door.; Programmed first three levels.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el15as | 4:1f7f32f3e017 | 1 | #include "Player.h" |
el15as | 4:1f7f32f3e017 | 2 | |
el15as | 4:1f7f32f3e017 | 3 | Player::Player() |
el15as | 4:1f7f32f3e017 | 4 | { |
el15as | 4:1f7f32f3e017 | 5 | |
el15as | 4:1f7f32f3e017 | 6 | } |
el15as | 4:1f7f32f3e017 | 7 | |
el15as | 4:1f7f32f3e017 | 8 | Player::~Player() |
el15as | 4:1f7f32f3e017 | 9 | { |
el15as | 4:1f7f32f3e017 | 10 | |
el15as | 4:1f7f32f3e017 | 11 | } |
el15as | 4:1f7f32f3e017 | 12 | |
el15as | 4:1f7f32f3e017 | 13 | void Player::init(intVector2D XY) |
el15as | 4:1f7f32f3e017 | 14 | { |
el15as | 4:1f7f32f3e017 | 15 | _x = XY.x; |
el15as | 4:1f7f32f3e017 | 16 | _y = XY.y; |
el15as | 4:1f7f32f3e017 | 17 | |
el15as | 4:1f7f32f3e017 | 18 | _isDead = false; |
el15as | 4:1f7f32f3e017 | 19 | |
el15as | 4:1f7f32f3e017 | 20 | Vector2D velocity = {0.0f, 0.0f}; |
el15as | 4:1f7f32f3e017 | 21 | _velocity = velocity; |
el15as | 4:1f7f32f3e017 | 22 | |
el15as | 4:1f7f32f3e017 | 23 | intVector2D points[8] = { |
el15as | 4:1f7f32f3e017 | 24 | {0,0}, {2,0}, // top |
el15as | 4:1f7f32f3e017 | 25 | {0,2}, {2,2}, // bottom |
el15as | 4:1f7f32f3e017 | 26 | {0,0}, {0,2}, // left |
el15as | 4:1f7f32f3e017 | 27 | {2,0}, {2,2}, // right |
el15as | 4:1f7f32f3e017 | 28 | }; |
el15as | 4:1f7f32f3e017 | 29 | |
el15as | 4:1f7f32f3e017 | 30 | for (int i = 0; i < 8; i++) { |
el15as | 4:1f7f32f3e017 | 31 | collisionPoint[i] = points[i]; |
el15as | 4:1f7f32f3e017 | 32 | }; |
el15as | 5:158e2951654b | 33 | |
el15as | 5:158e2951654b | 34 | _isJumping = true; |
el15as | 4:1f7f32f3e017 | 35 | } |
el15as | 4:1f7f32f3e017 | 36 | |
el15as | 4:1f7f32f3e017 | 37 | void Player::draw(N5110 &lcd) |
el15as | 4:1f7f32f3e017 | 38 | { |
el15as | 4:1f7f32f3e017 | 39 | // draw the player |
el15as | 4:1f7f32f3e017 | 40 | lcd.drawRect(_x, _y, 3, 3, FILL_TRANSPARENT); |
el15as | 4:1f7f32f3e017 | 41 | } |
el15as | 4:1f7f32f3e017 | 42 | |
el15as | 5:158e2951654b | 43 | void Player::update(float jx, Serial &pc, int lvl, bool theSwitch) |
el15as | 4:1f7f32f3e017 | 44 | { |
el15as | 4:1f7f32f3e017 | 45 | if (jx < 0) { |
el15as | 4:1f7f32f3e017 | 46 | _velocity.x = int(jx*3.2f); // to make up for mechanical imbalance |
el15as | 4:1f7f32f3e017 | 47 | } else { |
el15as | 4:1f7f32f3e017 | 48 | _velocity.x = int(jx*3.0f); |
el15as | 4:1f7f32f3e017 | 49 | } |
el15as | 4:1f7f32f3e017 | 50 | |
el15as | 4:1f7f32f3e017 | 51 | // Jump if not already jumping and the jump key was pressed |
el15as | 4:1f7f32f3e017 | 52 | if (_didReleaseJumpKey && !_isJumping && _didPressJump) |
el15as | 4:1f7f32f3e017 | 53 | { |
el15as | 5:158e2951654b | 54 | apply_jump(lvl, theSwitch); |
el15as | 4:1f7f32f3e017 | 55 | } |
el15as | 4:1f7f32f3e017 | 56 | |
el15as | 4:1f7f32f3e017 | 57 | // Jump key released |
el15as | 5:158e2951654b | 58 | if (!_didPressJump) { |
el15as | 4:1f7f32f3e017 | 59 | _didReleaseJumpKey = true; |
el15as | 5:158e2951654b | 60 | } |
el15as | 5:158e2951654b | 61 | apply_gravity(lvl, theSwitch); |
el15as | 4:1f7f32f3e017 | 62 | |
el15as | 5:158e2951654b | 63 | // Assume player is in the air to prevent jumping |
el15as | 5:158e2951654b | 64 | // If that's not true it will be set to false in collsion detection |
el15as | 5:158e2951654b | 65 | _isJumping = true; |
el15as | 5:158e2951654b | 66 | |
el15as | 5:158e2951654b | 67 | //if (_velocity.y > 6) _velocity.y = 6; // Terminal velocity |
el15as | 4:1f7f32f3e017 | 68 | } |
el15as | 4:1f7f32f3e017 | 69 | |
el15as | 4:1f7f32f3e017 | 70 | intVector2D Player::get_pos() { |
el15as | 4:1f7f32f3e017 | 71 | intVector2D p = {_x, _y}; |
el15as | 4:1f7f32f3e017 | 72 | return p; |
el15as | 4:1f7f32f3e017 | 73 | } |
el15as | 4:1f7f32f3e017 | 74 | |
el15as | 4:1f7f32f3e017 | 75 | void Player::set_pos(intVector2D p) { |
el15as | 4:1f7f32f3e017 | 76 | _x = p.x; |
el15as | 4:1f7f32f3e017 | 77 | _y = p.y; |
el15as | 4:1f7f32f3e017 | 78 | } |
el15as | 4:1f7f32f3e017 | 79 | |
el15as | 4:1f7f32f3e017 | 80 | Vector2D Player::get_velocity() { |
el15as | 4:1f7f32f3e017 | 81 | Vector2D velocity = {_velocity.x, _velocity.y}; |
el15as | 4:1f7f32f3e017 | 82 | return velocity; |
el15as | 4:1f7f32f3e017 | 83 | } |
el15as | 4:1f7f32f3e017 | 84 | |
el15as | 4:1f7f32f3e017 | 85 | void Player::set_velocity(Vector2D v) { |
el15as | 4:1f7f32f3e017 | 86 | _velocity = v; |
el15as | 4:1f7f32f3e017 | 87 | } |
el15as | 4:1f7f32f3e017 | 88 | |
el15as | 4:1f7f32f3e017 | 89 | void Player::reset_velocity() |
el15as | 4:1f7f32f3e017 | 90 | { |
el15as | 4:1f7f32f3e017 | 91 | _velocity.x = 0; |
el15as | 4:1f7f32f3e017 | 92 | _velocity.y = 0; |
el15as | 4:1f7f32f3e017 | 93 | } |
el15as | 4:1f7f32f3e017 | 94 | |
el15as | 5:158e2951654b | 95 | void Player::apply_gravity(int lvl, bool theSwitch) |
el15as | 5:158e2951654b | 96 | { |
el15as | 5:158e2951654b | 97 | // Opening the door on level 2 inverts gravity |
el15as | 5:158e2951654b | 98 | if ((lvl == 2 || lvl == 3) && theSwitch == true) { |
el15as | 5:158e2951654b | 99 | _velocity.y -= GRAVITY; |
el15as | 5:158e2951654b | 100 | } |
el15as | 5:158e2951654b | 101 | else { |
el15as | 5:158e2951654b | 102 | _velocity.y += GRAVITY; |
el15as | 5:158e2951654b | 103 | } |
el15as | 5:158e2951654b | 104 | } |
el15as | 5:158e2951654b | 105 | |
el15as | 5:158e2951654b | 106 | void Player::apply_jump(int lvl, bool theSwitch) |
el15as | 5:158e2951654b | 107 | { |
el15as | 5:158e2951654b | 108 | _isJumping = true; |
el15as | 5:158e2951654b | 109 | _didReleaseJumpKey = false; |
el15as | 5:158e2951654b | 110 | |
el15as | 5:158e2951654b | 111 | // Opening the door on level 2 inverts gravity |
el15as | 5:158e2951654b | 112 | if ((lvl == 2 || lvl == 3) && theSwitch == true) { |
el15as | 5:158e2951654b | 113 | _velocity.y = -JUMPSPEED; |
el15as | 5:158e2951654b | 114 | } |
el15as | 5:158e2951654b | 115 | else { |
el15as | 5:158e2951654b | 116 | _velocity.y = JUMPSPEED; |
el15as | 5:158e2951654b | 117 | } |
el15as | 5:158e2951654b | 118 | } |