bool Grid::update(Vector3D shipPosition, float dt) { enemies.update(dt); if(cells[9][0].isWithinCell(shipPosition)) { if(enemies.numActiveTroops!=0) playerCompileErrors = true; else playerCompile = true; } return wallCollision(shipPosition, 16); }
void Enemy::update() { float old_x = x; float old_y = y; int searchPlayerCountdown = 400 - searchPlayerClock.getElapsedTime().asMilliseconds(); if(searchPlayerCountdown<=0){ if(abs(state->player->sprite.getPosition().x-x)<100 && abs(state->player->sprite.getPosition().y-y)<100) path = pathToTarget(); //printf("%d\n",(int)path.size()); searchPlayerClock.restart(); } if((int)path.size()>0){ //printf("%d\n",(int)path.size()); if((int)path.size()<50 && state->player->isSatisfying){ game->currentState = new GameOverState(game, 0, state->currentLevel); state->player->satisfactionSound.stop(); } if(followPlayer){ x = path[(int)path.size()-1].x; y = path[(int)path.size()-1].y; speedX = x-old_x; speedY = y-old_y; path.erase(path.end()-1); if(abs(speedX)>abs(speedY)){ if(speedX>0){ spriteSource.y = 2; } else{ spriteSource.y = 3; } } else{ if(speedY>0){ spriteSource.y = 0; } else{ spriteSource.y = 1; } } spriteSource.x += 0.2; if(spriteSource.x*spriteSize.x>=64){ spriteSource.x = 0; } sprite.setTextureRect(sf::IntRect((int)floor(spriteSource.x)*spriteSize.x,spriteSource.y*spriteSize.y,spriteSize.x,spriteSize.y)); sprite.setPosition(x, y); return; } } int randomMoveCountdown = 5000 - randomMoveClock.getElapsedTime().asMilliseconds(); if(randomMoveCountdown<=0){ do{ speedX = (rand() % 3000 - 1500)/(float)1000; speedY = (rand() % 3000 - 1500)/(float)1000; } while(speedY==0 && speedX==0); randomMoveClock.restart(); } x += speedX; y += speedY; if(abs(speedX)>abs(speedY)){ if(speedX>0){ spriteSource.y = 2; } else{ spriteSource.y = 3; } } else{ if(speedY>0){ spriteSource.y = 0; } else{ spriteSource.y = 1; } } spriteSource.x += 0.2; if(spriteSource.x*spriteSize.x>=64){ spriteSource.x = 0; } sprite.setTextureRect(sf::IntRect((int)floor(spriteSource.x)*spriteSize.x,spriteSource.y*spriteSize.y,spriteSize.x,spriteSize.y)); /*if((int)path.size()==0) return; x = path[(int)path.size()-1].x; y = path[(int)path.size()-1].y; path.erase(path.end()-1);*/ wallCollision(old_x,old_y); sprite.setPosition(x, y); }