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
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 "Headless.h"
el17sm 10:1a3499f6b583 2 #include "math.h"
el17sm 10:1a3499f6b583 3 #include <complex>
el17sm 10:1a3499f6b583 4
el17sm 22:7abf4581bc9b 5 Headless::Headless(float pos_x, float pos_y)
el17sm 22:7abf4581bc9b 6 {
el17sm 28:98848e6a77a2 7 _damage_self_upon_collision = false;
el17sm 28:98848e6a77a2 8 _hp_drop_chance = 10; // out of 100
el17sm 12:a1c1991835ca 9 moving = true;
el17sm 10:1a3499f6b583 10 face = 0;
el17sm 16:ddb203a74dfc 11 hp = 4;
el17sm 23:5a8f75e93508 12 attack = 1;
el17sm 10:1a3499f6b583 13 hitbox.width = 6;
el17sm 10:1a3499f6b583 14 hitbox.height = 5;
el17sm 10:1a3499f6b583 15 position.x = pos_x;
el17sm 10:1a3499f6b583 16 position.y = pos_y;
el17sm 10:1a3499f6b583 17 sprite_size.width = 6;
el17sm 10:1a3499f6b583 18 sprite_size.height = 9;
el17sm 10:1a3499f6b583 19 sprite_size.offset_x = 0;
el17sm 10:1a3499f6b583 20 sprite_size.offset_y = 4;
el17sm 12:a1c1991835ca 21 frame.count = 0;
el17sm 12:a1c1991835ca 22 frame.number = 0;
el17sm 12:a1c1991835ca 23 frame.max = 4;
el17sm 23:5a8f75e93508 24 velocity = 0.25;
el17sm 10:1a3499f6b583 25 }
el17sm 10:1a3499f6b583 26
el17sm 29:6b8411bb040a 27 void Headless::move(float player_x, float player_y, int * map, bool * doorways)
el17sm 22:7abf4581bc9b 28 {
el17sm 10:1a3499f6b583 29 std::complex<double> pos_diff(player_x - position.x, player_y - position.y); // defining difference in position as a vector
el17sm 16:ddb203a74dfc 30 position.x += velocity * pos_diff.real() / std::abs(pos_diff);
el17sm 16:ddb203a74dfc 31 position.y += velocity * pos_diff.imag() / std::abs(pos_diff);
el17sm 12:a1c1991835ca 32
el17sm 22:7abf4581bc9b 33 if (pos_diff.imag() / std::abs(pos_diff) < 0 && abs(pos_diff.imag() / std::abs(pos_diff)) > abs(pos_diff.real() / std::abs(pos_diff))) {
el17sm 12:a1c1991835ca 34 face = 2;
el17sm 22:7abf4581bc9b 35 } else if (pos_diff.imag() / std::abs(pos_diff) > 0 && abs(pos_diff.imag() / std::abs(pos_diff)) > abs(pos_diff.real() / std::abs(pos_diff))) {
el17sm 12:a1c1991835ca 36 face = 0;
el17sm 22:7abf4581bc9b 37 } else if (pos_diff.real() / std::abs(pos_diff) > 0 && abs(pos_diff.real() / std::abs(pos_diff)) > abs(pos_diff.imag() / std::abs(pos_diff))) {
el17sm 12:a1c1991835ca 38 face = 1;
el17sm 22:7abf4581bc9b 39 } else if (pos_diff.real() / std::abs(pos_diff) < 0 && abs(pos_diff.real() / std::abs(pos_diff)) > abs(pos_diff.imag() / std::abs(pos_diff))) {
el17sm 12:a1c1991835ca 40 face = 3;
el17sm 10:1a3499f6b583 41 }
el17sm 22:7abf4581bc9b 42
el17sm 29:6b8411bb040a 43 undo_move_x(entity_to_map_collision_test(position.x, prev_pos.y, map, doorways));
el17sm 29:6b8411bb040a 44 undo_move_y(entity_to_map_collision_test(prev_pos.x, position.y, map, doorways));
el17sm 22:7abf4581bc9b 45
el17sm 22:7abf4581bc9b 46 if (frame.number < frame.max) {
el17sm 12:a1c1991835ca 47 frame.count++;
el17sm 22:7abf4581bc9b 48 } else {
el17sm 12:a1c1991835ca 49 frame.count = 0;
el17sm 12:a1c1991835ca 50 }
el17sm 23:5a8f75e93508 51 frame.number = (frame.count/16) % frame.max;
el17sm 23:5a8f75e93508 52 }
el17sm 23:5a8f75e93508 53
el17sm 23:5a8f75e93508 54 void Headless::take_damage(int damage)
el17sm 23:5a8f75e93508 55 {
el17sm 23:5a8f75e93508 56 hp -= damage;
el17sm 12:a1c1991835ca 57 }
el17sm 12:a1c1991835ca 58
el17sm 22:7abf4581bc9b 59 int * Headless::get_frame()
el17sm 22:7abf4581bc9b 60 {
el17sm 12:a1c1991835ca 61 return (int *) sprite_headless[face][frame.number];
el17sm 10:1a3499f6b583 62 }