(){ cls(0); drawclock(150); } drawclock(rad) { hand_color = 0x6a6a6a; seconds_color = 0xff0000; radius_notches = rad*.95; radius_numbers = rad*.85; small_notch_size =rad*0.04; big_notch_size = rad*0.08; cx=rad+1; cy=rad+1; // Face background setcol(0x5aaaaa); drawsph(cx,cy,rad); // Highlight from stopwatch.kc setcol(0xffffff); gldisable(GL_DEPTH_TEST); glbegin(GL_COMPLEX); glsettex("whitepix.tga"); for(a=3.5;a<=4.5;a+=.25) { gltexcoord(0,0); glvertex(cos(a)*rad*.55+cx,sin(a)*rad*.55+cy); } for(a=4.5;a>=3.5;a-=.25) { gltexcoord(0,0); glvertex(cos(a)*rad*.45+cx,sin(a)*rad*.45+cy); } glend(); moveto(cx-4*6, cy-.5*rad); setfont(6,8); setcol(0); printf("Evaltime"); // Face setcol(0x015151); hr=0; for(i=0; i<60; i++) { a = i/60*2*pi - pi/2; ca=cos(a); sa=sin(a); if (i%5==0) { hour = hr; if (hour==0) hour=12; draw_hour(cx,cy,ca,sa,radius_numbers,hour); hr++; r=radius_notches; x=cx + ca*r; y=cy+sa*r; drawcone(x,y,big_notch_size*.5,x+big_notch_size*ca,y+big_notch_size*sa,-big_notch_size*.5,0); } else { r=radius_notches; x=cx + ca*r; y=cy+sa*r; drawcone(x,y,small_notch_size*.5,x+small_notch_size*ca,y+small_notch_size*sa,-small_notch_size*.5,0); } } int_hours = klock(6); int_minutes = klock(7); int_seconds = klock(8); int_millis = klock(9); // Hour and Minute hand hours = (int_hours+int_minutes/60.0) / 24.0; a = hours * 2*pi - pi/2; drawhand(cx,cy,a, rad*.64, 6,4, hand_color); a = ( (int_minutes+int_seconds/60+int_millis/1000/60) / 60) * 2*pi - pi/2; drawhand(cx,cy,a, rad*.84, 4,2, hand_color); a = ((int_seconds+int_millis/1000) / 60) * 2*pi - pi/2; drawhand(cx,cy,a, rad*.9, 3,1, seconds_color); } draw_hour(cx,cy,ca,sa,r,hr) { x=cx + ca*r; y=cy+sa*r; ofs=0; if(hr>9 || hr==0) ofs=5; setfont(9,16); moveto(x-4.5-ofs,y-8); printf("%g", hr); } drawhand(cx,cy,angle,forward,r0,r1,kolor) { back = .19*forward; sx=cx - cos(angle)*back; sy=cy - sin(angle)*back; ex=cx + cos(angle)*forward; ey=cy + sin(angle)*forward; setcol(0); drawcone(sx,sy,r0+1,ex,ey,r1+1); setcol(kolor); drawsph(cx,cy,r0+3); drawcone(sx,sy,-r0,ex,ey,r1); }