Exemplo n.º 1
0
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
}
Exemplo n.º 2
0
int BaseSpaceShip::Animate()
{
	if( _AnimationFrame > 6 )
		_AnimationFrame = 0;
	if(TimeLeft() == 0 )
		++_AnimationFrame;
	return _AnimationFrame;
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
Arquivo: timer.c Projeto: maxweis/game
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;
 }

}
Exemplo n.º 6
0
/*=========================================================================
// 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;
        }
    }
}
Exemplo n.º 7
0
//------------------------------------------------------------  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);

}
Exemplo n.º 8
0
bool Timer::Zero() const
{
	return TimeLeft() == 0;
}
Exemplo n.º 9
0
double Timer::PercentLeft() const
{
	return TimeLeft() / m_duration;
}