summary refs log tree commit diff
path: root/src/GameDraw.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GameDraw.cpp')
-rw-r--r--src/GameDraw.cpp194
1 files changed, 9 insertions, 185 deletions
diff --git a/src/GameDraw.cpp b/src/GameDraw.cpp
index 1094dc7..010fbc0 100644
--- a/src/GameDraw.cpp
+++ b/src/GameDraw.cpp
@@ -437,142 +437,80 @@ void Game::DrawGLScene(void)
 			glDisable(GL_CLIP_PLANE0);
 		glPopMatrix();
 
-		frustum.GetFrustum();
-
-		GLfloat LightPosition[]=	{ -.5, 1, -.8, 0.0f };
-
+		GLfloat frustum[6][4];
+		getFrustum(frustum);
+		GLfloat LightPosition[] { -.5, 1, -.8, 0.0f };
 		glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
-
 		glDisable(GL_TEXTURE_2D);
-
 		glEnable(GL_FOG);
-
 		glEnable(GL_COLOR_MATERIAL);
-
 		glEnable(GL_CULL_FACE);
-
 		glDepthMask(1);
 
 		//Draw street
-
 		glPushMatrix();
-
 			glDepthMask(0);
-
 			glDisable(GL_DEPTH_TEST);
-
 			glEnable(GL_LIGHTING);
-
 			glTranslatef(camera.position.x,0,camera.position.z);
-
 			glScalef(viewdistance*5/100,1,viewdistance*5/100);
-
 			if(visions==0)street.draw(.22,.22,.22);
-
 			if(visions==1)street.draw(0,0,0);
-
 			glEnable(GL_DEPTH_TEST);
-
 			glDepthMask(1);
-
 		glPopMatrix();
-
 		if(visions==0)glEnable(GL_LIGHTING);
-
 		if(visions==1)glDisable(GL_LIGHTING);
 
 		//Draw blocks
-
 		glEnable(GL_BLEND);
-
 		XYZ move;
-
 		int beginx,endx;
-
 		int beginz,endz;
-
 		int distsquared;
-
 		//Only nearby blocks
-
 		beginx=(camera.position.x-viewdistance+block_spacing/2)/block_spacing-2;
-
 		if(beginx<0)beginx=0;
-
 		beginz=(camera.position.z-viewdistance+block_spacing/2)/block_spacing-2;
-
 		if(beginz<0)beginz=0;
-
 		endx=(camera.position.x+viewdistance+block_spacing/2)/block_spacing+2;
-
 		if(endx>num_blocks-1)endx=num_blocks-1;
-
 		endz=(camera.position.z+viewdistance+block_spacing/2)/block_spacing+2;
-
 		if(endz>num_blocks-1)endz=num_blocks-1;
 
 		bool draw;
-
 		int whichtri;
-
 		XYZ collpoint;
-
 		for(int i=beginx;i<=endx;i++){
-
 			for(int j=beginz;j<=endz;j++){
-
 				drawn[i][j]=1;
-
 			}
-
 		}
 
 		if(beginx<endx&&beginz<endz)
-
 		for(int i=beginx;i<=endx;i++){
-
 			for(int j=beginz;j<=endz;j++){
-
 				draw=1;
-
 				//Only draw if visible
-
 				distsquared=((i)*block_spacing-camera.position.x)*((i)*block_spacing-camera.position.x)+((j)*block_spacing-camera.position.z)*((j)*block_spacing-camera.position.z);
-
 				if(distsquared>(viewdistance*viewdistance+block_spacing*block_spacing	))draw=0;
+				if(draw&&citytype[i][j]!=3&&!cubeInFrustum(frustum, (i)*block_spacing,0,(j)*block_spacing,block_spacing))draw=0;
 
-				if(draw&&citytype[i][j]!=3&&!frustum.CubeInFrustum((i)*block_spacing,0,(j)*block_spacing,block_spacing))draw=0;
-
-				if(draw&&citytype[i][j]!=3&&!frustum.SphereInFrustum(blocks[citytype[i][j]].boundingspherecenter.x+(i)*block_spacing,blocks[citytype[i][j]].boundingspherecenter.y,blocks[citytype[i][j]].boundingspherecenter.z+(j)*block_spacing,blocks[citytype[i][j]].boundingsphereradius))draw=0;
+				if(draw&&citytype[i][j]!=3&&!sphereInFrustum(frustum, blocks[citytype[i][j]].boundingspherecenter.x+(i)*block_spacing,blocks[citytype[i][j]].boundingspherecenter.y,blocks[citytype[i][j]].boundingspherecenter.z+(j)*block_spacing,blocks[citytype[i][j]].boundingsphereradius))draw=0;
 
 				if(draw){
-
 					glPushMatrix();
-
 						glTranslatef(i*block_spacing,0,j*block_spacing);
-
 						glRotatef(cityrotation[i][j]*90,0,1,0);
-
 						blocks[citytype[i][j]].draw();
-
 					glPopMatrix();
-
-				}
-
-				if(!draw){
-
+				} else {
 					move.y=0;
-
 					move.x=i*block_spacing;
-
 					move.z=j*block_spacing;
-
 					if(findDistancefast(move,camera.position)<300000)drawn[i][j]=0;
-
 				}
-
 			}
-
 		}
 
 		// Decals
@@ -611,240 +549,126 @@ void Game::DrawGLScene(void)
 			draw=1;
 			if(person[i].skeleton.free<1){
 				if(person[i].whichblockx>=0&&person[i].whichblockx<num_blocks&&person[i].whichblocky>=0&&person[i].whichblocky<num_blocks){
-
 					if(!drawn[person[i].whichblockx][person[i].whichblocky])draw=0;
 				}else draw=0;
-
 				if(draw)
-
-				if(!frustum.CubeInFrustum(person[i].playercoords.x,person[i].playercoords.y,person[i].playercoords.z,5))draw=0;
-
+				if(!cubeInFrustum(frustum, person[i].playercoords.x,person[i].playercoords.y,person[i].playercoords.z,5))draw=0;
 				if(draw)
-
 				if(findDistancefast(person[i].playercoords,camera.position)>1000000)draw=0;
-
 				if(draw)
-
 				for(int j=beginx;j<=endx;j++){
-
 					for(int k=beginz;k<=endz;k++){
-
 						if(draw){
-
 							move.y=0;
-
 							move.x=j*block_spacing;
-
 							move.z=k*block_spacing;
-
 							if(findDistancefast(move,camera.position)<100000){
-
 								whichtri=blockocclude.LineCheck2(camera.position,person[i].playercoords,&collpoint,move,0);
-
 								if(whichtri!=-1)draw=0;
-
 							}
-
 						}
-
 					}
-
 				}
 
 				if(draw){
-
 					move.y=0;
-
 					move.x=person[i].whichblockx*block_spacing;
-
 					move.z=person[i].whichblocky*block_spacing;
-
 					whichtri=blockocclude.LineCheck2(camera.position,person[i].playercoords,&collpoint,move,0);
-
 					if(whichtri!=-1)draw=0;
-
 				}
-
 				if(i==0)draw=1;
-
 			}
 
 			if(person[i].skeleton.free==1){
-
 				if(draw)
-
-				if(!person[i].skeleton.broken&&!frustum.CubeInFrustum(person[i].averageloc.x,person[i].averageloc.y,person[i].averageloc.z,5))draw=0;
-
+				if(!person[i].skeleton.broken&&!cubeInFrustum(frustum, person[i].averageloc.x,person[i].averageloc.y,person[i].averageloc.z,5))draw=0;
 				if(draw)
-
 				if(findDistancefast(person[i].averageloc,camera.position)>1000000)draw=0;
-
 				if(draw)
-
 				if(person[i].skeleton.joints[0].position.y<-2)draw=0;
 
 				for(int j=beginx;j<=endx;j++){
-
 					for(int k=beginz;k<=endz;k++){
-
 						if(draw){
-
 							move.y=0;
-
 							move.x=j*block_spacing;
-
 							move.z=k*block_spacing;
-
 							if(findDistancefast(move,camera.position)<100000){
-
 								whichtri=blockocclude.LineCheck2(camera.position,person[i].averageloc,&collpoint,move,0);
-
 								if(whichtri!=-1)draw=0;
-
 							}
-
 						}
-
 					}
-
 				}
-
 				if(draw){
-
 					move.y=0;
-
 					move.x=person[i].whichblockx*block_spacing;
-
 					move.z=person[i].whichblocky*block_spacing;
-
 					whichtri=blockocclude.LineCheck2(camera.position,person[i].averageloc,&collpoint,move,0);
-
 					if(whichtri!=-1)draw=0;
-
 				}
-
 				if(i==0)draw=1;
-
 			}
 
 			if(draw&&person[i].existing==1){
-
 				if((findDistancefast(person[i].playercoords,camera.position)<100000+zoom*3000000&&person[i].skeleton.free<1)||(findDistancefast(person[i].averageloc,camera.position)<100000+zoom*3000000&&person[i].skeleton.free>=1)){
-
 					glPushMatrix();
-
 						if(person[i].skeleton.free==0){
-
 							glTranslatef(person[i].playercoords.x,person[i].playercoords.y,person[i].playercoords.z);
-
 							glRotatef(person[i].playerrotation,0,1,0);
-
 							if(i!=0||visions==0)person[i].DoAnimations(i);
-
 							if(i==0&&visions==1)person[i].DoAnimationslite(i);
-
 						}
-
 						if(visions==1)nocolors=1;
-
 						if(visions==1&&person[i].type==eviltype)nocolors=2;
-
 						if(visions==1&&person[i].type==viptype)nocolors=3;
-
 						if(!(visions==1&&i==0)&&!(zoom==1&&i==0))person[i].DrawSkeleton(i);
-
 					glPopMatrix();
-
-				}
-
-				else{
-
+				} else {
 					glPushMatrix();
-
 						if(person[i].skeleton.free<1)person[i].DoAnimationslite(i);
-
 						glColor4f(1,1,1,1);
-
 						glEnable(GL_BLEND);
-
 						glDisable(GL_CULL_FACE);
-
 						glEnable(GL_TEXTURE_2D);
-
 						glDisable(GL_LIGHTING);
-
 						glDepthMask(0);
-
 						glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-
 						if(person[i].skeleton.free<1){
-
 							glBindTexture(GL_TEXTURE_2D, personspritetextureptr);
-
 							glTranslatef(person[i].playercoords.x,person[i].playercoords.y+size/2*.3,person[i].playercoords.z);
-
 						}
-
 						if(person[i].skeleton.free==1){
-
 							glBindTexture(GL_TEXTURE_2D, deadpersonspritetextureptr);
-
 							glTranslatef(person[i].averageloc.x,person[i].averageloc.y+size/2*.3,person[i].averageloc.z);
-
 						}
-
 						glGetFloatv(GL_MODELVIEW_MATRIX,M);
-
 						drawpoint.x=M[12];
-
 						drawpoint.y=M[13];
-
 						drawpoint.z=M[14];
-
 						glLoadIdentity();
-
 						glTranslatef(drawpoint.x, drawpoint.y, drawpoint.z);
-
 						glBegin(GL_TRIANGLES);
-
 							glTexCoord2f(1.0f, 1.0f); glVertex3f( .3f*size, .3f*size, 0.0f);
-
 							glTexCoord2f(0.0f, 1.0f); glVertex3f(-.3f*size, .3f*size, 0.0f);
-
 							glTexCoord2f(1.0f, 0.0f); glVertex3f( .3f*size,-.3f*size, 0.0f);
-
 							glTexCoord2f(0.0f, 0.0f); glVertex3f(-.3f*size,-.3f*size, 0.0f);
-
 							glTexCoord2f(1.0f, 0.0f); glVertex3f( .3f*size, -.3f*size, 0.0f);
-
 							glTexCoord2f(0.0f, 1.0f); glVertex3f(-.3f*size, .3f*size, 0.0f);
-
 						glEnd();
-
 					glPopMatrix();
-
 					glDepthMask(1);
-
 					glDisable(GL_TEXTURE_2D);
-
 					glEnable(GL_CULL_FACE);
-
 					if(visions!=1)glEnable(GL_LIGHTING);
-
 				}
-
 			}
-
 			if(person[i].skeleton.free<1&&!draw)person[i].DoAnimationslite(i);
-
 			if(!person[i].existing)
-
 				if(!draw||findDistancefast(person[i].playercoords,camera.position)>10000){person[i].existing=1;}
-
 		}
-
 		glDisable(GL_COLOR_MATERIAL);
-
 		glDisable(GL_BLEND);
 
 		//Attacker psychicness