/******************************************************************************** Run this program ********************************************************************************/ void Application::Run() { #if TYPE_OF_VIEW == 3 scene = new CSceneManager(m_window_width, m_window_height); // Use this for 3D gameplay #else scene = new CSceneManager2D(m_window_width, m_window_height); // Use this for 2D gameplay #endif scene->Init(); m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (!glfwWindowShouldClose(m_window) && !IsKeyPressed(VK_ESCAPE)) { // Get the elapsed time m_dElapsedTime = m_timer.getElapsedTime(); m_dAccumulatedTime_ThreadOne += m_dElapsedTime; m_dAccumulatedTime_ThreadTwo += m_dElapsedTime; if (m_dAccumulatedTime_ThreadOne > 0.03) { GetMouseUpdate(); GetKeyboardUpdate(); m_GSM->HandleEvents(); m_GSM->Update(m_dElapsedTime); /* scene->Update(m_dElapsedTime); */ m_dAccumulatedTime_ThreadOne = 0.0; } if (m_dAccumulatedTime_ThreadTwo > 1.0) { //UpdateAI(); m_dAccumulatedTime_ThreadTwo = 0.0; } // Render the scene m_GSM->Draw(); //scene->Render(); //Swap buffers glfwSwapBuffers(m_window); //Get and organize events, like keyboard and mouse input, window resizing, etc... glfwPollEvents(); m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. } //Check if the ESC key had been pressed or if the window had been closed // Delete the scene m_GSM->Cleanup(); //scene->Exit(); if (scene) { delete scene; scene = NULL; } }
void Application::Run() { //Main Loop scene = new SceneText(); scene->Init(); m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (!glfwWindowShouldClose(m_window) && !IsKeyPressed(VK_ESCAPE)) { //Get the elapsed time m_dElapsedTime = m_timer.getElapsedTime(); m_dAccumulatedTime_ThreadOne += m_dElapsedTime; m_dAccumulatedTime_ThreadTwo += m_dElapsedTime; if (m_dAccumulatedTime_ThreadOne > 0.01) { GetMouseUpdate(); GetKeyboardUpdate(); scene->Update(m_dElapsedTime); m_dAccumulatedTime_ThreadOne = 0.0; } if (m_dAccumulatedTime_ThreadTwo > 1.0) { //UpdateAI(); m_dAccumulatedTime_ThreadTwo = 0.0; } // Render the scene scene->Render(); //Swap buffers glfwSwapBuffers(m_window); //Get and organize events, like keyboard and mouse input, window resizing, etc... glfwPollEvents(); m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. if (SceneText::bReset) { scene->Exit(); delete scene; scene = new SceneText(); scene->Init(); } } //Check if the ESC key had been pressed or if the window had been closed scene->Exit(); delete scene; }
/******************************************************************************** Run this program ********************************************************************************/ void Application::Run() { m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (theGSM->Running() && !glfwWindowShouldClose(m_window)) { // Get the elapsed time m_dElapsedTime = m_timer.getElapsedTime(); m_dAccumulatedTime_ThreadOne += m_dElapsedTime; m_dAccumulatedTime_ThreadTwo += m_dElapsedTime; if (m_dAccumulatedTime_ThreadOne > 0.03) { // Get inputs GetMouseUpdate(); GetKeyboardUpdate(); // Update the GSM theGSM->HandleEvents(); theGSM->Update(m_dElapsedTime); m_dAccumulatedTime_ThreadOne = 0.0; } if (m_dAccumulatedTime_ThreadTwo > 1.0) { //UpdateAI(); m_dAccumulatedTime_ThreadTwo = 0.0; } // Render the scene theGSM->Draw(); //Swap buffers glfwSwapBuffers(m_window); //Get and organize events, like keyboard and mouse input, window resizing, etc... glfwPollEvents(); m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. } //Check if the ESC key had been pressed or if the window had been closed // Clean up the GSM theGSM->Cleanup(); }
void Application::Run() { //Main Loop scene = new SceneStealth(); scene->Init(); m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (!glfwWindowShouldClose(m_window) && !IsKeyPressed(VK_ESCAPE) && !scene->GetExit()) { scene->Update(m_timer.getElapsedTime()); scene->Render(); //Swap buffers glfwSwapBuffers(m_window); //Get and organize events, like keyboard and mouse input, window resizing, etc... GetMouseUpdate(); //Update mouse GetKeyboardUpdate(); glfwPollEvents(); m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. } //Check if the ESC key had been pressed or if the window had been closed scene->Exit(); delete scene; }
void Controller::Run() { //Main Loop m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (!glfwWindowShouldClose(view->getWindow()) && !IsKeyPressed(VK_ESCAPE)) { //get the elapsed time m_dElapsedTime = m_timer.getElapsedTime(); m_dAccumulatedTime_thread1 += m_dElapsedTime; m_dAccumulatedTime_thread2 += m_dElapsedTime; /* fps */ fps = (float)(1.f / m_dElapsedTime); /* twin threaded approach */ if(m_dAccumulatedTime_thread1 > 0.01) //update: update fps is _dAccumulatedTime_thread1 > fps { /** controller update **/ GetMouseUpdate(); getKeyboardUpdate(); /** model update **/ if (stateManager->GetState() == StateManager::GAME) { modelList[Model::getCurrentModel()]->Update(m_dElapsedTime, myKeys, GetMousePos(), stateManager->GetState()); } else if (stateManager->GetState() == StateManager::TRANSITION) { stateManager->UpdateTransitionTime(m_dElapsedTime); modelList[Model::getCurrentModel()]->Update(m_dElapsedTime, myKeys, GetMousePos(), stateManager->GetState()); } else { modelScreen->Update(m_dElapsedTime, myKeys, GetMousePos(), stateManager->GetState()); } modelTransitioning(); m_dAccumulatedTime_thread1 = 0.0; } if(m_dAccumulatedTime_thread2 > 0.003) //render: render fps is _dAccumulatedTime_thread1 > fps { /** View update(rendering) **/ view->Render(fps); //or switch to pause screen m_dAccumulatedTime_thread2 = 0.0; } if(myKeys[KEY_LMOUSE] || myKeys[KEY_RMOUSE]) UpdateMouseClick(); //Swap buffers glfwSwapBuffers(view->getWindow()); //Get and organize events, like keyboard and mouse input, window resizing, etc... glfwPollEvents(); m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. } //Check if the ESC key had been pressed or if the window had been closed view->Exit(); for(int i = 0; i < Model::getModelCount(); ++i) { //model[i].Exit(); } }
/**************************************************************************** REMARKS: Obtains and pumps mouse and joystick messages into our event queue. ****************************************************************************/ static void _EVT_pumpMessages(void) { uchar buttons; uchar oldButtons; int dx, dy, dz; event_t evt; /* Poll mouse events */ while (GetMouseUpdate (&buttons, &oldButtons, &dx, &dy, &dz)) { EVT.mx += dx; EVT.my += dy; if (EVT.mx < 0) EVT.mx = 0; if (EVT.my < 0) EVT.my = 0; if (EVT.mx > range_x) EVT.mx = range_x; if (EVT.my > range_y) EVT.my = range_y; evt.when = _EVT_getTicks(); evt.where_x = EVT.mx; evt.where_y = EVT.my; evt.relative_x = dx; evt.relative_y = dy; evt.modifiers = _PM_modifiers; if (buttons & MOUSE_RBUTTON) evt.modifiers |= EVT_RIGHTBUT; if (buttons & MOUSE_MBUTTON) evt.modifiers |= EVT_MIDDLEBUT; if (buttons & MOUSE_LBUTTON) evt.modifiers |= EVT_LEFTBUT; /* Left click events */ if ((buttons & MOUSE_LBUTTON) != (oldButtons & MOUSE_LBUTTON)) { evt.what = buttons & MOUSE_LBUTTON ? EVT_MOUSEDOWN : EVT_MOUSEUP ; evt.message = EVT_LEFTBMASK; EVT.oldMove = -1; if (EVT.count < EVENTQSIZE) addEvent(&evt); } /* Right click events */ if ((buttons & MOUSE_RBUTTON) != (oldButtons & MOUSE_RBUTTON)) { evt.what = buttons & MOUSE_RBUTTON ? EVT_MOUSEDOWN : EVT_MOUSEUP ; evt.message = EVT_RIGHTBMASK; EVT.oldMove = -1; if (EVT.count < EVENTQSIZE) addEvent(&evt); } /* Middle click events */ if ((buttons & MOUSE_MBUTTON) != (oldButtons & MOUSE_MBUTTON)) { evt.what = buttons & MOUSE_MBUTTON ? EVT_MOUSEDOWN : EVT_MOUSEUP ; evt.message = EVT_MIDDLEBMASK; EVT.oldMove = -1; if (EVT.count < EVENTQSIZE) addEvent(&evt); } /* Mouse movement event */ if (dx || dy) { evt.what = EVT_MOUSEMOVE; evt.message = 0; if (EVT.oldMove != -1) { /* Modify existing movement event */ EVT.evtq[EVT.oldMove].where_x = evt.where_x; EVT.evtq[EVT.oldMove].where_y = evt.where_y; } else { /* Save id of this movement event */ EVT.oldMove = EVT.freeHead; if (EVT.count < EVENTQSIZE) addEvent(&evt); } } /* Mouse wheel event */ if (dz) { evt.what = EVT_MOUSEWHEEL; evt.message = MW_HORZWHEEL ; if (dz > 0) evt.message |= EVT_WHEELDIRMASK ; else dz = -dz ; evt.message |= dz & 0x0f ; if (EVT.count < EVENTQSIZE) addEvent(&evt); } } /* Poll joystick events using the 1.x joystick driver API in the 2.2 kernels */ if (js_version & ~0xffff) { static struct js_event js; /* Read joystick axis 0 */ evt.when = 0; evt.modifiers = _PM_modifiers; if (joystick0_fd && dataReady(joystick0_fd) && read(joystick0_fd, &js, sizeof(js)) == sizeof(js)) { if (js.type & JS_EVENT_BUTTON) { if (js.number < 2) { /* Only 2 buttons for now :( */ buts0[js.number] = js.value; evt.what = EVT_JOYCLICK; makeJoyEvent(&evt); if (EVT.count < EVENTQSIZE) addEvent(&evt); } } else if (js.type & JS_EVENT_AXIS) { axis0[js.number] = scaleJoyAxis(js.value,js.number); evt.what = EVT_JOYMOVE; if (EVT.oldJoyMove != -1) { makeJoyEvent(&EVT.evtq[EVT.oldJoyMove]); } else if (EVT.count < EVENTQSIZE) { EVT.oldJoyMove = EVT.freeHead; makeJoyEvent(&evt); addEvent(&evt); } } } /* Read joystick axis 1 */ if (joystick1_fd && dataReady(joystick1_fd) && read(joystick1_fd, &js, sizeof(js))==sizeof(js)) { if (js.type & JS_EVENT_BUTTON) { if (js.number < 2) { /* Only 2 buttons for now :( */ buts1[js.number] = js.value; evt.what = EVT_JOYCLICK; makeJoyEvent(&evt); if (EVT.count < EVENTQSIZE) addEvent(&evt); } } else if (js.type & JS_EVENT_AXIS) { axis1[js.number] = scaleJoyAxis(js.value,js.number<<2); evt.what = EVT_JOYMOVE; if (EVT.oldJoyMove != -1) { makeJoyEvent(&EVT.evtq[EVT.oldJoyMove]); } else if (EVT.count < EVENTQSIZE) { EVT.oldJoyMove = EVT.freeHead; makeJoyEvent(&evt); addEvent(&evt); } } } } }