#include "coursecity.h" void coursecity::SetSolid() {//sets up heights too for (int x=0; x180.0) a-=180.0; glColor4f(0,0.2,0.7,0.8); glBegin(GL_QUADS); glNormal3f(sin(a),cos(a),1); glTexCoord2i(0,0); glVertex3f(x,y,0); glTexCoord2i(1,0); glVertex3f(x+TILESIZE/1.0,y,0); glNormal3f(sin(a),sin(a),1); glTexCoord2i(1,1); glVertex3f(x+TILESIZE/1.0,y+TILESIZE/1.0,z); glTexCoord2i(0,1); glVertex3f(x,y+TILESIZE/1.0,z); glEnd(); glColor3f(1,1,1); glEnable(GL_TEXTURE_2D); glDisable(GL_LIGHT4); glPopAttrib(); //glEnable(GL_LIGHTING); //glEnable(GL_DEPTH_TEST); //glDisable(GL_BLEND); } else if (tiletype==2) {//finish line glNormal3f(0,0,1); glBindTexture(GL_TEXTURE_2D, CourseTexture[TERRAIN3].GetName()); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(x,y,0); glTexCoord2i(1,0); glVertex3f(x+TILESIZE,y,0); glTexCoord2i(1,1); glVertex3f(x+TILESIZE,y+TILESIZE,z); glTexCoord2i(0,1); glVertex3f(x,y+TILESIZE,z); glEnd(); } else if (tiletype==1) {//ground glNormal3f(0,0,1); glBindTexture(GL_TEXTURE_2D, CourseTexture[TERRAIN2].GetName()); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(x,y,0); glTexCoord2i(1,0); glVertex3f(x+TILESIZE,y,0); glTexCoord2i(1,1); glVertex3f(x+TILESIZE,y+TILESIZE,z); glTexCoord2i(0,1); glVertex3f(x,y+TILESIZE,z); glEnd(); } else if (tiletype==5) { //do nothing } else if (tiletype==6) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M6,M6,M6,M6,M6); glPopMatrix(); } else if (tiletype==7) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M7,M7,M7,M7,M7); glPopMatrix(); } else if (tiletype==8) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M8,M8,M8,M8,M8); glPopMatrix(); } else if (tiletype==9) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M9,M9,M9,M9,M9); glPopMatrix(); } else if (tiletype==10) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M10,M10,M10,M10,M10); glPopMatrix(); } else if (tiletype==11) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M11,M11,M11,M11,M11); glPopMatrix(); } else if (tiletype==12) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M12,M12,M12,M12,M12); glPopMatrix(); } else if (tiletype==13) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M13,M13,M13,M13,M13); glPopMatrix(); } else if (tiletype==14) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M14,M14,M14,M14,M14); glPopMatrix(); } else if (tiletype==15) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M15,M15,M15,M15,M15); glPopMatrix(); } else if (tiletype==16) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,M16,M16,M16,M16,M16); glPopMatrix(); } else if ((tiletype>16)&&(tiletype<90)) { glPushMatrix(); glTranslatef(x,y,0); drawbox(coursemap[(int)y*coursewidth+(int)x].height,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].xsize,tiletypes[(int)(coursemap[(int)y*coursewidth+(int)x].type)].ysize,tiletype+7,tiletype+7,tiletype+7,tiletype+7,tiletype+7); glPopMatrix(); } else {//type 0 or unknown. 0 is sidewalk glNormal3f(0,0,1); glBindTexture(GL_TEXTURE_2D, CourseTexture[TERRAIN1].GetName()); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(x,y,0); glTexCoord2i(1,0); glVertex3f(x+TILESIZE,y,0); glTexCoord2i(1,1); glVertex3f(x+TILESIZE,y+TILESIZE,z); glTexCoord2i(0,1); glVertex3f(x,y+TILESIZE,z); glEnd(); } /*debug */ if (0)//enable this to draw a marker for the square you're on if (coursemap[(int)y*coursewidth+(int)x].contents!=-1) { glNormal3f(0,0,1); glColor3f(1,1,0); glBindTexture(GL_TEXTURE_2D, CourseTexture[TERRAIN3].GetName()); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(x,y,1); glTexCoord2i(1,0); glVertex3f(x+TILESIZE,y,1); glColor3f(1,1,0); glTexCoord2i(1,1); glVertex3f(x+TILESIZE,y+TILESIZE,z+1); glTexCoord2i(0,1); glVertex3f(x,y+TILESIZE,z+1); glEnd(); } /* if (coursemap[(int)y*coursewidth+(int)x].solid==1) { glNormal3f(0,0,1); glColor3f(0,1,1); glBindTexture(GL_TEXTURE_2D, CourseTexture[TERRAIN3].GetName()); glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(x,y,1); glTexCoord2i(1,0); glVertex3f(x+TILESIZE,y,1); glColor3f(0,1,1); glTexCoord2i(1,1); glVertex3f(x+TILESIZE,y+TILESIZE,z+1); glTexCoord2i(0,1); glVertex3f(x,y+TILESIZE,z+1); glEnd(); }*/ } bool coursecity::SetupModels() { glNewList(4,GL_COMPILE); glPushAttrib(GL_CURRENT_BIT); #define model4height 5 glDisable(GL_BLEND); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, CourseTexture[TERRAIN1].GetName()); //top glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(0,0,model4height); glTexCoord2i(1,0); glVertex3f(TILESIZE,0,model4height); glTexCoord2i(1,1); glVertex3f(TILESIZE,TILESIZE,model4height); glTexCoord2i(0,1); glVertex3f(0,TILESIZE,model4height); glEnd(); //front glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(TILESIZE,0,0); glTexCoord2i(1,0); glVertex3f(TILESIZE,0,model4height); glTexCoord2i(1,1); glVertex3f(TILESIZE,TILESIZE,model4height); glTexCoord2i(0,1); glVertex3f(TILESIZE,TILESIZE,0); glEnd(); //back glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(0,0,0); glTexCoord2i(1,0); glVertex3f(0,0,model4height); glTexCoord2i(1,1); glVertex3f(0,TILESIZE,model4height); glTexCoord2i(0,1); glVertex3f(0,TILESIZE,0); glEnd(); //left glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(TILESIZE,TILESIZE,0); glTexCoord2i(1,0); glVertex3f(TILESIZE,TILESIZE,model4height); glTexCoord2i(1,1); glVertex3f(0,TILESIZE,model4height); glTexCoord2i(0,1); glVertex3f(0,TILESIZE,0); glEnd(); //right glBegin(GL_QUADS); glTexCoord2i(0,0); glVertex3f(TILESIZE,0,0); glTexCoord2i(1,0); glVertex3f(TILESIZE,0,model4height); glTexCoord2i(1,1); glVertex3f(0,0,model4height); glTexCoord2i(0,1); glVertex3f(0,0,0); glEnd(); glPopAttrib(); glEndList(); return true; }