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 MotionSensor
Entity/Mobs/Headless/Headless.cpp@51:4d0cd75e7ed3, 2019-05-09 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |