Exemple #1
0
/*
Main loop.
1) Stores key presses, and calls call-back functions for press/release if necessary.
2) Calls GameAction
3) Calls GameRender
*/
int BaseEngine::MainLoop(void)
{
    SDL_Event event;
	int iKeyCode;

	// Main loop: loop until told not to
	while (m_iExitWithCode==-1)
	{
		// Render stuff
		m_iTick = SDL_GetTicks();

		// Poll for events, and handle the ones we care about.
		
		while (SDL_PollEvent(&event)) 
		{
			switch (event.type) 
			{
			case SDL_KEYDOWN:
				//printf("Key down: %d, '%c'\n", SymbolToKeycode(event.key.keysym.sym), event.key.keysym.sym);
				m_pKeyStatus[SymbolToKeycode(event.key.keysym.sym)] = true;
				KeyDown(event.key.keysym.sym);
				break;

			case SDL_KEYUP:                  
				//printf("Key up: %d, '%c'\n", SymbolToKeycode(event.key.keysym.sym), event.key.keysym.sym);
				m_pKeyStatus[SymbolToKeycode(event.key.keysym.sym)] = false;
				KeyUp(event.key.keysym.sym);
				break;

			case SDL_MOUSEMOTION:
				m_iCurrentMouseX = event.motion.x;
				m_iCurrentMouseY = event.motion.y;
				MouseMoved( event.motion.x, event.motion.y );
				break;

			case SDL_MOUSEBUTTONDOWN:
				m_iMouseXClickedDown = event.button.x;
				m_iMouseYClickedDown = event.button.y;
				MouseDown( event.button.button, event.button.x, event.button.y );
				break;

			case SDL_MOUSEBUTTONUP:
				m_iMouseXClickedUp = event.button.x;
				m_iMouseYClickedUp = event.button.y;
				MouseUp( event.button.button, event.button.x, event.button.y );
				break;

			case SDL_QUIT:
				return 0;
			}
		}

		// Do any updates for movements
		GameAction();

		// Render the screen
		GameRender();
	}
	return 0;
}
Exemple #2
0
//-----------------------------------------------------
// displays the objects
//-----------------------------------------------------
void Display()
{
	//--------------------------------------------------------------------------
	// render stuff
	//--------------------------------------------------------------------------
	glClearColor(0.2f, 0.2f, 0.2f, 0.2f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	float aspect = 	width / (float) height;


	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0, dbg_world_size * aspect, 0, dbg_world_size, -100, 100);
	
	//-----------------------------------------------------------------
	// Setup the model view matrix
	//-----------------------------------------------------------------
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	
	float fx = (       (mouse_x / (float) width )) * dbg_world_size * aspect;
	float fy = (1.0f - (mouse_y / (float) height)) * dbg_world_size;

	GameMouse(fx, fy, mouse_b);

	GameUpdate(1.0f / 60.0f);
	
	GameRender();

	glutSwapBuffers();
}
Exemple #3
0
// main function
int _tmain(int argc, _TCHAR* argv[])
{  

	PlayerSetup(Juego);

	if(GameInit(Juego) <0)
		return -1;

	while(Juego->EstadoActual != Terminado)
	{
		
		if(GameUpdate(Juego) < 0)
			Juego->EstadoActual = EnError;

		if(GameRender(Juego) < 0)
			Juego->EstadoActual = EnError;
		Sleep(16);
	}

	
	GameDeInit(Juego);


	return 0;
}
Exemple #4
0
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
{
	_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
	//_CrtSetBreakAlloc(196);
	FrameAnimationManager::Init();
	GameInit(512,512);
	if (!EnvInit(GameGetWidth(), GameGetHeight(), GameGetTitle().c_str()))
	{
		MessageBox(NULL, "Init Failed", "Error", MB_OK);
		return 1;
	}
	TextureManager::Init();
	AtlasManager::Init();
	SpriteBatch::Init();
	Time::Start();
	Input::Init();
	EnvSetExitSizeMoveCB(OnExitSizeMove);
	while (EnvHandleSysMessage())
	{
		Time::SampleTime();
		Input::UpdateInput();
		if (!EnvGetProcessEnable()) continue;
		float dt = Time::GetDeltaTime();
		GameProcess(dt);
		int frames = Frame::GetFrameByTime(dt);
		char buf[100] = "";
		sprintf(buf, "frames = %d\n", frames);
		OutputDebugString(buf);
		for(int i = 0; i < frames; ++i)
			GameProcessByFrame();
		GameRender();
	}
	FrameAnimationManager::Uninit();
	Input::Uninit();
	AtlasManager::Uninit();
	TextureManager::Clean();
	SpriteBatch::Uninit();
	EnvUninit();
	GameUninit();
	//_CrtDumpMemoryLeaks();
    return 0;
}
Exemple #5
0
//Check the user input and performs the rendering
void GameLoop()
{
	int t1, t2;
	t1 = glutGet(GLUT_ELAPSED_TIME);

	if (glutGet(GLUT_ELAPSED_TIME) - earthquakeTime > 3000){
		earthquake = false;
	}
	//Process Input
	if (input)
	{
		Player.Update(keys, mouseX, mouseY);
		glutWarpPointer(glutGet(GLUT_WINDOW_X) + glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_Y) + glutGet(GLUT_WINDOW_HEIGHT) / 2);
		input = false;
	}

	//Do The Rendering
	GameRender();

	// Frame rate sync: 1000/20 = 50 fps
	do { t2 = glutGet(GLUT_ELAPSED_TIME); 
	} while (t2 - t1 < 20);	
}
Exemple #6
0
int main(int argc, char *argv[])
{
	
	SDL_Event event;
	bool done = false;
	float lastFrameTicks = 0.0f;
	float ball_angle = 0.0f;
	srand(time(NULL));

	Matrix projectionMatrix;
	Matrix viewMatrix;
	Setup(&displayWindow, &projectionMatrix);

	std::vector<Entity*> entities;
	std::vector<DrawSpriteText> text;
	std::vector<Entity*> enemy_bullets;
	std::vector<DrawSpriteText> title_text;

	GLuint space_sheet = LoadTexture("sheet.png", GL_RGBA);
	GLuint fontsheet = LoadTexture("font1.png", GL_RGBA);
	GLuint bg = LoadTexture("darkPurple.png", GL_RGB);

	Entity* newEnt;
	for (size_t x = 0; x < 11; ++x){
		for (size_t y = 0; y < 4; ++y){
			
			switch (y){
			case 0:
				newEnt = new Entity(space_sheet, 1024.0f, 423.0f, 728.0f, 93.0f, 84.0f, 0.5f);

				break;
			case 1:
				newEnt = new Entity(space_sheet, 1024.0f, 425.0f, 468.0f, 93.0f, 84.0f, 0.5f);
				break;
			default:
				newEnt = new Entity(space_sheet, 1024.0f, 425.0f, 384.0f, 93.0f, 84.0f, 0.5f);
				break;
			}
			
			newEnt->x = (-6.22 + newEnt->width/2 * 11) + (x * (newEnt->width + 0.15));
			newEnt->y = ((3.5 - newEnt->height * 2) - newEnt->height/2 ) - (y * (newEnt->height + 0.2));
			entities.push_back(newEnt);
		}
	}

	for (size_t i = 0; i < entities.size(); ++i){
		points.push_back(std::make_pair(entities[i]->x, entities[i]->y));
	}
	
	Entity player(space_sheet, 1024.0f, 211.0f, 941.0f, 99.0f, 75.0f, 0.5);
	player.y = -3.5 + 0.1 + player.height/2;

	Entity player_bullet(space_sheet, 1024.0f, 843.0f, 789.0f, 13.0f, 57.0f, 0.5);
	player_bullet.x = 7.0;
	
	for (size_t i = 0; i < ENEMY_BULLETS; ++i){
		newEnt = new Entity(space_sheet, 1024.0f, 843.0f, 789.0f, 13.0f, 57.0f, 0.5);
		newEnt->x = 7.0;
		enemy_bullets.push_back(newEnt);
	}

	Entity explosion(space_sheet, 1024.0f, 737.0f, 613.0f, 37.0f, 37.0f, 0.5);
	explosion.x = 7.0;

	DrawSpriteText Life(fontsheet, "LIFE", 0.5, 0);
	Life.y = 3.0f;
	Life.x = 1.0f;
	text.push_back(Life);

	for (size_t i = 0; i < MAX_LIVES; ++i){
		newEnt = new Entity(space_sheet, 1024.0f, 211.0f, 941.0f, 99.0f, 75.0f, 0.5);
		newEnt->y = 3.0f;
		newEnt->x = 1.2f + newEnt->width*3 + ((newEnt->width + 0.1)*i);
		entities.push_back(newEnt);
	}

	DrawSpriteText Title(fontsheet, "Press Enter to Start", 0.5, 0);
	Title.x = -4.7;
	title_text.push_back(Title);

	ShaderProgram program(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured.glsl");

	glUseProgram(program.programID);
	
	while (!done) {
		
		float ticks = (float)SDL_GetTicks() / 1000.0f;
		float elapsed = ticks - lastFrameTicks;
		lastFrameTicks = ticks;
		

		float fixedElapsed = elapsed;
		program.setProjectionMatrix(projectionMatrix);
		program.setViewMatrix(viewMatrix);

		switch (state){
		case(STATE_TITLE) :
			TitleProcessEvents(&event,&done);
			TitleRender(&program,title_text);
			break;
		case(STATE_GAME):
			GameProcessEvents(&event, &done, elapsed, entities, player_bullet, player);
			if (fixedElapsed > FIXED_TIMESTEP * MAX_TIMESTEPS){
				fixedElapsed = FIXED_TIMESTEP * MAX_TIMESTEPS;
			}
			while (fixedElapsed >= FIXED_TIMESTEP){
				fixedElapsed -= FIXED_TIMESTEP;
				GameUpdate(FIXED_TIMESTEP, entities, enemy_bullets, player_bullet, explosion, player);
			}
			GameUpdate(fixedElapsed, entities, enemy_bullets, player_bullet, explosion, player);
			GameRender(&program, entities, enemy_bullets, text, player_bullet, explosion, player);
			break;
		}
		
	}
	for (size_t i = 0; i < entities.size(); ++i){
		delete entities[i];
	}

	SDL_Quit();
	return 0;
}
Exemple #7
0
bool KCore::GameRun()
{
	GameFrame();
	GameRender();
	return true;
};
Exemple #8
0
/*
Main loop.
1) Stores key presses, and calls call-back functions for press/release if necessary.
2) Calls GameAction
3) Calls GameRender
*/
int BaseEngine::MainLoop(void)
{
    SDL_Event event;
	int iKeyCode;

	// Main loop: loop until told not to
	while (m_iExitWithCode==-1)
	{
		// Render stuff
		m_iTick = SDL_GetTicks();

		// Poll for events, and handle the ones we care about.
		while (SDL_PollEvent(&event)) 
		{
			switch (event.type) 
			{
			case SDL_KEYDOWN:
				iKeyCode = event.key.keysym.sym;
				if ( (iKeyCode >= SDLK_FIRST) && (iKeyCode <= SDLK_LAST) )
					m_pKeyStatus[iKeyCode-SDLK_FIRST] = 1;
				KeyDown(iKeyCode);
				break;

			case SDL_KEYUP:                  
				iKeyCode = event.key.keysym.sym;
				if ( (iKeyCode >= SDLK_FIRST) && (iKeyCode <= SDLK_LAST) )
				{
					m_pKeyStatus[iKeyCode-SDLK_FIRST] = 0;
				}
				KeyUp(iKeyCode);
				break;

			case SDL_MOUSEMOTION:
				m_iCurrentMouseX = event.motion.x;
				m_iCurrentMouseY = event.motion.y;
				MouseMoved( event.motion.x, event.motion.y );
				break;

			case SDL_MOUSEBUTTONDOWN:
				m_iMouseXClickedDown = event.button.x;
				m_iMouseYClickedDown = event.button.y;
				MouseDown( event.button.button, event.button.x, event.button.y );
				break;

			case SDL_MOUSEBUTTONUP:
				m_iMouseXClickedUp = event.button.x;
				m_iMouseYClickedUp = event.button.y;
				MouseUp( event.button.button, event.button.x, event.button.y );
				break;

			case SDL_QUIT:
				return 0;
			}
		}

		// Do any updates for movements
		GameAction();

		// Render the screen
		GameRender();
	}
	return 0;
}
Exemple #9
0
GameHandler::GameHandler() {
	gRender = GameRender();
}
Exemple #10
0
int main( int argc, char* argv[] )
{
    if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
        return -1;
    if( TTF_Init() < 0 )
        return -1;
    
    SDL_Window* window = SDL_CreateWindow( WINDOW_TITLE,
                                           WINDOW_X, WINDOW_Y,
                                           WINDOW_W, WINDOW_H,
                                           SDL_WINDOW_OPENGL );

    if( window )
    {
        SDL_GLContext context = SDL_GL_CreateContext( window );
        if( context )
        {
            glewExperimental = GL_TRUE;
            if( glewInit() != GLEW_OK )
                return -1;
            
            Memory memory;
            memory.size = GAME_MEMORY_POOL;
            memory.pointer = malloc( memory.size );

            Input newInput = {}, oldInput = {};

            const real64_t dt = GAME_DT;
            real64_t accumulator = 0.0;
            uint32_t ticks = SDL_GetTicks();
            
            bool32_t running = GameInit( &memory );
            while( running )
            {
                uint32_t curTicks = SDL_GetTicks();
                uint32_t frametime = curTicks - ticks;
                ticks = curTicks;

                accumulator += (real64_t)frametime / 1000.0;

                while( accumulator > dt )
                {
                    oldInput = newInput;
                    
                    SDL_Event e;
                    while( SDL_PollEvent( &e ) )
                    {
                        if( e.type == SDL_QUIT )
                            running = false;
                        else if( e.type == SDL_KEYDOWN )
                        {
                            if( e.key.keysym.sym == SDLK_ESCAPE )
                                running = false;
                            else if( e.key.keysym.sym == SDLK_SPACE )
                                newInput.keys[KEY_SPACE] = true;
                            else if( e.key.keysym.sym == SDLK_RETURN )
                                newInput.keys[KEY_ENTER] = true;
                        }
                        else if( e.type == SDL_KEYUP )
                        {
                            if( e.key.keysym.sym == SDLK_SPACE )
                                newInput.keys[KEY_SPACE] = false;
                            else if( e.key.keysym.sym == SDLK_RETURN )
                                newInput.keys[KEY_ENTER] = false;
                        }
                        else if( e.type == SDL_MOUSEBUTTONDOWN )
                        {
                            if( e.button.button == SDL_BUTTON_LEFT )
                                newInput.buttons[BUTTON_LEFT] = true;
                            else if( e.button.button == SDL_BUTTON_RIGHT )
                                newInput.buttons[BUTTON_RIGHT] = true;
                        }
                        else if( e.type == SDL_MOUSEBUTTONUP )
                        {
                            if( e.button.button == SDL_BUTTON_LEFT )
                                newInput.buttons[BUTTON_LEFT] = false;
                            else if( e.button.button == SDL_BUTTON_RIGHT )
                                newInput.buttons[BUTTON_RIGHT] = false;
                        }
                        else if( e.type == SDL_MOUSEMOTION )
                        {
                            newInput.mousePosition.x = e.motion.x;
                            newInput.mousePosition.y = e.motion.y;
                            newInput.mouseDelta.x = e.motion.xrel;
                            newInput.mouseDelta.y = e.motion.yrel;
                        }
                    }

                    if( !GameUpdate( &memory, &newInput, &oldInput, dt ) )
                        running = false;

                    accumulator -= dt;
                }

                GameRender( &memory );
                SDL_GL_SwapWindow( window );
            }
        }

        SDL_GL_DeleteContext( context );
    }

    TTF_Quit();
    
    SDL_DestroyWindow( window );
    SDL_Quit();

    return 0;
}