int SDLWin::Run() { WM->CreateSDLWindow(); // Initialize SDL WM->InitOpenGL(); // Initialize OpenGL Game->InitResources(); Game->Pause(); // Switch to Menu Mode WM->GetRenderer()->Init(); // Initialize Renderer InitGeometry(); // Create Menus InitTextures(); // Initialize Menu Textures WM->GetRenderer()->To2D(); // Switch to 2D Rendering SDL_Event Event; // Create an event variable for catching events that SDL sends while(WM->IsRunning()) // Main Loop starts here { if(SDL_PollEvent(&Event)) { GEM->ProcessEvent(&Event); // Send Events to the 'Events' function for processing } if(WM->IsActive()) { Loop(); // Game loop processing Render(); // Draw to the screen _CrtCheckMemory( ); } SDL_Delay(TimeLeft()); // Limit the frame rate } Cleanup(); // Once everything is done, make sure to clean up all loose ends return 1; // Return 1 so that we know everything went fine }
int BaseSpaceShip::Animate() { if( _AnimationFrame > 6 ) _AnimationFrame = 0; if(TimeLeft() == 0 ) ++_AnimationFrame; return _AnimationFrame; }
void BlackMarketMgr::BuildBlackMarketAuctionsPacket(WorldPacket& data, uint32 guidLow) { uint32 count = 0; data << uint32(time(NULL)); for (auto const &kvPair : m_bmAuctionsMap) if (kvPair.second->IsActive()) ++count; data.WriteBits(count, 18); ByteBuffer datas; for (auto const &kvPair : m_bmAuctionsMap) { auto const auction = kvPair.second; if (!auction->IsActive()) continue; // Is owner data.WriteBit(guidLow == auction->bidder); uint64 currentBid = auction->bidder ? auction->bid : 0; uint64 nextBidPrice = auction->bidder ? auction->bid + GetAuctionOutBid(auction->bid) : auction->bid; uint64 upPrice = auction->bidder ? nextBidPrice - currentBid : 1; datas << uint32(auction->bmTemplate->itemEntry); datas << uint32(auction->bmTemplate->seller); datas << uint32(auction->id); datas << uint32(auction->bidderCount); datas << uint32(auction->TimeLeft()); datas << uint64(currentBid); datas << uint32(auction->bmTemplate->itemCount); datas << uint32(0); // Unk datas << uint64(nextBidPrice); datas << uint64(upPrice); } data.FlushBits(); if (datas.size()) data.append(datas); TC_LOG_DEBUG("network", ">> Sent %u BlackMarket Auctions", count); }
void LimitFrames() { buffer++; SDL_Delay(TimeLeft()); next_time += 16; }
void Game::Process() { SDL_Event event; SDLKey k; Uint8* keystate; bool running = true; Graphics bg; bg.LoadImage("bgpath.png"); int w = 800, h = 640, xVel = 0, yVel = 0; //w and h are params of the bg image SDL_Rect camera = {0, h - 480, 640, 480}; //640 x 480 screen size bg.SetSource(camera); nextTime = SDL_GetTicks() + TICK_INTERVAL; while(running) { //if(xVel != 0) bg.SetSource(camera); bg.DrawClip(); if(camera.x > 0) { bg.SetSource(0, camera.y); bg.DrawClip(w - camera.x, 0); } if(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: k=event.key.keysym.sym; if(k == SDLK_RIGHT) xVel = 5; else if(k == SDLK_UP) yVel = -5; else if(k == SDLK_DOWN) yVel = 5; break; case SDL_KEYUP: k=event.key.keysym.sym; if(k == SDLK_RIGHT) xVel = 0; else if(k == SDLK_UP || k == SDLK_DOWN) yVel = 0; break; case SDL_QUIT: running = false; continue; break; } } camera.x += xVel; if(camera.x > w) camera.x = 0; camera.y += yVel; if(camera.y < 0) camera.y = 0; else if(camera.y + camera.h > h) //h is the height of bg camera.y = h - camera.h; SDL_PumpEvents(); keystate = SDL_GetKeyState(NULL); if(keystate[SDLK_ESCAPE]) { running = false; continue; } window.Flip(); SDL_Delay(TimeLeft()); nextTime += TICK_INTERVAL; } }
/*========================================================================= // Name: Mainloop() // Desc: the one and only mainloop ;-) //=======================================================================*/ void Mainloop() { SDL_Event event; while (!bDone) { /* Mainloop */ switch (gamestate) { case STATE_MENU: MainMenu_Loop(); SDL_Delay(TimeLeft()); break; case STATE_PLAY: while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: bDone = 1; break; case SDL_KEYDOWN: /* Escape can be pressed everytime to get back to the menu */ if (event.key.keysym.sym == SDLK_ESCAPE) gamestate = STATE_MENU; if (!bPause && !bGameOver) /* Is the game active? */ switch (event.key.keysym.sym) { case SDLK_SPACE: MoveCluster(1); /* "drop" cluster... */ NewCluster(); /* ... and create new one */ break; case SDLK_DOWN: if (MoveCluster(0)) NewCluster(); break; case SDLK_LEFT: MoveClusterLeft(); break; case SDLK_RIGHT: MoveClusterRight(); break; case SDLK_UP: TurnClusterRight(); break; case SDLK_p: bPause = 1; break; /* Activate pause mode */ case SDLK_c: /* Crazy mode... */ if (!bCrazy) bCrazy = 1; else { BoxDrawInit(); bCrazy = 0; } break; #ifdef DEBUG_CHANGE_LEVEL_WITH_KEYS case SDLK_w: if (level < 10) { level++; PutSound(&sndNextlevel); } break; case SDLK_q: if (level > 0) level--; break; #endif default: break; } else if (event.key.keysym.sym == SDLK_p) /* deactivate pause mode again */ bPause = 0; break; } } Game_Loop(); SDL_Delay(TimeLeft()); break; case STATE_GAMEOVER: break; case STATE_CREDITS: /* Credits_Loop(false); */ SDL_Delay(TimeLeft()); break; case STATE_EXIT: bDone = 1; break; } } }
//------------------------------------------------------------ ExperimentFSA() // void ExperimentFSA(int value) { g_counter = value + 1; switch(g_state) { case EXP_STATE_PRE: if (gAbsState[WACOMFIELD_PRESSURE].nValue > 0) { g_state=EXP_STATE_SEGUIMIENTO1; g_init_time = glutGet(GLUT_ELAPSED_TIME); } break; case EXP_STATE_SEGUIMIENTO1: g_xpos += SPEED; if(CheckError()) { g_state = EXP_STATE_ERROR; break; } else if (glutGet(GLUT_ELAPSED_TIME) - g_init_time > FLASH_INIT_TIME) { g_state = EXP_STATE_FLASH; } else { GraphicOutput(); glutSwapBuffers(); } break; case EXP_STATE_FLASH: g_xpos += SPEED; if(CheckError()) { g_state = EXP_STATE_ERROR; break; } else if (glutGet(GLUT_ELAPSED_TIME) - g_init_time > FLASH_END_TIME) { g_state = EXP_STATE_SEGUIMIENTO2; GraphicOutput(); glutSwapBuffers(); } else { GraphicOutput(); glutSwapBuffers(); } break; case EXP_STATE_SEGUIMIENTO2: g_xpos += SPEED; if(CheckError()) { g_state = EXP_STATE_ERROR; break; } else if (glutGet(GLUT_ELAPSED_TIME) - g_init_time > TOTAL_END_TIME) { g_state = EXP_STATE_RESPUESTA; } else { GraphicOutput(); glutSwapBuffers(); } break; case EXP_STATE_RESPUESTA: if (gAbsState[WACOMFIELD_PRESSURE].nValue == 0) flag = TRUE; if (flag && (gAbsState[WACOMFIELD_PRESSURE].nValue > 0) ) { data.x=(int)gAbsState[WACOMFIELD_POSITION_X].nValue * X_FACTOR; data.y=(int)gAbsState[WACOMFIELD_POSITION_Y].nValue * Y_FACTOR; exit(0); } break; case EXP_STATE_ERROR: GraphicOutput();// -En la función main() se van llamando sucesivamente a las distintas funciones de // inicialización y control de las librerias GLUT/GLX/OPENGL. Aquellas que no sea común // alterar su comportamiento se encuentran recogidas en el archivo glutcontrol.c; las // funciones que habitualmente han de editarse, pues regulan la interacción con el // sujeto durante el experimento, son las siguientes glutSwapBuffers(); usleep(2000000); exit(0); break; default: exit(0); break; } glutTimerFunc(TimeLeft(), ExperimentFSA, g_counter); }
bool Timer::Zero() const { return TimeLeft() == 0; }
double Timer::PercentLeft() const { return TimeLeft() / m_duration; }