Steven Mahasin / Mbed 2 deprecated DreamDungeon

Dependencies:   mbed MotionSensor

Committer:
el17sm
Date:
Mon May 06 13:27:26 2019 +0000
Revision:
33:4f3948dcd2f7
Parent:
32:fe6359ef9916
Child:
34:1d5b4da3935e
Saved space using char to print screen instead of int (reduction by 4x)

Who changed what in which revision?

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