ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Tue Mar 26 11:03:05 2019 +0000
Revision:
10:8bf3713d9e9c
Parent:
9:fff2009f826e
Child:
11:b66170249a26
Now an upper level of moving platforms that the skater can interact with.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 5:eda40cdde3e7 1 #include "Engine.h"
lewisgw 5:eda40cdde3e7 2
lewisgw 9:fff2009f826e 3 Engine::Engine() {}
lewisgw 5:eda40cdde3e7 4
lewisgw 9:fff2009f826e 5 Engine::~Engine() {}
lewisgw 5:eda40cdde3e7 6
lewisgw 8:5327418f823a 7 void Engine::check_reset() {
lewisgw 9:fff2009f826e 8 if (_skater.get_reset_flag()) {
lewisgw 9:fff2009f826e 9 reset_skater();
lewisgw 10:8bf3713d9e9c 10 _lower_map.init(40);
lewisgw 10:8bf3713d9e9c 11 _upper_map.init(22);
lewisgw 8:5327418f823a 12 _skater.set_reset_flag(false);
lewisgw 8:5327418f823a 13 wait(1);
lewisgw 9:fff2009f826e 14 }
lewisgw 9:fff2009f826e 15 }
lewisgw 9:fff2009f826e 16
lewisgw 9:fff2009f826e 17 void Engine::reset_skater() {
lewisgw 9:fff2009f826e 18 _moving_counter = 0;
lewisgw 9:fff2009f826e 19 _jump_counter = 0;
lewisgw 9:fff2009f826e 20 _direction = Left;
lewisgw 10:8bf3713d9e9c 21 _level_condition = 0;
lewisgw 9:fff2009f826e 22 _x = 40;
lewisgw 9:fff2009f826e 23 _y = 40;
lewisgw 9:fff2009f826e 24 }
lewisgw 8:5327418f823a 25
lewisgw 5:eda40cdde3e7 26 void Engine::init() {
lewisgw 9:fff2009f826e 27 reset_skater();
lewisgw 10:8bf3713d9e9c 28 _lower_map.init(40);
lewisgw 10:8bf3713d9e9c 29 _upper_map.init(22);
lewisgw 9:fff2009f826e 30 srand(time(NULL));
lewisgw 9:fff2009f826e 31 }
lewisgw 5:eda40cdde3e7 32
lewisgw 5:eda40cdde3e7 33 void Engine::read_input(Gamepad &gamepad) {
lewisgw 9:fff2009f826e 34 _input.coord = gamepad.get_mapped_coord();
lewisgw 9:fff2009f826e 35 _input.A_flag = gamepad.check_event(Gamepad::A_PRESSED);
lewisgw 9:fff2009f826e 36 }
lewisgw 5:eda40cdde3e7 37
lewisgw 5:eda40cdde3e7 38 void Engine::process_y() {
lewisgw 9:fff2009f826e 39 set_fall_flag();
lewisgw 9:fff2009f826e 40 if (_fall_flag) {
lewisgw 9:fff2009f826e 41 _skater.fall(_fall_flag);
lewisgw 9:fff2009f826e 42 } else {
lewisgw 10:8bf3713d9e9c 43 _skater.set_y_position( _input.A_flag, _jump_counter, _level_condition );
lewisgw 9:fff2009f826e 44 }
lewisgw 9:fff2009f826e 45 _fall_flag = _skater.get_fall_flag();
lewisgw 9:fff2009f826e 46 _y = _skater.get_y_position();
lewisgw 9:fff2009f826e 47 _jump_counter = _skater.get_jump_counter();
lewisgw 9:fff2009f826e 48 }
lewisgw 8:5327418f823a 49
lewisgw 9:fff2009f826e 50 void Engine::set_fall_flag() {
lewisgw 10:8bf3713d9e9c 51 if (((_lower_line_1.x_end < _x) && (_x < (_lower_line_2.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 52 _fall_flag = true;
lewisgw 10:8bf3713d9e9c 53 } else if (((_lower_line_2.x_end < _x) && (_x < (_lower_line_3.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 54 _fall_flag = true;
lewisgw 10:8bf3713d9e9c 55 } else if (((_lower_line_3.x_end < _x) && (_x < (_lower_line_1.x_start - 6))) && _y == 23) {
lewisgw 9:fff2009f826e 56 _fall_flag = true;
lewisgw 9:fff2009f826e 57 }
lewisgw 9:fff2009f826e 58 }
lewisgw 5:eda40cdde3e7 59
lewisgw 7:bbc2b75c1418 60 void Engine::process_x(int t) {
lewisgw 9:fff2009f826e 61 if ( _x < -10 || _x > 84 ) {
lewisgw 8:5327418f823a 62 _skater.set_reset_flag(true);
lewisgw 9:fff2009f826e 63 } else {
lewisgw 9:fff2009f826e 64 _skater.set_x_position_and_sprite(_input.coord.x,
lewisgw 9:fff2009f826e 65 _moving_counter,
lewisgw 9:fff2009f826e 66 _direction,
lewisgw 9:fff2009f826e 67 _input.coord.y);
lewisgw 5:eda40cdde3e7 68 _x = _skater.get_x_position();
lewisgw 5:eda40cdde3e7 69 _moving_counter = _skater.get_moving_counter();
lewisgw 10:8bf3713d9e9c 70 if ((t % 4 == 0) && (_input.coord.x > -0.1)) {
lewisgw 9:fff2009f826e 71 _moving_counter--;
lewisgw 7:bbc2b75c1418 72 }
lewisgw 9:fff2009f826e 73 }
lewisgw 9:fff2009f826e 74 }
lewisgw 5:eda40cdde3e7 75
lewisgw 5:eda40cdde3e7 76 void Engine::process_sprite() {
lewisgw 9:fff2009f826e 77 _sprite = _skater.get_sprite_value();
lewisgw 9:fff2009f826e 78 _direction = _skater.get_direction();
lewisgw 9:fff2009f826e 79 }
lewisgw 5:eda40cdde3e7 80
lewisgw 5:eda40cdde3e7 81
lewisgw 10:8bf3713d9e9c 82 void Engine::set_level_condition() {
lewisgw 10:8bf3713d9e9c 83 if (((_upper_line_1.x_start - 6) <= _x) && (_x <= _upper_line_1.x_end)) {
lewisgw 10:8bf3713d9e9c 84 _level_condition = 1;
lewisgw 10:8bf3713d9e9c 85 } else if (((_upper_line_2.x_start - 6) <= _x) && (_x <= _upper_line_2.x_end)) {
lewisgw 10:8bf3713d9e9c 86 _level_condition = 1;
lewisgw 10:8bf3713d9e9c 87 } else if (((_upper_line_3.x_start - 6) <= _x) && (_x <= _upper_line_3.x_end)) {
lewisgw 10:8bf3713d9e9c 88 _level_condition = 1;
lewisgw 9:fff2009f826e 89 } else {
lewisgw 10:8bf3713d9e9c 90 _level_condition = 0;
lewisgw 10:8bf3713d9e9c 91 }
lewisgw 9:fff2009f826e 92 }
lewisgw 7:bbc2b75c1418 93
lewisgw 7:bbc2b75c1418 94 void Engine::generate_map() {
lewisgw 10:8bf3713d9e9c 95 generate_lower_lines();
lewisgw 10:8bf3713d9e9c 96 generate_upper_lines();
lewisgw 9:fff2009f826e 97 }
lewisgw 5:eda40cdde3e7 98
lewisgw 10:8bf3713d9e9c 99 void Engine::generate_lower_lines() {
lewisgw 10:8bf3713d9e9c 100 _length_1 = (rand() %20) + 10;
lewisgw 10:8bf3713d9e9c 101 _lower_map.generate_line_1(_length_1);
lewisgw 10:8bf3713d9e9c 102 _lower_line_1 = _lower_map.get_line_1();
lewisgw 10:8bf3713d9e9c 103 _length_2 = (rand() %20) + 10;
lewisgw 10:8bf3713d9e9c 104 _lower_map.generate_line_2(_length_2);
lewisgw 10:8bf3713d9e9c 105 _lower_line_2 = _lower_map.get_line_2();
lewisgw 10:8bf3713d9e9c 106 _length_3 = (rand() %20) + 10;
lewisgw 10:8bf3713d9e9c 107 _lower_map.generate_line_3(_length_3);
lewisgw 10:8bf3713d9e9c 108 _lower_line_3 = _lower_map.get_line_3();
lewisgw 10:8bf3713d9e9c 109 }
lewisgw 10:8bf3713d9e9c 110
lewisgw 10:8bf3713d9e9c 111 void Engine::generate_upper_lines() {
lewisgw 10:8bf3713d9e9c 112 _upper_map.generate_line_1(_length_1 / 2);
lewisgw 10:8bf3713d9e9c 113 _upper_line_1 = _upper_map.get_line_1();
lewisgw 10:8bf3713d9e9c 114 _upper_map.generate_line_2(_length_2 / 2);
lewisgw 10:8bf3713d9e9c 115 _upper_line_2 = _upper_map.get_line_2();
lewisgw 10:8bf3713d9e9c 116 _upper_map.generate_line_3(_length_3 / 2);
lewisgw 10:8bf3713d9e9c 117 _upper_line_3 = _upper_map.get_line_3();
lewisgw 10:8bf3713d9e9c 118 }
lewisgw 5:eda40cdde3e7 119
lewisgw 5:eda40cdde3e7 120 void Engine::update_lcd(N5110 &lcd){
lewisgw 9:fff2009f826e 121 _skate_sprite = _skater.get_sprite(_sprite);
lewisgw 9:fff2009f826e 122 lcd.drawSprite(_x,_y,17,10,(int *)_skate_sprite);
lewisgw 10:8bf3713d9e9c 123 lcd.drawLine(_lower_line_2.x_start,_lower_line_2.y,_lower_line_2.x_end,_lower_line_2.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 124 lcd.drawLine(_lower_line_1.x_start,_lower_line_1.y,_lower_line_1.x_end,_lower_line_1.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 125 lcd.drawLine(_lower_line_3.x_start,_lower_line_3.y,_lower_line_3.x_end,_lower_line_3.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 126 lcd.drawLine(_upper_line_2.x_start,_upper_line_2.y,_upper_line_2.x_end,_upper_line_2.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 127 lcd.drawLine(_upper_line_1.x_start,_upper_line_1.y,_upper_line_1.x_end,_upper_line_1.y,FILL_BLACK);
lewisgw 10:8bf3713d9e9c 128 lcd.drawLine(_upper_line_3.x_start,_upper_line_3.y,_upper_line_3.x_end,_upper_line_3.y,FILL_BLACK);
lewisgw 9:fff2009f826e 129 }