void display(void) { if (lastFrameTime == 0) { lastFrameTime = glutGet(GLUT_ELAPSED_TIME); } int now = glutGet(GLUT_ELAPSED_TIME); int elapsedMilliseconds = now - lastFrameTime; float elapsedTime = elapsedMilliseconds / 1000.0f; lastFrameTime = now; int windowWidth = glutGet(GLUT_WINDOW_WIDTH); int windowHeight = glutGet(GLUT_WINDOW_HEIGHT); if (enemy.GetX() > windowWidth - enemy.GetWidth()) { enemy.SetDirectionX(-1); } else if (enemy.GetX() < 0) { enemy.SetDirectionX(1); } enemy.SetX(enemy.GetX() + enemy.GetVelocity() * elapsedTime * enemy.GetDirectionX()); enemy.SetY(enemy.GetY() + enemy.GetVelocity() * elapsedTime * enemy.GetDirectionY()); if (enemy.GetY() > windowHeight - enemy.GetHeight()) { enemy.SetDirectionY(-1); } else if (enemy.GetY() < 0) { enemy.SetDirectionY(1); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); enemy.Display(); player.Display(); glutSwapBuffers(); }
Enemy * Application::FindNearest() { float shortestLength = -1; Enemy* shortestEnemy = nullptr; for (vector<Enemy*>::iterator it = enemyList.begin(); it != enemyList.end(); ++it) { Enemy* e = *it; if (e->GetActive()) { float dist = (Vector2(ships_.at(0)->GetX(), ships_.at(0)->GetY()) - Vector2(e->GetX(), e->GetY())).Length(); if (shortestLength == -1 || dist < shortestLength) { shortestLength = dist; shortestEnemy = e; } } } return shortestEnemy; }