Main.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include "Main.h"
  2. #include <Ogre.h>
  3. #include <OIS.h>
  4. #include "common/FileSystem.h"
  5. #include "common/Logger.h"
  6. #include "AkaoParser.h"
  7. #include "engine/SoundManager.h"
  8. int state;
  9. class DisplayFrameListener : public Ogre::FrameListener, public Ogre::WindowEventListener, public OIS::KeyListener
  10. {
  11. public:
  12. DisplayFrameListener(Ogre::RenderWindow* win):
  13. m_Window(win),
  14. m_InputManager(0),
  15. m_Keyboard(0),
  16. m_Timer(0)
  17. {
  18. using namespace OIS;
  19. Ogre::LogManager::getSingletonPtr()->logMessage("*** Initializing OIS ***");
  20. ParamList pl;
  21. size_t windowHnd = 0;
  22. std::ostringstream windowHndStr;
  23. win->getCustomAttribute("WINDOW", &windowHnd);
  24. windowHndStr << windowHnd;
  25. pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
  26. m_InputManager = InputManager::createInputSystem(pl);
  27. m_Keyboard = static_cast<Keyboard*>(m_InputManager->createInputObject(OIS::OISKeyboard, true));
  28. m_Keyboard->setEventCallback(this);
  29. //Register as a Window listener
  30. Ogre::WindowEventUtilities::addWindowEventListener(m_Window, this);
  31. }
  32. virtual
  33. ~DisplayFrameListener(void)
  34. {
  35. m_InputManager->destroyInputObject(m_Keyboard);
  36. OIS::InputManager::destroyInputSystem(m_InputManager);
  37. //Remove ourself as a Window listener
  38. Ogre::WindowEventUtilities::removeWindowEventListener(m_Window, this);
  39. windowClosed(m_Window);
  40. }
  41. virtual void
  42. windowClosed(Ogre::RenderWindow* rw)
  43. {
  44. state = EXIT;
  45. }
  46. bool
  47. frameStarted(const Ogre::FrameEvent& evt)
  48. {
  49. if (state == EXIT)
  50. {
  51. return false;
  52. }
  53. if (m_Keyboard)
  54. {
  55. m_Keyboard->capture();
  56. }
  57. if (m_Timer >= 0.003)
  58. {
  59. m_Timer = 0;
  60. AKAOPARSER->Update();
  61. }
  62. m_Timer += evt.timeSinceLastFrame;
  63. SOUNDMAN->Update();
  64. return true;
  65. }
  66. bool
  67. keyPressed(const OIS::KeyEvent& e)
  68. {
  69. switch (e.key)
  70. {
  71. case OIS::KC_ESCAPE:
  72. {
  73. state = EXIT;
  74. }
  75. break;
  76. }
  77. return true;
  78. }
  79. bool
  80. keyReleased(const OIS::KeyEvent& e)
  81. {
  82. return true;
  83. }
  84. protected:
  85. Ogre::RenderWindow* m_Window;
  86. OIS::InputManager* m_InputManager;
  87. OIS::Keyboard* m_Keyboard;
  88. float m_Timer;
  89. };
  90. int
  91. main( int argc, char *argv[] )
  92. {
  93. Ogre::Root* root;
  94. Ogre::RenderWindow* window;
  95. root = new Ogre::Root( "", "" );
  96. #ifndef _DEBUG
  97. root->loadPlugin( "RenderSystem_GL.dll" );
  98. #else
  99. root->loadPlugin( "RenderSystem_GL_d.dll" );
  100. #endif
  101. root->setRenderSystem( root->getAvailableRenderers()[ 0 ] );
  102. root->initialise( false );
  103. Ogre::NameValuePairList misc;
  104. misc[ "title" ] = "FFVII Exporter";
  105. window = root->createRenderWindow( "QGearsWindow", 800, 600, false, &misc );
  106. LOGGER = new Logger( "game.log" );
  107. state = GAME;
  108. DisplayFrameListener* frame_listener = new DisplayFrameListener( window );
  109. root->addFrameListener( frame_listener );
  110. Ogre::SceneManager* scene_manager = root->createSceneManager( Ogre::ST_GENERIC, "Scene" );
  111. scene_manager->setAmbientLight( Ogre::ColourValue( 1.0, 1.0, 1.0 ) );
  112. Ogre::Camera* camera = scene_manager->createCamera( "Camera" );
  113. camera->setNearClipDistance( 5 );
  114. Ogre::Viewport* viewport = window->addViewport( camera );
  115. viewport->setBackgroundColour( Ogre::ColourValue( 0, 0, 0 ) );
  116. camera->setAspectRatio( Ogre::Real( viewport->getActualWidth()) / Ogre::Real( viewport->getActualHeight() ) );
  117. SOUNDMAN = new SoundManager();
  118. AKAOPARSER = new AkaoParser();
  119. AKAOPARSER->LoadInstruments( "data/INSTR.ALL", "data/INSTR.DAT" );
  120. if( argc == 2 )
  121. {
  122. AKAOPARSER->PlayMusic( Ogre::String( "data/music/") + argv[ 1 ] );
  123. //AKAOPARSER->DumpSequenceData( Ogre::String( "dump_" ) + argv[ 1 ] + ".txt" );
  124. }
  125. else
  126. {
  127. AKAOPARSER->PlayMusic( "data/music/aeris_theme.snd" );
  128. //AKAOPARSER->DumpSequenceData( "dump_aeris_theme.txt" );
  129. }
  130. Ogre::Root::getSingleton().startRendering();
  131. delete AKAOPARSER;
  132. delete SOUNDMAN;
  133. delete root;
  134. delete frame_listener;
  135. delete LOGGER;
  136. return 0;
  137. }