Ejemplo n.º 1
0
void CMeter2DGraphView::UpdateMesh()
{
   makeCurrent();
   
   glNewList( _meshList, GL_COMPILE );
   
   /////////////////////////////////////////////////////////////////////////////////////////
   float meshWidth( model()->timeFrame() );
   float meshHeight( model()->valueFrame() );
   float meshTimeResolution( meshWidth / model()->timeResolution() );
   float meshValueResolution( meshHeight / model()->valueResolution() );
   
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   QRect glRect( _meshArea.x(), height() - ( _meshArea.y() + _meshArea.height() ),
                 _meshArea.width(), _meshArea.height() );
   
   glViewport( glRect.x(), glRect.y(), glRect.width(), glRect.height() );

   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();

   gluOrtho2D( 0, meshWidth, 0, meshHeight );
   
   glMatrixMode( GL_MODELVIEW );
   glLoadIdentity();
   
   /////////////////////////////////////////////////////////////////////////////////////////
   glDisable( GL_LINE_SMOOTH );

   /////////////////////////////////////////////////////////////////////////////////////////
   glLineWidth( 2. );
   glColor4f( .1, .3, .3, .5 );

   glBegin( GL_LINES );

   glVertex2f( .0, .0 );
   glVertex2f( .0, meshHeight );

   glVertex2f( .0, .0 );
   glVertex2f( meshWidth, .0 );

   glEnd();

   /////////////////////////////////////////////////////////////////////////////////////////
   glLineWidth( 1. );
   glColor4f( .5, .8, .5, .5 );

   glBegin( GL_LINES );

   /////////////////////////////////////////////////////////////////////////////////////////
   for( float x( meshTimeResolution ); x < meshWidth - meshTimeResolution / 2; x += meshTimeResolution )
   {
      glVertex2f( x, 0 );
      glVertex2f( x, meshHeight );
   }

   /////////////////////////////////////////////////////////////////////////////////////////
   for( float y( meshValueResolution ); y < meshHeight - meshValueResolution / 2; y += meshValueResolution )
   {
      glVertex2f( 0, y );
      glVertex2f( meshWidth, y );
   }

   glEnd();
   
   glEndList();
}
Ejemplo n.º 2
0
void eloop(){
	if(Btop>B||Etop>E)marke();
	for(bxy*b=B;b<Btop;b++){
		if(0)killb:if(killb(b))break;
		float bx=b->x,by=b->y;
		b->x+=b->xd;
		b->y+=b->yd;
		if(b->y<0||b->x<0||b->x>128||b->y>256)goto killb;
		if(T==MT){
			glLine(bx,by,b->x,b->y);
			glRect(b->x-1,b->y-1,b->x+1,b->y+1);
		}
		for(int i=0;i<2;i++)
			if(btop(i,b)<256){
				if(Php[i]!=b->p){
					Ph[i]--;
					Php[i]=b->p;
				}
				goto killb;
			}
	}
	for(obje*e=E;e<Etop;e++){
		if(0)kille:if(kille(e))break;
		float x=e->x,y=e->y,r;
		int et=!!(e->t&128);
		switch(e->t&127){
		case(CAN)
			e->x=x+=e->xd;
			e->y=y+=e->yd;
			et=nerdest(e);
			erotxy(e,Px[et],Py[et],M_PI/16);
			if(!(T-e->c&3))
				mkbd(e->c,x+cos(e->d)*r*2,y+sin(e->d)*r*2,6,e->d);
			if(x<-5||x>133||y<-5||y>261||e->h<1)goto kille;
			else(e->h<4||rdmg(x,y,e->h*3/2)){
				deceh(e);
			}
			if(T==MT){
				float r=min(T-e->c,e->h);
				glColor(wht);
				glLine(x,y,x+cos(e->d)*r*2,y+sin(e->d)*r*2);
				glColor(red+et);
				glCirc(x,y,r);
			}
		case(TAR)
			r=min(T-e->c,abs(e->h));
			et=e->h<6?4:rdmg(x,y,r);
			if(et)
				seteh(e,e->h-et);
			setexdyd(e,rrotxy(e->xd,x,y,Px[0],Py[0],M_PI/72),rrotxy(e->yd,x,y,Px[1],Py[1],M_PI/72));
			if(e->h<-120)goto kille;
			if(T==MT){
				glColor(wht);
				glCirc(x,y,r);
				rndcol();
				glCirc(x,y,min(r,24));
				glColor(wht);
				glCirc(x,y,min(r,16));
				rndcol();
				glCirc(x,y,min(r,8));
			}
			for(int i=0;i<2;i++)
				xLz(min(T-e->c,127+e->h),x,y,i?e->yd:e->xd);
		case(ROT)
			e->x=x+=e->xd;
			e->y=y+=e->yd;
			e->d+=M_PI/(et?128:-128);
			for(int i=0;i<3;i++)
				mkbd(e->c,x+cos(e->d+i*M_PI*2/3)*32,y+sin(e->d+i*M_PI*2/3)*32,8,e->d+i*M_PI*2/3);
			if(x<-5||x>133||y<-5||y>261||e->h<1)goto kille;
			else(e->h<8||rdmg(x,y,e->h)){
				deceh(e);
			}
			if(T==MT){
				rndcol();
				glCirc(x,y,e->h);
				glColor(wht);
				for(int i=0;i<3;i++)
					glLine(x+cos(e->d+i*M_PI*2/3)*(32-e->h*3),y+sin(e->d+i*M_PI*2/3)*(32-e->h*3),x+cos(e->d+i*M_PI*2/3)*32,y+sin(e->d+i*M_PI*2/3)*32);
			}
		case(DOG)
			et=nearest(e);
			if(dst2(x,y,Px[et],Py[et])<64){
				setPx(et,e->x);
				setPy(et,e->y);
			}else{
				erotxy(e,Px[et],Py[et],M_PI/32);
				setexy(e,x+=cos(e->d)*e->xd,y+=sin(e->d)*e->xd);
				et=2;
			}
			if(rdmg2(x,y,16)&(et==2?0xFFFF:et==1?0x00FF:0xFF00)){
				deceh(e);
				if(!e->h)goto kille;
			}
			if(T==MT){
				glColor(et==2?wht:red+et);
				glCirc(x,y,min(e->h,T-e->c));
			}
		case(POO)
			et=nearest(e);
			erotxy(e,Px[et],Py[et],M_PI/48);
			setexy(e,x+=cos(e->d)*e->xd,y+=sin(e->d)*e->xd);
			if(!(T-e->c&7))
				mkbd(e->c,x,y,0,0);
			if(T==MT){
				rndcol();
				glCirc(x,y,min(T-e->c,e->h)/2);
			}
			if(dst2(x,y,Px[et],Py[et])<sqr(e->h)||e->h<16){
				deceh(e);
				if(!e->h)goto kille;
			}
		case(B1)
			if(y<64){
				add2ey(e);
				y+=2;
			}
			mkbxy(e->c,x,y,Px[0],Py[0],4);
			mkbxy(e->c+1,x,y,Px[1],Py[1],4);
			mkbxy(e->c+2,x,y,Px[!(e->h&8)],Py[!(e->h&8)],1);
			et=rdmg2(x,y,e->h);
			if((e->h&7)!=7&&getb(et,e->h&8))
				seteh(e,e->h+1);
			else(getb(et,!(e->h&8))||e->h<7){
				deceh(e);
				if(!e->h)goto kille;
			}