/* 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; }
//----------------------------------------------------- // 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(); }
// 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; }
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; }
//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); }
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; }
bool KCore::GameRun() { GameFrame(); GameRender(); return true; };
/* 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; }
GameHandler::GameHandler() { gRender = GameRender(); }
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; }