Steven Mahasin / Mbed 2 deprecated DreamDungeon

Dependencies:   mbed MotionSensor

Committer:
el17sm
Date:
Sat May 04 15:39:20 2019 +0000
Revision:
29:6b8411bb040a
Parent:
28:98848e6a77a2
Child:
30:ec915d24d3e9
added Room complete;; started Floor engine;; ; To do:; Floor generation;; More enemies;; Bosses;; Title Screen;; Score;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17sm 10:1a3499f6b583 1 #include "Player.h"
el17sm 10:1a3499f6b583 2 #include "math.h"
el17sm 10:1a3499f6b583 3
el17sm 13:d04a6caba40d 4 // Constructor
el17sm 22:7abf4581bc9b 5 Player::Player(float pos_x, float pos_y)
el17sm 22:7abf4581bc9b 6 {
el17sm 28:98848e6a77a2 7 _damage_self_upon_collision = true;
el17sm 10:1a3499f6b583 8 moving = false;
el17sm 10:1a3499f6b583 9 face = 0;
el17sm 16:ddb203a74dfc 10 hp = 3;
el17sm 23:5a8f75e93508 11 attack = 1;
el17sm 10:1a3499f6b583 12 hitbox.width = 6;
el17sm 10:1a3499f6b583 13 hitbox.height = 5;
el17sm 10:1a3499f6b583 14 position.x = pos_x;
el17sm 10:1a3499f6b583 15 position.y = pos_y;
el17sm 10:1a3499f6b583 16 sprite_size.width = 6;
el17sm 10:1a3499f6b583 17 sprite_size.height = 12;
el17sm 10:1a3499f6b583 18 sprite_size.offset_x = 0;
el17sm 10:1a3499f6b583 19 sprite_size.offset_y = 7;
el17sm 12:a1c1991835ca 20 frame.count = 0;
el17sm 12:a1c1991835ca 21 frame.number = 0;
el17sm 12:a1c1991835ca 22 frame.max = 4;
el17sm 22:7abf4581bc9b 23 for (int i = 0; i < bullets_max; i++) {
el17sm 22:7abf4581bc9b 24 valid_bullets[i] = false;
el17sm 22:7abf4581bc9b 25 }
el17sm 15:44d5cc33d389 26 fire_rate_counter = 0;
el17sm 23:5a8f75e93508 27 invulnerability_counter = invulnerability_period;
el17sm 22:7abf4581bc9b 28
el17sm 16:ddb203a74dfc 29 // Upgradable status
el17sm 23:5a8f75e93508 30 fire_rate_delay = 30;
el17sm 23:5a8f75e93508 31 velocity = 0.7;
el17sm 23:5a8f75e93508 32 _bullet_speed = 1;
el17sm 27:a1b41626f57c 33 }
el17sm 27:a1b41626f57c 34
el17sm 27:a1b41626f57c 35 Player::~Player()
el17sm 27:a1b41626f57c 36 {
el17sm 29:6b8411bb040a 37 delete_bullets();
el17sm 10:1a3499f6b583 38 }
el17sm 10:1a3499f6b583 39
el17sm 13:d04a6caba40d 40 // Accessors
el17sm 22:7abf4581bc9b 41 int Player::get_bullet_speed()
el17sm 22:7abf4581bc9b 42 {
el17sm 22:7abf4581bc9b 43 return _bullet_speed;
el17sm 29:6b8411bb040a 44 }
el17sm 23:5a8f75e93508 45 int Player::get_hearts_width()
el17sm 23:5a8f75e93508 46 {
el17sm 27:a1b41626f57c 47 return 9;
el17sm 23:5a8f75e93508 48 }
el17sm 23:5a8f75e93508 49 int Player::get_hearts_height()
el17sm 23:5a8f75e93508 50 {
el17sm 27:a1b41626f57c 51 return 9;
el17sm 23:5a8f75e93508 52 }
el17sm 23:5a8f75e93508 53 int * Player::get_hearts_sprite()
el17sm 23:5a8f75e93508 54 {
el17sm 27:a1b41626f57c 55 return (int *) sprite_heart;
el17sm 23:5a8f75e93508 56 }
el17sm 13:d04a6caba40d 57
el17sm 13:d04a6caba40d 58 // Functions
el17sm 29:6b8411bb040a 59 void Player::move(float mapped_x, float mapped_y, int * map, bool * doorways)
el17sm 22:7abf4581bc9b 60 {
el17sm 29:6b8411bb040a 61 if(!entity_to_map_collision_test(position.x + velocity*mapped_x, position.y, map, doorways)) {
el17sm 16:ddb203a74dfc 62 position.x += velocity*mapped_x;
el17sm 10:1a3499f6b583 63 }
el17sm 29:6b8411bb040a 64 if(!entity_to_map_collision_test(position.x, position.y - velocity*mapped_y, map, doorways)) {
el17sm 16:ddb203a74dfc 65 position.y -= velocity*mapped_y;
el17sm 10:1a3499f6b583 66 }
el17sm 10:1a3499f6b583 67 moving = false;
el17sm 22:7abf4581bc9b 68 if (abs(mapped_x) + abs(mapped_y) > 0.1f) {
el17sm 10:1a3499f6b583 69 moving = true;
el17sm 22:7abf4581bc9b 70 if (mapped_y < 0 && abs(mapped_y) > abs(mapped_x)) {
el17sm 10:1a3499f6b583 71 face = 2;
el17sm 22:7abf4581bc9b 72 } else if (mapped_y > 0 && abs(mapped_y) > abs(mapped_x)) {
el17sm 10:1a3499f6b583 73 face = 0;
el17sm 22:7abf4581bc9b 74 } else if (mapped_x > 0 && abs(mapped_x) > abs(mapped_y)) {
el17sm 10:1a3499f6b583 75 face = 1;
el17sm 22:7abf4581bc9b 76 } else if (mapped_x < 0 && abs(mapped_x) > abs(mapped_y)) {
el17sm 10:1a3499f6b583 77 face = 3;
el17sm 10:1a3499f6b583 78 }
el17sm 22:7abf4581bc9b 79 if (frame.number < frame.max) {
el17sm 12:a1c1991835ca 80 frame.count++;
el17sm 22:7abf4581bc9b 81 } else {
el17sm 12:a1c1991835ca 82 frame.count = 0;
el17sm 12:a1c1991835ca 83 }
el17sm 22:7abf4581bc9b 84 } else {
el17sm 12:a1c1991835ca 85 frame.count = 0;
el17sm 12:a1c1991835ca 86 }
el17sm 23:5a8f75e93508 87 frame.number = (frame.count/8) % frame.max;
el17sm 23:5a8f75e93508 88 invulnerability_counter++;
el17sm 23:5a8f75e93508 89 }
el17sm 23:5a8f75e93508 90
el17sm 23:5a8f75e93508 91 void Player::take_damage(int damage)
el17sm 23:5a8f75e93508 92 {
el17sm 28:98848e6a77a2 93 if (damage < 0){
el17sm 28:98848e6a77a2 94 hp -= damage;
el17sm 28:98848e6a77a2 95 }
el17sm 28:98848e6a77a2 96 else if (invulnerability_counter >= invulnerability_period) {
el17sm 23:5a8f75e93508 97 hp -= damage;
el17sm 23:5a8f75e93508 98 invulnerability_counter = 0;
el17sm 23:5a8f75e93508 99 }
el17sm 28:98848e6a77a2 100 if (hp > 5) {
el17sm 28:98848e6a77a2 101 hp = 5;
el17sm 28:98848e6a77a2 102 }
el17sm 12:a1c1991835ca 103 }
el17sm 29:6b8411bb040a 104 void Player::delete_bullets()
el17sm 29:6b8411bb040a 105 {
el17sm 29:6b8411bb040a 106 for (int i = 0; i < bullets_max; i++) {
el17sm 29:6b8411bb040a 107 if (valid_bullets[i]) {
el17sm 29:6b8411bb040a 108 delete bullets_array[i];
el17sm 29:6b8411bb040a 109 valid_bullets[i] = false;
el17sm 29:6b8411bb040a 110 }
el17sm 29:6b8411bb040a 111 }
el17sm 29:6b8411bb040a 112 }
el17sm 12:a1c1991835ca 113
el17sm 22:7abf4581bc9b 114 int * Player::get_frame()
el17sm 22:7abf4581bc9b 115 {
el17sm 23:5a8f75e93508 116 if ((invulnerability_counter < invulnerability_period) && (invulnerability_counter % 10 <= 4)) {
el17sm 23:5a8f75e93508 117 return (int*) sprite_transparent_player;
el17sm 23:5a8f75e93508 118 }
el17sm 12:a1c1991835ca 119 return (int *) sprite_player[face][frame.number];
el17sm 10:1a3499f6b583 120 }
el17sm 10:1a3499f6b583 121
el17sm 22:7abf4581bc9b 122 void Player::buttons(bool button_A, bool button_B, bool button_Y, bool button_X)
el17sm 22:7abf4581bc9b 123 {
el17sm 15:44d5cc33d389 124 fire_rate_counter++;
el17sm 22:7abf4581bc9b 125 if (button_Y) {
el17sm 10:1a3499f6b583 126 face = 0;
el17sm 22:7abf4581bc9b 127 } else if (button_B) {
el17sm 10:1a3499f6b583 128 face = 1;
el17sm 22:7abf4581bc9b 129 } else if (button_A) {
el17sm 10:1a3499f6b583 130 face = 2;
el17sm 22:7abf4581bc9b 131 } else if (button_X) {
el17sm 10:1a3499f6b583 132 face = 3;
el17sm 10:1a3499f6b583 133 }
el17sm 22:7abf4581bc9b 134 if (button_Y || button_B || button_A || button_X) {
el17sm 22:7abf4581bc9b 135 for (int i = 0; i < bullets_max; i++) {
el17sm 22:7abf4581bc9b 136 if (!valid_bullets[i] && (fire_rate_counter >= fire_rate_delay)) {
el17sm 15:44d5cc33d389 137 bullets_array[i] = new Bullets(position.x+2, position.y-2, face);
el17sm 14:3361879490b2 138 valid_bullets[i] = true;
el17sm 15:44d5cc33d389 139 fire_rate_counter = 0;
el17sm 14:3361879490b2 140 break;
el17sm 14:3361879490b2 141 }
el17sm 13:d04a6caba40d 142 }
el17sm 13:d04a6caba40d 143 }
el17sm 10:1a3499f6b583 144 }