void watch(const FuncT& f) { for(;;) { wait_for_data(); f( wetness(), temperature(), atmospheric_pressure(), illumination() ); } }
void draw(void) { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); /* 3D */ glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective( 60, 1, 0.05, WORLD_SIDE * 2 * 2.4142); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); illumination(); gluLookAt(compass[P].x, PLAYER_HEIGHT, compass[P].y, compass[W].x, PLAYER_HEIGHT, compass[W].y, 0, 1, 0); drawEnv(); drawCoins(); drawFixeds(); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHT0); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); /* 2D */ /* Isso aqui só precisa ser chamado uma vez, e quando a janela muda de * tamanho */ glViewport(0, 0, WINDOW_SIZE, WINDOW_SIZE); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, WINDOW_SIZE, WINDOW_SIZE, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(playing) { drawScoreBoard(20,20); if(map) drawMiniMap(3.5f * MAP_SIZE, 3.5f * MAP_SIZE); } else drawEnd(); glutSwapBuffers(); }