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
Engine/Engine.cpp
- Committer:
- lewisgw
- Date:
- 2019-03-28
- Revision:
- 11:b66170249a26
- Parent:
- 10:8bf3713d9e9c
- Child:
- 14:9861fe85c803
File content as of revision 11:b66170249a26:
#include "Engine.h" Engine::Engine() {} Engine::~Engine() {} void Engine::check_reset() { if (_skater.get_reset_flag()) { reset_skater(); _lower_map.init(40); _upper_map.init(22); _skater.set_reset_flag(false); wait(1); } } void Engine::reset_skater() { _moving_counter = 0; _jump_counter = 0; _direction = Left; _level_condition = 0; _start_platform = true; _x = 40; _y = 23; } void Engine::init() { reset_skater(); _lower_map.init(40); _upper_map.init(22); _skater.set_reset_flag(false); srand(time(NULL)); } void Engine::read_input(Gamepad &gamepad) { _input.coord = gamepad.get_mapped_coord(); _input.A_flag = gamepad.check_event(Gamepad::A_PRESSED); } void Engine::process_y() { set_fall_flag(); if (_fall_flag) { _skater.fall(_fall_flag); } else { _skater.set_y_position( _input.A_flag, _jump_counter, _level_condition ); } _fall_flag = _skater.get_fall_flag(); _y = _skater.get_y_position(); _jump_counter = _skater.get_jump_counter(); } void Engine::set_fall_flag() { if (((_lower_line_1.x_end < _x) && (_x < (_lower_line_2.x_start - 6))) && _y == 23) { _fall_flag = true; } else if (((_lower_line_2.x_end < _x) && (_x < (_lower_line_3.x_start - 6))) && _y == 23) { _fall_flag = true; } else if (((_lower_line_3.x_end < _x) && (_x < (_lower_line_1.x_start - 6))) && _y == 23) { _fall_flag = true; } } void Engine::process_x(int t) { if ( _x < -10 || _x > 84 ) { _skater.set_reset_flag(true); } else { _skater.set_x_position_and_sprite(_input.coord.x, _moving_counter, _direction, _input.coord.y); _x = _skater.get_x_position(); _moving_counter = _skater.get_moving_counter(); if ((t % 4 == 0) && (_input.coord.x > -0.1)) { _moving_counter--; } } } void Engine::process_sprite() { _sprite = _skater.get_sprite_value(); _direction = _skater.get_direction(); } void Engine::set_level_condition() { if (((_upper_line_1.x_start - 6) <= _x) && (_x <= _upper_line_1.x_end)) { _level_condition = 1; } else if (((_upper_line_2.x_start - 6) <= _x) && (_x <= _upper_line_2.x_end)) { _level_condition = 1; } else if (((_upper_line_3.x_start - 6) <= _x) && (_x <= _upper_line_3.x_end)) { _level_condition = 1; } else { _level_condition = 0; } } void Engine::generate_map() { generate_lower_lines(); generate_upper_lines(); } void Engine::generate_lower_lines() { _length_1 = (rand() %20) + 10; _lower_map.generate_line_1(_length_1); _lower_line_1 = _lower_map.get_line_1(); _length_2 = (rand() %20) + 10; _lower_map.generate_line_2(_length_2); _lower_line_2 = _lower_map.get_line_2(); _length_3 = (rand() %20) + 10; _lower_map.generate_line_3(_length_3); _lower_line_3 = _lower_map.get_line_3(); } void Engine::generate_upper_lines() { _upper_map.generate_line_1(_length_1 / 2); _upper_line_1 = _upper_map.get_line_1(); _upper_map.generate_line_2(_length_2 / 2); _upper_line_2 = _upper_map.get_line_2(); _upper_map.generate_line_3(_length_3 / 2); _upper_line_3 = _upper_map.get_line_3(); } void Engine::update_lcd(N5110 &lcd){ _skate_sprite = _skater.get_sprite(_sprite); lcd.drawSprite(_x,_y,17,10,(int *)_skate_sprite); lcd.drawLine(_lower_line_2.x_start,_lower_line_2.y,_lower_line_2.x_end,_lower_line_2.y,FILL_BLACK); lcd.drawLine(_lower_line_1.x_start,_lower_line_1.y,_lower_line_1.x_end,_lower_line_1.y,FILL_BLACK); lcd.drawLine(_lower_line_3.x_start,_lower_line_3.y,_lower_line_3.x_end,_lower_line_3.y,FILL_BLACK); lcd.drawLine(_upper_line_2.x_start,_upper_line_2.y,_upper_line_2.x_end,_upper_line_2.y,FILL_BLACK); lcd.drawLine(_upper_line_1.x_start,_upper_line_1.y,_upper_line_1.x_end,_upper_line_1.y,FILL_BLACK); lcd.drawLine(_upper_line_3.x_start,_upper_line_3.y,_upper_line_3.x_end,_upper_line_3.y,FILL_BLACK); } bool Engine::get_start_platform() { if(_input.A_flag) _start_platform = false; return _start_platform; }