Пример #1
0
/********************************************************************************
 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;
	}
}
Пример #2
0
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;
}
Пример #3
0
/********************************************************************************
 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();
}
Пример #4
0
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;
}
Пример #5
0
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();
	}
}
Пример #6
0
/****************************************************************************
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);
                    }
                }
            }
        }
}