Exemple #1
0
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);
}
Exemple #2
0
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);
}