Пример #1
0
int main(int argc, char *argv[])
{
   if( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == 1 )
      return -1;

   const SDL_VideoInfo *video_info = SDL_GetVideoInfo();
   if(video_info == NULL)
      return -1;

   atexit(SDL_Quit);

   int video_flags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE | SDL_RESIZABLE;

   if(video_info->hw_available)
      video_flags |= SDL_HWSURFACE;
   else
      video_flags |= SDL_SWSURFACE;

   if(video_info->blit_hw)
      video_flags |= SDL_HWACCEL;

   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

   SDL_SetVideoMode(screen_width, screen_height, screen_bpp, video_flags);

   graphics->initialize(screen_width, screen_height);

   Configuration configuration("data/config.xml");
   configuration.read();

   Input input;
   input.addPlayer(configuration.getConfigKeys(true), configuration.getConfigDevice(true));
   input.addPlayer(configuration.getConfigKeys(false), configuration.getConfigDevice(false));

   PlayerAgent player;
   player.initialize("data/ryu/ryu.xml", "data/ryu/moves.xml", true);

   PlayerAgent player2;
   player2.initialize("data/ryu/ryu.xml","data/ryu/moves.xml",  false);

   player.getPlayer()->setOpponent(player2.getPlayer());
   player2.getPlayer()->setOpponent(player.getPlayer());

   Sprite background;
   GLuint texture = texture_manager->addTexture("data/background.png", false);
   background.setTexture(texture,200,100);

   PlayerBridge bridge;
   bridge.initialize(player.getPlayer(), player2.getPlayer());

   object_manager->add("0", player.getPlayer());
   object_manager->add("1", player2.getPlayer());


   while(!input.quitGame())
   {  
      float game_time;

      if(updateGame(game_time))
      {
         SDL_Event event = input.poll();
 
         if(event.type == SDL_VIDEORESIZE)
         {
            SDL_SetVideoMode(event.resize.w, event.resize.h, screen_bpp, video_flags);
            graphics->resizeWindow(event.resize.w, event.resize.h);
         }

         bool *keys = input.getKeys(0);
         player.update(keys);

         bool *keys2 = input.getKeys(1);
         player2.update(keys2);

         string key = object_manager->first();
         while(key != "")
         {
            bool done = false;

            if(key != "0" && key != "1")
               done = object_manager->get(key)->update();

            if(done)
               object_manager->remove(key);

            key = object_manager->next();
         }

         //draw
         glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // Clear color and depth buffer

         glLoadIdentity(); // Reset orientation
         glTranslatef(-50.0f, -50.0f, -120.0f);

         bridge.update();
         background.draw(50,50,1, false);

         list<Player*> objects = object_manager->getSortedList();

         for(list<Player*>::iterator i = objects.begin(); i != objects.end(); i++)
            (*i)->draw();

         SDL_GL_SwapBuffers();

         game_time = getGameTime();
      }
   }
}