ELEC2645 (2018/19) / Mbed 2 deprecated EL17MCD

Dependencies:   mbed

Committer:
el17mcd
Date:
Sat Apr 13 16:31:43 2019 +0000
Revision:
11:4e2eb64031a0
Parent:
7:a3ccabdebe2e
Child:
12:9e6d5d0a0c82
!Can take left tank's turn including movement and firing turret. This transitions into "projectile phase" which ends when the projectile goes out of bounds (off screen).  Objects instantiated inside game engine to tidy main.cpp.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17mcd 7:a3ccabdebe2e 1 /* TanksEngine.cpp
el17mcd 7:a3ccabdebe2e 2 Game Engine
el17mcd 7:a3ccabdebe2e 3 9.4.19
el17mcd 7:a3ccabdebe2e 4 */
el17mcd 7:a3ccabdebe2e 5 #include "TanksEngine.h"
el17mcd 7:a3ccabdebe2e 6 #include "Projectile.h"
el17mcd 7:a3ccabdebe2e 7 #include "TankL.h"
el17mcd 11:4e2eb64031a0 8
el17mcd 7:a3ccabdebe2e 9 TanksEngine::TanksEngine()
el17mcd 11:4e2eb64031a0 10
el17mcd 7:a3ccabdebe2e 11 {
el17mcd 7:a3ccabdebe2e 12
el17mcd 7:a3ccabdebe2e 13 }
el17mcd 7:a3ccabdebe2e 14
el17mcd 7:a3ccabdebe2e 15 TanksEngine::~TanksEngine()
el17mcd 7:a3ccabdebe2e 16 {
el17mcd 7:a3ccabdebe2e 17
el17mcd 7:a3ccabdebe2e 18 }
el17mcd 11:4e2eb64031a0 19 void TanksEngine::initgame()
el17mcd 11:4e2eb64031a0 20 {
el17mcd 11:4e2eb64031a0 21 _tankl.set_position(0, 0);
el17mcd 11:4e2eb64031a0 22 _tankl.set_speed(1);
el17mcd 11:4e2eb64031a0 23 _turn = 1;
el17mcd 11:4e2eb64031a0 24 _fire = false;
el17mcd 11:4e2eb64031a0 25 _turn_alternater = 0;
el17mcd 11:4e2eb64031a0 26 _turn_timer = 10;
el17mcd 11:4e2eb64031a0 27 }
el17mcd 11:4e2eb64031a0 28
el17mcd 11:4e2eb64031a0 29 void TanksEngine::left_tank_turn(Gamepad &pad, N5110 &lcd)
el17mcd 11:4e2eb64031a0 30 {
el17mcd 11:4e2eb64031a0 31 _read_input(pad);
el17mcd 11:4e2eb64031a0 32 _tankl.set_angle(100 - _angle );
el17mcd 11:4e2eb64031a0 33 _tankl.move_position(_move);
el17mcd 11:4e2eb64031a0 34 _left_tank_shoots();
el17mcd 11:4e2eb64031a0 35 _tankl.draw(lcd);
el17mcd 11:4e2eb64031a0 36 }
el17mcd 11:4e2eb64031a0 37
el17mcd 11:4e2eb64031a0 38 void TanksEngine::right_tank_turn(Gamepad &pad, N5110 &lcd)
el17mcd 11:4e2eb64031a0 39 {
el17mcd 11:4e2eb64031a0 40 _read_input(pad);
el17mcd 11:4e2eb64031a0 41 _tankl.draw(lcd);
el17mcd 11:4e2eb64031a0 42 }
el17mcd 11:4e2eb64031a0 43
el17mcd 11:4e2eb64031a0 44
el17mcd 11:4e2eb64031a0 45 void TanksEngine::_left_tank_shoots()
el17mcd 11:4e2eb64031a0 46 {
el17mcd 11:4e2eb64031a0 47 if (_fire == true) {
el17mcd 11:4e2eb64031a0 48 int angle = _angle; // change to an int
el17mcd 11:4e2eb64031a0 49 angle = (-angle + 90) % 360; // gamepad's convention is N = 0 clockwise changed into E = 0 anticlockwise
el17mcd 11:4e2eb64031a0 50 int x = _tankl.get_position_x() + 5;
el17mcd 11:4e2eb64031a0 51 int y = _tankl.get_position_y() + 4;
el17mcd 11:4e2eb64031a0 52 _proj.set_launch_parameters(x, y,angle, 1.3, 0.02, 0.00); // set launch parameters for projectile based on tank/game parameters
el17mcd 11:4e2eb64031a0 53 _turn = 2; // change to projectile phase
el17mcd 11:4e2eb64031a0 54 }
el17mcd 11:4e2eb64031a0 55 }
el17mcd 11:4e2eb64031a0 56
el17mcd 11:4e2eb64031a0 57 void TanksEngine::projectile_phase(N5110 &lcd)
el17mcd 11:4e2eb64031a0 58 {
el17mcd 11:4e2eb64031a0 59 if (_proj.check_boundaries() == true) { _change_turn(); }
el17mcd 11:4e2eb64031a0 60 _proj.update_flight();
el17mcd 11:4e2eb64031a0 61 _tankl.draw(lcd);
el17mcd 11:4e2eb64031a0 62 _proj.draw(lcd);
el17mcd 11:4e2eb64031a0 63 }
el17mcd 11:4e2eb64031a0 64
el17mcd 11:4e2eb64031a0 65 void TanksEngine::_change_turn()
el17mcd 11:4e2eb64031a0 66 {
el17mcd 11:4e2eb64031a0 67 _turn_alternater = !_turn_alternater;
el17mcd 11:4e2eb64031a0 68 if (_turn_alternater == 1) { _turn = 3; }
el17mcd 11:4e2eb64031a0 69 else { _turn = 1; }
el17mcd 11:4e2eb64031a0 70 }
el17mcd 11:4e2eb64031a0 71
el17mcd 11:4e2eb64031a0 72 void TanksEngine::_read_input(Gamepad &pad)
el17mcd 11:4e2eb64031a0 73 {
el17mcd 11:4e2eb64031a0 74
el17mcd 11:4e2eb64031a0 75 _angle = pad.get_angle();
el17mcd 11:4e2eb64031a0 76 if (pad.check_event(Gamepad::L_PRESSED) == true) {
el17mcd 11:4e2eb64031a0 77 _move = -1 * !_move; // toggle movement to the left
el17mcd 11:4e2eb64031a0 78 }
el17mcd 11:4e2eb64031a0 79 else if (pad.check_event(Gamepad::R_PRESSED) == true) {
el17mcd 11:4e2eb64031a0 80 _move = 1 * !_move; // toggle movement to the right
el17mcd 11:4e2eb64031a0 81 }
el17mcd 11:4e2eb64031a0 82 if (pad.check_event(Gamepad::A_PRESSED) == true) { _fire = true; }
el17mcd 11:4e2eb64031a0 83 else { _fire = false; }
el17mcd 11:4e2eb64031a0 84 }
el17mcd 11:4e2eb64031a0 85
el17mcd 11:4e2eb64031a0 86 bool TanksEngine::_collision_pl(TankL _tankl, Projectile _proj)
el17mcd 7:a3ccabdebe2e 87 {
el17mcd 7:a3ccabdebe2e 88 for (int i0 = 0; i0 < 4; i0++) {
el17mcd 7:a3ccabdebe2e 89 for (int i1 = 0; i1 < 40; i1++) {
el17mcd 11:4e2eb64031a0 90 if (_proj.get_hitbox(i0) == _tankl.get_hitbox(i1)) {return true;}
el17mcd 7:a3ccabdebe2e 91 }
el17mcd 7:a3ccabdebe2e 92 }
el17mcd 7:a3ccabdebe2e 93 return false;
el17mcd 7:a3ccabdebe2e 94 }
el17mcd 7:a3ccabdebe2e 95
el17mcd 11:4e2eb64031a0 96 int TanksEngine::get_turn()
el17mcd 11:4e2eb64031a0 97 {
el17mcd 11:4e2eb64031a0 98 return _turn;
el17mcd 11:4e2eb64031a0 99 }
el17mcd 11:4e2eb64031a0 100