Advertisement
Guest User

Untitled

a guest
Apr 9th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.42 KB | None | 0 0
  1. #include <SDL.h>
  2. #include <SDL_image.h>
  3. #include <SDL_mixer.h>
  4. #include <iostream>
  5. #include "Constants.h"
  6. #include "Texture2D.h"
  7. #include "GameScreenManager.h"
  8. using namespace::std;
  9.  
  10. //Globals
  11. SDL_Window* gWindow = NULL;
  12. GameScreenManager* gameScreenManager;
  13. Uint32 gOldTime;
  14.  
  15. //Function Prototypes
  16. bool InitSDL();
  17. void CloseSDL();
  18. bool Update();
  19. void Render();
  20. void LoadMusic(string path);
  21.  
  22. Mix_Music* gMusic = NULL;
  23. SDL_Renderer* gRenderer = NULL;
  24. //Texture2D* gTexture = NULL;
  25.  
  26. int main(int argc, char* args[])
  27. {
  28.     //Check if SDL was set up correctly
  29.    
  30.     if(InitSDL() == true)
  31.     {
  32.         gameScreenManager = new GameScreenManager(gRenderer, SCREEN_LEVEL1);
  33.         gOldTime = SDL_GetTicks();
  34.    
  35.  
  36.         bool quit = false;
  37.  
  38.  
  39.         while(!quit)
  40.         {
  41.             Render();
  42.             quit = Update();
  43.         }
  44.     }
  45.         LoadMusic("Music/bubble-bobble.mp3");
  46.         if(Mix_PlayingMusic() == 0)
  47.         {
  48.             Mix_PlayMusic(gMusic, -1);
  49.         }
  50.        
  51.  
  52.     //Close Window and free resources
  53.     CloseSDL();
  54.    
  55.     return 0;
  56. }
  57.  
  58. bool InitSDL()
  59. {
  60.     //Setup SDL
  61.     if(SDL_Init(SDL_INIT_VIDEO) < 0)
  62.     {
  63.         cout << "SDL did not start. Error: " << SDL_GetError();
  64.         return false;
  65.     }
  66.     else
  67.     {
  68.         //All good, so attempt to create a window
  69.         gWindow = SDL_CreateWindow("Games Engine Creation",
  70.                                     SDL_WINDOWPOS_UNDEFINED,
  71.                                     SDL_WINDOWPOS_UNDEFINED,
  72.                                     SCREEN_WIDTH,
  73.                                     SCREEN_HEIGHT,
  74.                                     SDL_WINDOW_SHOWN);
  75.        
  76.  
  77.         //Did the window get created?
  78.         if(gWindow == NULL)
  79.         {
  80.             //Nope
  81.             cout << "Window was not created. Error: " << SDL_GetError();
  82.             return false;
  83.         }
  84.  
  85.         gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
  86.    
  87.     if(gRenderer != NULL)
  88.     {
  89.         //Intialise PNG loading
  90.         int imageFlags = IMG_INIT_PNG;
  91.         if(! (IMG_Init(imageFlags) & imageFlags))
  92.         {
  93.             cout << "SDL_Image could not start. Error: " << IMG_GetError();
  94.             return false;
  95.         }
  96.  
  97.         /*Load the background texture
  98.         gTexture = new Texture2D(gRenderer);
  99.         if(!gTexture->LoadFromFile("Images/test.bmp"))
  100.         {
  101.             return false;
  102.         */
  103.        
  104.        
  105.     }
  106.         else
  107.         {
  108.             cout << "Renderer could not start. Error: " << SDL_GetError();
  109.             return false;
  110.         }
  111.    
  112.        
  113.         return true;
  114.     }
  115.  
  116.     if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0)
  117.     {
  118.         cout << "Mixer could not initialise. error: " << Mix_GetError();
  119.         return false;
  120.     }
  121.        
  122. }
  123.  
  124. void CloseSDL()
  125. {
  126.     //Clear up texture
  127.     //gTexture->Free();
  128.  
  129.     //Destory the game screen manager
  130.     delete gameScreenManager;
  131.     gameScreenManager = NULL;
  132.  
  133.     //Release the renderer
  134.     SDL_DestroyRenderer(gRenderer);
  135.     gRenderer = NULL;
  136.    
  137.     //Release the window
  138.     SDL_DestroyWindow(gWindow);
  139.     gWindow = NULL;
  140.  
  141.     //Quit SDL subsystems
  142.     IMG_Quit();
  143.     SDL_Quit();
  144.  
  145.     Mix_FreeMusic(gMusic);
  146.     gMusic = NULL;
  147. }
  148.  
  149. bool Update()
  150. {
  151.     Uint32 newTime = SDL_GetTicks();
  152.  
  153.     //Event Handler
  154.     SDL_Event e;
  155.  
  156.     //Get the events
  157.     SDL_PollEvent(&e);
  158.  
  159.     //Handle any events
  160.     switch(e.type)
  161.     {
  162.     case SDL_QUIT:
  163.         return true;
  164.         break;
  165.     }
  166.  
  167.     gameScreenManager->Update((float)(newTime-gOldTime)/1000.0f, e);
  168.     gOldTime = newTime;
  169.  
  170.     return false;
  171. }
  172.  
  173. void Render()
  174. {
  175.     //Clear the screen
  176.     SDL_SetRenderDrawColor(gRenderer, 0xFF, 0xFF, 0xFF, 0xFF);
  177.     SDL_RenderClear(gRenderer);
  178.  
  179.     gameScreenManager->Render();
  180.    
  181.     //Update Scrren
  182.     SDL_RenderPresent(gRenderer);
  183. }
  184.  
  185. void LoadMusic(string path)
  186. {
  187.     gMusic = Mix_LoadMUS(path.c_str());
  188.  
  189.     if(gMusic == NULL)
  190.     {
  191.         cout << "Failed to load background music! Error: " << Mix_GetError() << endl;
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement