Steven Mahasin / Mbed 2 deprecated DreamDungeon

Dependencies:   mbed MotionSensor

Committer:
el17sm
Date:
Thu May 09 07:39:49 2019 +0000
Revision:
51:4d0cd75e7ed3
Parent:
37:a404860171a9
Child:
56:ef9521b7ed78
Removed moving boolean from entity, finished commenting room.cpp

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