bool PlatKillas::UpdateAndRender() { float ticks = (float)SDL_GetTicks() / 1000.0f; float elapsed = ticks - lastFrameTicks; lastFrameTicks = ticks; SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } else if (event.type == SDL_KEYDOWN) { if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) { if (shootTimer > 0.1f) shootBullet(); } } } const Uint8 *keys = SDL_GetKeyboardState(NULL); if (keys[SDL_SCANCODE_W]) { if (!player->isJumping) { player->jump(); } } if (keys[SDL_SCANCODE_D]) { SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 27); player->sprite = playerSprite; player->setWalkRight(); } else if (keys[SDL_SCANCODE_A]) { SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 15); player->sprite = playerSprite; player->setWalkLeft(); } else { player->setIdle(); } if (keys[SDL_SCANCODE_X]) { if (shootTimer > 0.1f) { shootTimer = 0.0f; shootBullet(); } } float fixedElapsed = elapsed + timeLeftOver; if (fixedElapsed > FIXED_TIMESTEP* MAX_TIMESTEPS) { fixedElapsed = FIXED_TIMESTEP* MAX_TIMESTEPS; } while (fixedElapsed >= FIXED_TIMESTEP) { fixedElapsed -= FIXED_TIMESTEP; FixedUpdate(); } timeLeftOver = fixedElapsed; Update(elapsed); Render(); return done; }
bool Asteroids::UpdateAndRender() { float ticks = (float)SDL_GetTicks() / 1000.0f; float elapsed = ticks - lastFrameTicks; lastFrameTicks = ticks; SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } else if (event.type == SDL_KEYDOWN) { if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) { if (shootTimer > 0.1f) shootBullet(); } } } const Uint8 *keys = SDL_GetKeyboardState(NULL); if (keys[SDL_SCANCODE_W]) { player->velocity_x = 1.0f; player->velocity_y = 1.0f; } else if (keys[SDL_SCANCODE_S]) { player->velocity_x = 0.0f; player->velocity_y = 0.0f; } if (keys[SDL_SCANCODE_D]) { player->rotation -= 5.0f * elapsed; } else if (keys[SDL_SCANCODE_A]) { player->rotation += 5.0f * elapsed; } if (keys[SDL_SCANCODE_X]) { if (shootTimer > 0.1f) { shootTimer = 0.0f; shootBullet(); } } float fixedElapsed = elapsed + timeLeftOver; if (fixedElapsed > FIXED_TIMESTEP* MAX_TIMESTEPS) { fixedElapsed = FIXED_TIMESTEP* MAX_TIMESTEPS; } while (fixedElapsed >= FIXED_TIMESTEP) { fixedElapsed -= FIXED_TIMESTEP; FixedUpdate(fixedElapsed); } timeLeftOver = fixedElapsed; Update(elapsed); Render(); return done; }
void Warship::fire() { if(limit>shootElapsed) { shootBullet(); limit=0.f; } }
void processEvents(){ //SDL event loop while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } else if (event.type == SDL_KEYDOWN && currentState == STATE_GAME){ if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) { shootBullet(Player); } } } }
void Weapon::sequenceFire(Entity& shooter){ if (sequenceDelayTime == 0){ if (sequence_idx < bullet_list.size()){ shootBullet(shooter, *bullet_list[sequence_idx]); sequenceDelayTime = sequenceDelaySet; sequence_idx++; } else { shootCooldownTime = shootCooldownSet; sequence_idx = 0; } } else { sequenceDelayTime--; } }
void Weapon::sequenceMultiFire(Entity& shooter){ // Will polish up area later if (sequenceDelayTime == 0){ if (sequence_idx < bullet_list.size()){ for (int i = 0; i < bullets_fired; ++i){ int shoot_idx = (sequence_idx + i) % bullet_list.size(); shootBullet(shooter, *bullet_list[shoot_idx]); } sequenceDelayTime = sequenceDelaySet; sequence_idx += bullets_fired; } else { shootCooldownTime = shootCooldownSet; sequence_idx = 0; } } else { sequenceDelayTime--; } }
void BulletCache::shootBulletFrom(cocos2d::Vec2 startPosition, cocos2d::Vec2 velocity, std::string frameName, bool isPlayerBullet, Entity * owner){ auto bullets = batch->getChildren(); auto node = bullets.at(nextInactiveBullet); CCASSERT(dynamic_cast<Bullet *>(node), "not a Bullet!"); auto bullet = dynamic_cast<Bullet *>(node); if (velocity.y > 0) { bullet->setRotation(0); } if (velocity.y < 0) { bullet->setRotation(180); } if (velocity.x > 0) { bullet->setRotation(90); } if (velocity.x < 0) { bullet->setRotation(270); } bullet->shootBullet(startPosition, velocity, frameName, isPlayerBullet, owner); nextInactiveBullet++; if (nextInactiveBullet >= bullets.size()) { nextInactiveBullet = 0; } }
//----------------------------------------------------------------------------------------- // randomize automated movements //----------------------------------------------------------------------------------------- void Robot::aiSetDestination(){ //randomize shooting int randomNum = rand() % 15; if(randomNum == 7 || randomNum == 9){ shootBullet(); } //randomize destination if((checkXDestination() && checkZDestination())){ int randomNum2 = rand() % 10; switch(randomNum2){ case 0: case 1: case 2: case 3: case 4: if(checkXPos(false)){ setDestination(xPos-ROBOT_LOOK_SIZE-1, zPos); } break; case 5: case 6: if(checkZPos(false)){ setDestination(xPos, zPos-ROBOT_LOOK_SIZE); } break; case 8: if(checkZPos(true)){ setDestination(xPos, zPos+ROBOT_LOOK_SIZE); } break; case 9: if(checkXPos(true)){ setDestination(xPos+ROBOT_LOOK_SIZE, zPos); } break; default: break; } } }
void update(float elapsed){ if (currentState == STATE_TITLE_SCREEN) { if (keys[SDL_SCANCODE_RETURN]) currentState = STATE_GAME; } else if (currentState == STATE_GAME) { //Player movements if (keys[SDL_SCANCODE_LEFT]){ Player->direction_x = -1.0f; Player->x += Player->direction_x * elapsed * Player->speed; } else if (keys[SDL_SCANCODE_RIGHT]){ Player->direction_x = 1.0f; Player->x += Player->direction_x * elapsed * Player->speed; } if (Player->x < -1.77f + Player->width*0.5f) Player->x = -1.77f + Player->width*0.5f; else if (Player->x >1.77f - Player->width *0.5f) Player->x = 1.77f - Player->width*0.5f; //Bullets for (int i = 0; i < MAX_BULLETS; i++) { bullets[i].update(elapsed); enemyBullets[i].update(elapsed); } for (int i = 0; i < MAX_BULLETS; i++) { enemyBullets[i].colliding(Player); } float aliensMaxPosition = 0.0f; float aliensMinPosition = 0.0f; int random = std::rand() % 55; while (random < 44 && aliens[random + 11]->isAlive){ random += 11; } shootBullet(aliens[random]); bool outOfScreen = false; bool belowPlayer = false; for (int i = 0; i < 55; i++){ if (aliens[i]->isAlive){ for (int k = 0; k < MAX_BULLETS; k++) { bullets[k].colliding(aliens[i]); } if (aliens[i]->isAlive && (aliens[i]->x <-1.77f + aliens[i]->width*0.5f )) { aliens[i]->x = -1.77f + aliens[i]->width*0.5f; outOfScreen = true; } if (aliens[i]->isAlive && aliens[i]->x > 1.77f - aliens[i]->width *0.5f) { aliens[i]->x = 1.77f - aliens[i]->width*0.5f; outOfScreen = true; } if (aliens[i]->isAlive && (aliens[i]->y - aliens[i]->height*0.5f < Player->y)) { gameOver = true; currentState = STATE_TITLE_SCREEN; } } } for (int i = 0; i < 55; i++){ if (aliens[i]->isAlive){ if (outOfScreen){ aliens[i]->direction_x *= -1.0f; aliens[i]->y += -0.10f; } aliens[i]->update(elapsed); } } } }
void PlayerInput(bool& done, ShaderProgram program){ SDL_Event event; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) { done = true; } else if (event.type == SDL_KEYDOWN){ if (state == STATE_MAIN_MENU) { if (event.key.keysym.scancode == SDL_SCANCODE_SPACE){ state = STATE_GAME_LEVEL; startGame(); } else if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE){ done = true; } } else{ if (event.key.keysym.scancode == SDL_SCANCODE_LEFT){ if (PLAYER_ENT.godmode) { PLAYER_ENT.acceleration_x += -2.2; } else{ if (false && PLAYER_ENT.leftContact) { puts("not lefting");//do nothing } else{ PLAYER_ENT.acceleration_x = -2.2; if (PLAYER_ENT.rightContact) { PLAYER_ENT.rightContact = false; } } } } else if (event.key.keysym.scancode == SDL_SCANCODE_RIGHT){ if (PLAYER_ENT.godmode) { PLAYER_ENT.acceleration_x += 2.2; } else{ if (false && PLAYER_ENT.rightContact) { puts("not righting");//do nothing } else{ PLAYER_ENT.acceleration_x = 2.2; if (PLAYER_ENT.leftContact) { PLAYER_ENT.leftContact = false; } } } } else if (event.key.keysym.scancode == SDL_SCANCODE_W){ shootBullet(0); } else if (event.key.keysym.scancode == SDL_SCANCODE_D){ shootBullet(1); } else if (event.key.keysym.scancode == SDL_SCANCODE_A){ shootBullet(2); } else if (event.key.keysym.scancode == SDL_SCANCODE_S){ shootBullet(3); } else if (event.key.keysym.scancode == SDL_SCANCODE_J){//jetpack TODO: remove later if (state != STATE_MAIN_MENU) { PLAYER_ENT.velocity_y += 3.0f; } } else if (event.key.keysym.scancode == SDL_SCANCODE_I){//toggle immunity to gravity TODO: remove later if (state != STATE_MAIN_MENU) { PLAYER_ENT.gravity = !PLAYER_ENT.gravity; } } else if (event.key.keysym.scancode == SDL_SCANCODE_G){ PLAYER_ENT.godmode = !PLAYER_ENT.godmode; } else if (event.key.keysym.scancode == SDL_SCANCODE_Z){ zoom += 0.5; projectionMatrix.setOrthoProjection(zoom*-1.7777f, zoom*1.77777f, zoom*-1.0f, zoom*1.0f, zoom*-1.0f, zoom*1.0f); program.setModelMatrix(modelMatrix); program.setProjectionMatrix(projectionMatrix); program.setViewMatrix(viewMatrix); glUseProgram(program.programID); } else if (event.key.keysym.scancode == SDL_SCANCODE_X){ zoom -= 0.5; projectionMatrix.setOrthoProjection(zoom*-1.7777f, zoom*1.77777f, zoom*-1.0f, zoom*1.0f, zoom*-1.0f, zoom*1.0f); program.setModelMatrix(modelMatrix); program.setProjectionMatrix(projectionMatrix); program.setViewMatrix(viewMatrix); glUseProgram(program.programID); } else if (event.key.keysym.scancode == SDL_SCANCODE_P){ peaceful = !peaceful; } else if (event.key.keysym.scancode == SDL_SCANCODE_UP){ if (PLAYER_ENT.godmode) { PLAYER_ENT.acceleration_y += 2.2; } else{ if (PLAYER_ENT.bottomContact) { PLAYER_ENT.velocity_y += 3.0f; PLAYER_ENT.bottomContact = false; } else if (PLAYER_ENT.leftContact) { PLAYER_ENT.velocity_y += 3.0f; PLAYER_ENT.velocity_x += 1.7f; PLAYER_ENT.leftContact = false; PLAYER_ENT.rightContact = false; } else if (PLAYER_ENT.rightContact) { PLAYER_ENT.velocity_y += 3.0f; PLAYER_ENT.velocity_x -= 1.7f; PLAYER_ENT.rightContact = false; PLAYER_ENT.leftContact = false; } } } else if (event.key.keysym.scancode == SDL_SCANCODE_DOWN){ if (PLAYER_ENT.godmode) { PLAYER_ENT.acceleration_y += -2.2; } } else if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE){ done = true; } } } else if (event.type == SDL_KEYUP){ if (event.key.keysym.scancode == SDL_SCANCODE_LEFT){ PLAYER_ENT.acceleration_x = 0; } else if (event.key.keysym.scancode == SDL_SCANCODE_RIGHT){ PLAYER_ENT.acceleration_x = 0; } } } }
Robot::Robot(GLfloat x, GLfloat y) { rubble = (Model*)(new LightRubbleModel()); flag = (Model*)(new FlagModel()); nuclearM = (Model*)(new NuclearModel()); electronicsM = (Model*)(new ElectronicsModel()); phaserM = (Model*)(new PhaserModel); cannonM = (Model*)(new CannonModel); missileM = (Model*)(new MissileLauncherModel); bipodM = (Model*)(new BipodModel); tracksM = (Model*)(new TracksModel); antiGravM = (Model*)(new AntiGravModel); headlight = (Model*)(new HeadlightModel); model = bipodM; roboCam = NULL; groundplane[0] = 0.0f; groundplane[1] = 1.0f; groundplane[2] = 0.0f; groundplane[3] = 0.0f; robotIdCount++; robotId = robotIdCount; xPos = x; zPos = y; xDestination = x; zDestination = y; spinDegrees = SOUTH; spinDestination = SOUTH; pitchAngle = 90.0f; yawAngle = 90.0f; isMyLightOn = false; hasBox = false; robotLife = MAX_LIFE; directionVector[0] = -1.0f; directionVector[1] = 0.0f; directionVector[2] = 0.0f; //BiPod is on isPartOn[0] = true; selectedIndex = 0; for(int i = 1; i < 8; i++){ isPartOn[i]=false; } turnIndexOn(1); turnIndexOn(3); //turnIndexOn(4); //turnIndexOn(5); //turnIndexOn(6); //turnIndexOn(7); //incrementSpinDegrees(true,180.0f); refreshRobot(); ct = new CollisionTester; box = new BoundingBox(xPos,0.0f,zPos,xPos+1.0f,height,zPos+1.0f, true, this); hasBox = true; ct->staticBoxes.push_back(box); isRobotBeingControlled = false; shootBullet(); currentTime = clock(); lastExplosion = clock(); explosionSize = 0.5f; stop = false; isAlive = true; aiShootCount = 0; computerControlled = false; }
void ColoredCubeApp::updateScene(float dt) { for (int i = 0; i < MAX_NUM_STARS; i++) { stars[i].update(dt); } switch (gsm->getGameState()) { case GameStateManager::START_GAME: { D3DApp::updateScene(dt); gameObject1.update(dt); D3DXMATRIX w; D3DXMatrixTranslation(&w, 2, 2, 0); mfxWVPVar->SetMatrix(w); score = 0; // Build the view matrix. /*D3DXVECTOR3 pos(10.0f, 2.0f, 0.0f); D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); D3DXMatrixLookAtLH(&mView, &pos, &target, &up);*/ if(GetAsyncKeyState(VK_SPACE) & 0x8000 && gsm->getGameState() != GameStateManager::IN_GAME) { gsm->setGameState(GameStateManager::IN_GAME); audio->playCue(SELECT); } Vector3 oldEnemyPositions[MAX_NUM_ENEMIES]; for (int i = 0; i < MAX_NUM_ENEMIES; i++) { oldEnemyPositions[i] = enemyObjects[i].getPosition(); } Vector3 oldBulletPositions[MAX_NUM_BULLETS]; for (int i = 0; i < MAX_NUM_BULLETS; i++) { oldBulletPositions[i] = playerBullets[i].getPosition(); } //Camera Object camera.update(dt); break; } case GameStateManager::IN_GAME: { //Generate a block every three seconds if (enemyBuffer.elapsedTime() > 2) { enemyBuffer.resetClock(); generateEnemy(enemyObjects, dt); } if (gameTimer.elapsedTime() >= 1) { gameTimer.resetClock(); secondsRemaining--; } for (int i = 0; i < MAX_NUM_BULLETS; i++) { playerBullets[i].update(dt); } for (int i = 0; i < MAX_NUM_EXP_PARTICLES; i++) { particles[i].update(dt); } if (camera.isCameraRecoiling()) { camera.cameraRecoil(dt); } if(explosionRunning) explosionTimer += dt; if (explosionTimer > .55) { explosionTimer = 0; explosionRunning = false; for (int i = 0; i < MAX_NUM_EXP_PARTICLES; i++) { particles[i].setInActive(); } } if(GetAsyncKeyState(VK_RETURN) & 0x8000) { if(shotRelease) { shootBullet(playerBullets, dt, gameObject1); //shotRelease = false; } } //if(!(GetAsyncKeyState(VK_RETURN) & 0x8000)) shotRelease = true; Vector3 oldEnemyPositions[MAX_NUM_ENEMIES]; for (int i = 0; i < MAX_NUM_ENEMIES; i++) { oldEnemyPositions[i] = enemyObjects[i].getPosition(); } Vector3 direction(0, 0, 0); Vector3 oldposition = gameObject1.getPosition(); D3DApp::updateScene(dt); gameObject1.update(dt); for (int i = 0; i < MAX_NUM_ENEMIES; i++) { enemyObjects[i].update(dt); } if((GetAsyncKeyState('A') & 0x8000) && !(GetAsyncKeyState('D') & 0x8000)) direction.z = -1.0f; if((GetAsyncKeyState('D') & 0x8000) && !(GetAsyncKeyState('A') & 0x8000)) direction.z = +1.0f; D3DXVec3Normalize(&direction, &direction); for (int i = 0; i < MAX_NUM_ENEMIES; i++) { //if they collide and are active if(gameObject1.collided(&enemyObjects[i]) && enemyObjects[i].getActiveState()) { audio->playCue(FAIL); enemyObjects[i].setInActive(); //score++; camera.cameraShake(dt); score = 0; gsm->setGameState(GameStateManager::END_GAME); } if (enemyObjects[i].getPosition().x > 7) { enemyObjects[i].setInActive(); } } for (int i = 0; i < MAX_NUM_BULLETS; i++) { for (int j = 0; j < MAX_NUM_ENEMIES; j++) { if(playerBullets[i].collided(&enemyObjects[j]) && enemyObjects[j].getActiveState()) { audio->playCue(BOOM); explosionTimer = 0; runExplosion(playerBullets[i].getPosition()); enemyObjects[j].setInActive(); playerBullets[i].setInActive(); score++; } } } gameObject1.setVelocity( direction * gameObject1.getSpeed()); if (gameObject1.getPosition().z < -PLAYER_Z_RANGE) { gameObject1.setPosition(Vector3(oldposition.x, oldposition.y, -PLAYER_Z_RANGE)); camera.setCameraMoveLeft(false); camera.setCameraMoveRight(true); } else if (gameObject1.getPosition().z > PLAYER_Z_RANGE) { gameObject1.setPosition(Vector3(oldposition.x, oldposition.y, PLAYER_Z_RANGE)); camera.setCameraMoveRight(false); camera.setCameraMoveLeft(true); } else { camera.setCameraMoveRight(true); camera.setCameraMoveLeft(true); } //Destroys bullet if too far away for (int i = 0; i < MAX_NUM_BULLETS; i++) { if(playerBullets[i].getPosition().x < -10 && playerBullets[i].getActiveState()) playerBullets[i].setInActive(); } D3DXMATRIX w; D3DXMatrixTranslation(&w, 2, 2, 0); mfxWVPVar->SetMatrix(w); //Camera Object camera.update(dt); //Get Camera viewMatrix mView = camera.getViewMatrix(); mProj = camera.getProjectionMatrix(); } if (secondsRemaining <= 0) { gsm->setGameState(GameStateManager::END_GAME); } case GameStateManager::END_GAME: { //D3DApp::updateScene(dt); //gameObject1.update(dt); if (camera.isCameraShaking()) { camera.cameraShake(dt); } D3DXMATRIX w; D3DXMatrixTranslation(&w, 2, 2, 0); mfxWVPVar->SetMatrix(w); //// Build the view matrix. //D3DXVECTOR3 pos(10.0f, 2.0f, 0.0f); //D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); //D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); //D3DXMatrixLookAtLH(&mView, &pos, &target, &up); if(GetAsyncKeyState(VK_SPACE) & 0x8000 && gsm->getGameState() != GameStateManager::IN_GAME) { restartGame(); gsm->setGameState(GameStateManager::IN_GAME); audio->playCue(SELECT); } //Camera Object camera.update(dt); break; } default: { throw(GameError(gameErrorNS::FATAL_ERROR, "Game State Error")); break; } } }
void run(){ Display gDisplay; Assets gAssets; ControlState gControlState; SDL_Event e; bool quit = false; srand(time(NULL)); if (!initDisplay(&gDisplay)) { fprintf(stderr, "ERROR: failed to initialize\n"); exit(1); } if (!loadAssets(&gAssets, &gDisplay)) { fprintf(stderr, "ERROR: failed to load game assets\n"); exit(1); } Player p = P_createPlayer(); AI *ai = AI_createAI(); LinkedList playerBulletList = LL_createLinkedList(); LinkedList enemyBulletList = LL_createLinkedList(); LinkedList enemyList = LL_createLinkedList(); Timer fpsCapTimer = T_createTimer(); Timer gameTimer = T_createTimer(); unsigned int lastShooting = 0; unsigned int lastEnemenySpawn = 0; unsigned int check = 0; T_start(&gameTimer); int controlarray[4] = {0}; SDL_Rect healthbar; initialisehealthbar(&healthbar); quit = staticscreen(gDisplay.renderer, "Assets/startmenu.bmp"); SDL_Surface* temp; SDL_Texture* background; temp = SDL_LoadBMP("Assets/background.bmp"); background = SDL_CreateTextureFromSurface(gDisplay.renderer, temp); SDL_FreeSurface(temp); temp = NULL; /*Event loop*/ do{ // start frame timer T_start(&fpsCapTimer); // check for exit event SDL_PollEvent(&e); quit = (e.type == SDL_QUIT); // check to open ai interface if(e.type == SDL_KEYDOWN){ if(e.key.keysym.sym == SDLK_ESCAPE){ quit = openaiscreen(gDisplay.renderer, controlarray); e.key.keysym.sym = SDLK_0; SDL_PushEvent(&e); } } // move player getKeyState(&gControlState); getMouseState(&gControlState); movePlayer(&p, &gControlState, &gAssets); AI_move(ai, P_getPosition(&p)); if ((check = T_getTicks(&gameTimer)) - lastEnemenySpawn > DEFAULT_SPAWN_INTERVAL) { spawnEnemy(&enemyList); lastEnemenySpawn = check; } aiaction(ai, &playerBulletList, &enemyList, T_getTicks(&gameTimer), controlarray, &p); moveEnemies(&enemyList, P_getPosition(&p)); enemiesShoot(&enemyList, &enemyBulletList, &p, T_getTicks(&gameTimer)); if (leftMouseIsDown() && ((check = T_getTicks(&gameTimer)) - lastShooting) > SHOOT_DELAY) { double mx = (double)gControlState.mouseX / SCREEN_WIDTH; double my = (double)gControlState.mouseY / SCREEN_HEIGHT; Point origin = P_getPosition(&p); Point destination = {mx, my}; shootBullet(&playerBulletList, origin, getShotDirection(origin, destination), PLAYER); lastShooting = check; } moveBullets(&playerBulletList); moveBullets(&enemyBulletList); detectCollision(&playerBulletList, &enemyList, &gAssets); detectCollisionPlayer(&enemyBulletList, &p, &gAssets); /* Update Screen */ SDL_RenderCopy(gDisplay.renderer, background, NULL, NULL); displayhealth(gDisplay.renderer, healthbar, p.health); renderBullets(&playerBulletList, &gDisplay, &gAssets, PLAYER); renderBullets(&enemyBulletList, &gDisplay, &gAssets, ENEMY); renderEnemies(&enemyList, &gDisplay, &gAssets); renderPlayer(&gDisplay, &gAssets, &gControlState); renderAI(ai, &gDisplay, &gAssets); // draw screen SDL_RenderPresent(gDisplay.renderer); delayNextFrame(T_getTicks(&fpsCapTimer)); if (gameOver(&p)) { printf("GAME OVER\n"); quit = staticscreen(gDisplay.renderer, "Assets/gameover.bmp"); p.health = 100; } } while (!quit); /* Memory Cleanup */ LL_destroyLinkedList(&playerBulletList); LL_destroyLinkedList(&enemyBulletList); AI_destroyAI(ai); SDL_DestroyTexture(background); freeAssets(&gAssets); closeDisplay(&gDisplay); }