// function that draw a star void drawStar(Star *star) { glPushMatrix(); glTranslated(star->x,star->y,star->z); if(showLabels) draw3DText(star->x,star->y+1.10*star->sphereModel.radius,star->z, star->name); glRotated(star->sphereModel.angle,0.0,1.0,0.0); // rotate around y axis of star // case solid sphere //glColor3d(star->sphereModel.r, star->sphereModel.g, star->sphereModel.b); //glutSolidSphere(star->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS); // case textured sphere // when draw a star, it is not affected by the light!!! glDisable(GL_LIGHTING); // disable light GLUquadric *quad; quad = gluNewQuadric(); glBindTexture(GL_TEXTURE_2D,star->sphereModel.textureId); gluQuadricTexture(quad,GL_TRUE); // rotate to has right texture position glRotated(90.0,1.0,0.0,0.0); // rotate around x axis of star gluSphere(quad,star->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS); glEnable(GL_LIGHTING); // renable light // light produced by the star glEnable(GL_LIGHT0); GLfloat light0_position[] = {0.0,0.0,0.0,star->light_intensity}; GLfloat light0_ambient[] = {0.2,0.2,0.2,star->light_intensity}; GLfloat light0_diffused[] = {1.0,1.0,1.0,star->light_intensity}; GLfloat light0_specular[] = {1.0,1.0,1.0,star->light_intensity}; glLightfv(GL_LIGHT0, GL_POSITION, light0_position); glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffused); glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular); glPopMatrix(); }
// function that draw a planet void drawPlanet(Planet *planet) { glPushMatrix(); glTranslated(planet->star->x,planet->star->y,planet->star->z); glRotated(planet->angle,0.0,1.0,0.0); // rotate around y axis of planet's star glPushMatrix(); //drawText(planet->x,planet->y+3*planet->sphereModel.radius,planet->z, planet->name); if(showLabels) draw3DText(planet->x,planet->y+1.10*planet->sphereModel.radius,planet->z, planet->name); glTranslated(planet->x,planet->y,planet->z); glRotated(planet->sphereModel.angle,0.0,1.0,0.0); // rotate around y axis of planet // case solid sphere //glColor3d(planet->sphereModel.r, planet->sphereModel.g, planet->sphereModel.b); //glutSolidSphere(planet->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS); // case textured sphere GLUquadric *quad; quad = gluNewQuadric(); //glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,planet->sphereModel.textureId); gluQuadricTexture(quad,GL_TRUE); // rotate to has right texture position glRotated(90.0,1.0,0.0,0.0); // rotate around x axis of star gluSphere(quad,planet->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS); // red dot, check rotation time used during test //glColor3d(1.0,0.0,0.0); //glTranslated(planet->sphereModel.radius,0.0,0.0); //glutSolidSphere(0.1,SPHERE_SLICE,SPHERE_STACKS); glPopMatrix(); glPopMatrix(); }
static void mainForegroundUpdateProc(Layer* this_layer, GContext *ctx) { GRect b = layer_get_bounds(this_layer); #ifdef PBL_ROUND b.size.h -= 16; // Because of the time at the top, default position is too low on a round screen #endif // Draw the three lives GPoint lives = GPoint( b.size.w/2 - PIECE_PIXELS, b.size.h - 6); for (int L=0; L<3; ++L) { GColor in; GColor out; if (s_score.lives >= (3 - L)) { if (L == 0) { in = COLOR_FALLBACK(GColorMintGreen, GColorWhite); out = COLOR_FALLBACK(GColorDarkGreen, GColorBlack); } else if (L == 1) { in = COLOR_FALLBACK(GColorRajah, GColorWhite); out = COLOR_FALLBACK(GColorWindsorTan, GColorBlack); } else { in = COLOR_FALLBACK(GColorMelon, GColorWhite); out = COLOR_FALLBACK(GColorDarkCandyAppleRed, GColorBlack); } } else { in = COLOR_FALLBACK(GColorLightGray, GColorBlack); out = COLOR_FALLBACK(GColorDarkGray, GColorBlack); } GPoint p = lives; p.x += PIECE_PIXELS * L; graphics_context_set_stroke_color(ctx, out); graphics_context_set_fill_color(ctx, in); graphics_context_set_stroke_width(ctx, 3); graphics_fill_circle(ctx, p, 3); graphics_draw_circle(ctx, p, 3); // Animation? if (s_spentLifeAnimRadius > 0 && s_score.lives == (3 - L)) { graphics_context_set_stroke_width(ctx, 5); graphics_context_set_stroke_color(ctx, COLOR_FALLBACK(in,out)); graphics_draw_circle(ctx, p, s_spentLifeAnimRadius / SUB_PIXEL ); } } // Draw the game over message if (s_gameOverMessage == true) { static const char txtGame[] = "GAME"; static const char txtOver[] = "OVER"; b.origin.y += 30; draw3DText(ctx, b, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD), txtGame, 1, GTextAlignmentCenter, true, GColorWhite, GColorBlack); b.origin.y += 40; draw3DText(ctx, b, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD), txtOver, 1, GTextAlignmentCenter, true, GColorWhite, GColorBlack); } }