![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
test 1 doc
Engine/Engine.cpp
- Committer:
- joebarhouch
- Date:
- 2020-05-27
- Revision:
- 9:9830d3a78572
- Parent:
- 8:d19b30a6cd69
- Child:
- 10:9317a62bd4d0
File content as of revision 9:9830d3a78572:
#include "Engine.h" Platform maps[6] = {Platform(0, 40, 20, 3), Platform(0, 14, 20, 3), Platform(64, 14, 10, 3), Platform(70, 40, 20, 3), Platform(5, 20, 30, 3), Platform(55, 30, 25, 3)}; int mapSize = sizeof(maps)/sizeof(*maps); vector <Enemy> enemies; ////////////////////// DRAW MAP ////////////////////////// void drawMap(N5110 &lcd) { for (int i = 0; i < mapSize; i++) { maps[i].draw(lcd); //debugs //coords = maps[i].get_pos(); //printf("x: %i, y: %i,w: %i,h: %i \n",coords.x, coords.y, coords.width, coords.height); } //debugs //printf("-----------------------------------------\n"); } Engine::Engine() { } Engine::~Engine() { } ////////////////////// INIT //////////////////////////// void Engine::init() { //init coord _px = WIDTH / 2; _py = 5; //init call _p.init(_px, _py); //ennemy enemies.push_back(Enemy(0, 0)); enemies.push_back(Enemy(75, 0)); //physics parameters _Ypos = 0; _fall = true; _c = false; //rands srand(time(NULL)); } ////////////////////// INPUT ////////////////////////// //reads direction and magnitude from the JOYSTICK to control the player void Engine::read_input(Gamepad &pad) { _d = pad.get_direction(); _mag = pad.get_mag(); _jump = pad.B_held(); //printf("%s", _jump ? "true\n" : "false\n"); } ////////////////////// DRAW /////////////////////////// //draw both player and map void Engine::draw(N5110 &lcd) { // player _p.draw(lcd); // map drawMap(lcd); //enemies for(int i = 0; i < enemies.size(); i ++) { enemies.at(i).draw(lcd); } } ////////////////////// UPDATE ////////////////////////// //provide the player file with necessary Joystick values void Engine::update(Gamepad &pad) { floorCollide(); efloorCollide(); spawnEnemy(); _p.update(_d,_mag, _Ypos, _fall, _jump); for(int i = 0; i < enemies.size(); i ++) { enemies.at(i).update(_eYpos.at(i), _efall.at(i)); //printf("Enemy %i!\n", i); } /* if (_c == true) { //debug //printf("collison\n"); } else { //debug //printf("no collison\n"); } //enemmyCollide(pad); } */ } ////////////////////// FLOOR COLLISION ////////////////////////// void Engine::floorCollide() { int a; Vector4 coords[mapSize]; Vector2D player = _p.get_pos(); //coordinates of platforms for(int i = 0; i < mapSize; i++) { coords[i] = maps[i].get_pos(); } if(_c == false) { _fall = true; for(int j=0; j < mapSize; j++) { if(player.x+5 >= coords[j].x && player.x+1 <= coords[j].x + coords[j].width && player.y+9 >= coords[j].y && player.y+9 <= coords[j].y + coords[j].height) { a = j; _c = true; //printf("%i, %i\n", player.x, player.y ); } } } if(_c == true) { _Ypos = coords[a].y - 8; _fall = false; _c = false; } } ////////////////////// SPAWN ENEMY ///////////////////////////////////// void Engine::spawnEnemy() { for(int i = 0; i < enemies.size(); i ++) { //printf("%s", enemies.at(i).fell() ? "true\n" : "false\n"); if ( enemies.at(i).fell() == true ) { int f = rand()%2; if ( f == 0) { place =1; } else if ( f ==1) { place = 0; } printf("%s\n", f ? "true" : "false"); //enemies.erase(enemies.begin() + i); switch(place) { case 1: enemies.at(i).set_pos(0,0); //enemies.push_back(Enemy(0,0)); break; case 0: enemies.at(i).set_pos(0,75); //enemies.push_back(Enemy(0,75)); break; } } } } ////////////////////// ENNEMY FLOOR COLLISION ////////////////////////// void Engine::efloorCollide() { vector <Vector2D> epos; Vector4 coord[mapSize]; int b; //coordinates of platforms for(int i = 0; i < mapSize; i++) { coord[i] = maps[i].get_pos(); } for(int i = 0; i <enemies.size(); i++) { epos.push_back(enemies.at(i).get_pos()); _eYpos.push_back(1); _efall.push_back(true); //printf("pos of %i: %f, %f\n", i, epos.at(i).x, epos.at(i).y); } /* if(_e == false) { //_efall = true; for(int i=0; i<mapSize; i++) { for(int j=0; j < epos.size(); j++) { if(epos.at(j).x >= coord[i].x && epos.at(j).x+1 <= coord[i].x + coord[i].width && epos.at(j).y+6 >= coord[i].y && epos.at(j).y+6 <= coord[i].y + coord[i].height) { b = j; _e = true; //printf("%f, %f\n", epos.at(j).x,epos.at(j).y ); } } } } if(_e == true) { _eYpos.at(i) = coord[b].y - 8; _efall.at(i) = false; _e = false; //printf("enemy fall"); } */ for(int i=0; i < mapSize; i++){ for(int j=0; j< epos.size(); j++){ if(epos.at(j).x >= coord[i].x && epos.at(j).x+1 <= coord[i].x + coord[i].width && epos.at(j).y+6 >= coord[i].y && epos.at(j).y+6 <= coord[i].y + coord[i].height){ _eYpos.at(i) = coord[i].y - 8; _efall.at(i) = false; } else{ _efall.at(i) = true; } } } }