Exemplo n.º 1
0
bool CALL HGE_Impl::System_Start()
{
	//Tu.NguyenHoang Gameloop here	
	if(!procFrameFunc) {
		_PostError("System_Start: No frame function defined");
		return false;
	}
	bActive=true;
	// MAIN LOOP
	bool done = false;
	while (!done) {
		SDL_Event event;
		while (SDL_PollEvent(&event)) {	
			//ProcessInput : Will implement later
			done = ProcessInput(&event);
			if (done)
				break;
		}
		//Process FrameRate
		dt = SDL_GetTicks() - t0;				
		if (dt >= nFixedDelta)
		{
			fDeltaTime = dt / 1000.0f;
			if (fDeltaTime > 0.2f){
				if (nFixedDelta)
					fDeltaTime = nFixedDelta / 1000.0f;
				else
					fDeltaTime = 0.01f;
			}
			fTime += fDeltaTime;
			t0 = SDL_GetTicks();
			if (t0 - t0fps < 1000)
				cfps++;
			else {
				nFPS = cfps;
				cfps = 0;
				t0fps = t0;
			}
			//UpdateFrame
			if (procFrameFunc()){
				break;
			}
			_ClearQueue();
			//Render
			if (procRenderFunc)
				procRenderFunc();
			//_ClearQueue();
		}
		else{
			if (nFixedDelta && dt + 3 < nFixedDelta)
				SDL_Delay(1);
		}
	}

	_ClearQueue();

	bActive=false;

	return true;
}
Exemplo n.º 2
0
bool OMG_Impl::System_Start()
	{
	System_Log("Trying to start!");

	//timer
	timer->Start();
	t_last = timer->Get();
	t_new = timer->Get();

	//main loop
	for(;;)
		{
		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
			{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
			}
		if(active)
			{
			if (done)
				break;
			t_new = timer->Get();
			if(t_new - t_last > t_step)
				{
				if (!DrawGLScene())
					done = TRUE;

				if(procFrameFunc)
					if (procFrameFunc())
						break;

				_Input_Update();

				SwapBuffers(hDC);
				t_last = t_new;
				}

			else
				Sleep(0);
			}
			else
				Sleep(1);
	}
	KillGLWindow();
	return true;
	}
Exemplo n.º 3
0
bool CALL HGE_Impl::System_Start()
{
	MSG		msg;

	if(!hwnd)
	{
		_PostError("System_Start: System_Initiate wasn't called");
		return false;
	}

	if(!procFrameFunc) {
		_PostError("System_Start: No frame function defined");
		return false;
	}

	bActive=true;

	// MAIN LOOP

	for(;;)
	{
		
		// Process window messages if not in "child mode"
		// (if in "child mode" the parent application will do this for us)

		if(!hwndParent)
		{
			if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
			{ 
				if (msg.message == WM_QUIT)	break;
				// TranslateMessage(&msg);
				DispatchMessage(&msg);
				continue;
			}
		}

		// Check if mouse is over HGE window for Input_IsMouseOver

		_UpdateMouse();

		// If HGE window is focused or we have the "don't suspend" state - process the main loop

		if(bActive || bDontSuspend)
		{
			// Ensure we have at least 1ms time step
			// to not confuse user's code with 0

			do { dt=timeGetTime() - t0; } while(dt < 1);

			// If we reached the time for the next frame
			// or we just run in unlimited FPS mode, then
			// do the stuff

			if(dt >= nFixedDelta)
			{
				// fDeltaTime = time step in seconds returned by Timer_GetDelta

				fDeltaTime=dt/1000.0f;

				// Cap too large time steps usually caused by lost focus to avoid jerks

				if(fDeltaTime > 0.2f)
				{
					fDeltaTime = nFixedDelta ? nFixedDelta/1000.0f : 0.01f;
				}

				// Update time counter returned Timer_GetTime

				fTime += fDeltaTime;

				// Store current time for the next frame
				// and count FPS

				t0=timeGetTime();
				if(t0-t0fps <= 1000) cfps++;
				else
				{
					nFPS=cfps; cfps=0; t0fps=t0;
					_UpdatePowerStatus();
				}

				// Do user's stuff

				if(procFrameFunc()) break;
				if(procRenderFunc) procRenderFunc();
				
				// If if "child mode" - return after processing single frame

				if(hwndParent) break;

				// Clean up input events that were generated by
				// WindowProc and weren't handled by user's code

				_ClearQueue();

				// If we use VSYNC - we could afford a little
				// sleep to lower CPU usage

				// if(!bWindowed && nHGEFPS==HGEFPS_VSYNC) Sleep(1);
			}

			// If we have a fixed frame rate and the time
			// for the next frame isn't too close, sleep a bit

			else
			{
				if(nFixedDelta && dt+3 < nFixedDelta) Sleep(1);
			}
		}

		// If main loop is suspended - just sleep a bit
		// (though not too much to allow instant window
		// redraw if requested by OS)

		else Sleep(1);
	}

	_ClearQueue();

	bActive=false;

	return true;
}
Exemplo n.º 4
0
bool CALL HGE_Impl::System_Start()
{
	MSG		msg;
	POINT	pt;
	RECT	rc;

	if(!hwnd)
	{
		_PostError("System_Start: System_Initiate wasn't called");
		return false;
	}

	if(!procFrameFunc) {
		_PostError("System_Start: No frame function defined");
		return false;
	}

	bActive=true;

	for(;;)
	{
		
		if(!hwndParent)
		{
			if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
			{ 
				if (msg.message == WM_QUIT)	break;
				// TranslateMessage(&msg);
				DispatchMessage(&msg);
				continue;
			}
		}

		GetCursorPos(&pt);
		GetClientRect(hwnd, &rc);
		MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
		if(bCaptured || (PtInRect(&rc, pt) && WindowFromPoint(pt)==hwnd)) bMouseOver=true;
		else bMouseOver=false;

		if(bActive || bDontSuspend) {
			do { dt=timeGetTime() - t0; } while(dt < 1);
			if(dt >= nFixedDelta)
			{
				fDeltaTime=dt/1000.0f;
				if(fDeltaTime > 0.2f)
				{
					if(nFixedDelta) fDeltaTime=nFixedDelta/1000.0f;
					else fDeltaTime=0.01f;
				}
				fTime+=fDeltaTime;

				t0=timeGetTime();
				if(t0-t0fps < 1000) cfps++;
				else {nFPS=cfps; cfps=0; t0fps=t0;}
				if(procFrameFunc()) break;
				if(procRenderFunc) procRenderFunc();
				if(hwndParent) break;
				_ClearQueue();
				if(!bWindowed && nHGEFPS==HGEFPS_VSYNC) Sleep(1);
			}
			else { if(nFixedDelta && dt+3 < nFixedDelta) Sleep(1); }
		}
		else Sleep(1);
	}
	_ClearQueue();
	bActive=false;
	return true;
}