X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameDraw.cpp;h=a6ab119d200f9277b7db76344693dfaa5e94d679;hb=4e3b68a29afbbd5d0b02dc29810cc89dd2b0d092;hp=09bdb1699ed8ad1a63d92825b19af98228846e7e;hpb=531512ddd1b17458281b27a6f21be83bc2a9c16c;p=lugaru.git diff --git a/Source/GameDraw.cpp b/Source/GameDraw.cpp index 09bdb16..a6ab119 100644 --- a/Source/GameDraw.cpp +++ b/Source/GameDraw.cpp @@ -25,10 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Awards.h" #include "Menu.h" -#include - -using namespace std; - extern XYZ viewer; extern int environment; extern float texscale; @@ -111,6 +107,15 @@ extern bool gamestarted; extern bool showdamagebar; + + +int drawtoggle = 0; +int numboundaries = 0; +XYZ boundary[360]; +int change = 0; + + + enum drawmodes { normalmode, motionblurmode, radialzoommode, realmotionblurmode, doublevisionmode, glowmode, @@ -123,9 +128,12 @@ void Game::flash() { // shouldn't be that way, these should be attributes and Pe flashamount=1; flashdelay=1; } + +void DrawMenu(); + /*********************> DrawGLScene() <*****/ int Game::DrawGLScene(StereoSide side) -{ +{ static float texcoordwidth,texcoordheight; static float texviewwidth, texviewheight; static int i,j,k,l; @@ -136,6 +144,7 @@ int Game::DrawGLScene(StereoSide side) static char string[256]=""; static char string2[256]=""; static char string3[256]=""; + static int drawmode = 0; if ( stereomode == stereoAnaglyph ) { switch(side) { @@ -171,7 +180,7 @@ int Game::DrawGLScene(StereoSide side) static int changed; changed=0; - olddrawmode=drawmode; + int olddrawmode=drawmode; if(ismotionblur&&!loading){ if((findLengthfast(&player[0].velocity)>200)&&velocityblur&&!cameramode){ drawmode=motionblurmode; @@ -251,7 +260,7 @@ int Game::DrawGLScene(StereoSide side) static XYZ terrainlight; static float distance; if(drawmode==normalmode) - ReSizeGLScene(90,.1f); + Game::ReSizeGLScene(90,.1f); if(drawmode!=normalmode) glViewport(0,0,texviewwidth,texviewheight); glDepthFunc(GL_LEQUAL); @@ -274,12 +283,12 @@ int Game::DrawGLScene(StereoSide side) //shake glRotatef(float(Random()%100)/10*camerashake/*+(woozy*woozy)/10*/,0,0,1); //sway - glRotatef(rotation2+sin(woozy/2)*(player[0].damage/player[0].damagetolerance)*5,1,0,0); - glRotatef(rotation+sin(woozy)*(player[0].damage/player[0].damagetolerance)*5,0,1,0); + glRotatef(pitch+sin(woozy/2)*(player[0].damage/player[0].damagetolerance)*5,1,0,0); + glRotatef(yaw+sin(woozy)*(player[0].damage/player[0].damagetolerance)*5,0,1,0); } if(cameramode||freeze||winfreeze){ - glRotatef(rotation2,1,0,0); - glRotatef(rotation,0,1,0); + glRotatef(pitch,1,0,0); + glRotatef(yaw,0,1,0); } if(environment==desertenvironment){ @@ -305,7 +314,7 @@ int Game::DrawGLScene(StereoSide side) glRotatef((float)(abs(Random()%100))/1000,1,0,0); glRotatef((float)(abs(Random()%100))/1000,0,1,0); } - skybox.draw(); + skybox->draw(); glTexEnvf( GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, 0); glPopMatrix(); glTranslatef(-viewer.x,-viewer.y,-viewer.z); @@ -320,7 +329,7 @@ int Game::DrawGLScene(StereoSide side) if(frustum.SphereInFrustum(player[k].coords.x,player[k].coords.y+player[k].scale*3,player[k].coords.z,player[k].scale*7)&&player[k].occluded<25) for(i=0;i=1) glDisable(GL_BLEND); if(distance>=.5){ - checkpoint=DoRotation(player[k].skeleton.joints[abs(Random()%player[k].skeleton.num_joints)].position,0,player[k].rotation,0)*player[k].scale+player[k].coords; + checkpoint=DoRotation(player[k].skeleton.joints[abs(Random()%player[k].skeleton.num_joints)].position,0,player[k].yaw,0)*player[k].scale+player[k].coords; checkpoint.y+=1; if(!player[k].occluded==0) i=checkcollide(viewer,checkpoint,player[k].lastoccluded); @@ -461,7 +470,7 @@ int Game::DrawGLScene(StereoSide side) } if(!cameramode&&musictype==stream_fighttheme) - playerdist=findDistancefastflat(&player[0].coords,&viewer); + playerdist=distsqflat(&player[0].coords,&viewer); else playerdist=-100; glPushMatrix(); @@ -479,9 +488,9 @@ int Game::DrawGLScene(StereoSide side) glDisable(GL_LIGHTING); glEnable(GL_BLEND); glTranslatef(hawkcoords.x,hawkcoords.y,hawkcoords.z); - glRotatef(hawkrotation,0,1,0); + glRotatef(hawkyaw,0,1,0); glTranslatef(25,0,0); - distance=findDistancefast(&viewer,&realhawkcoords)*1.2; + distance=distsq(&viewer,&realhawkcoords)*1.2; glColor4f(light.color[0],light.color[1],light.color[2],(viewdistance*viewdistance-(distance-(viewdistance*viewdistance*fadestart))*(1/(1-fadestart)))/viewdistance/viewdistance); if((viewdistance*viewdistance-(distance-(viewdistance*viewdistance*fadestart))*(1/(1-fadestart)))/viewdistance/viewdistance>1) glColor4f(light.color[0],light.color[1],light.color[2],1); @@ -499,13 +508,13 @@ int Game::DrawGLScene(StereoSide side) glEnable(GL_BLEND); glEnable(GL_LIGHTING); terrainlight=terrain.getLighting(player[k].coords.x,player[k].coords.z); - distance=findDistancefast(&viewer,&player[k].coords); + distance=distsq(&viewer,&player[k].coords); distance=(viewdistance*viewdistance-(distance-(viewdistance*viewdistance*fadestart))*(1/(1-fadestart)))/viewdistance/viewdistance; glColor4f(terrainlight.x,terrainlight.y,terrainlight.z,distance); if(distance>=1) glDisable(GL_BLEND); if(distance>=.5){ - checkpoint=DoRotation(player[k].skeleton.joints[abs(Random()%player[k].skeleton.num_joints)].position,0,player[k].rotation,0)*player[k].scale+player[k].coords; + checkpoint=DoRotation(player[k].skeleton.joints[abs(Random()%player[k].skeleton.num_joints)].position,0,player[k].yaw,0)*player[k].scale+player[k].coords; checkpoint.y+=1; if(!player[k].occluded==0) i=checkcollide(viewer,checkpoint,player[k].lastoccluded); @@ -908,9 +917,9 @@ int Game::DrawGLScene(StereoSide side) float distance=0; closest=currenthotspot; for(i=0;i=0)||(hotspottype[i]<=40&&hotspottype[i]>=20))){ + if(distsq(&player[0].coords,&hotspot[i])=0)||(hotspottype[i]<=40&&hotspottype[i]>=20))){ closestdist=distance; closest=i; } @@ -920,7 +929,7 @@ int Game::DrawGLScene(StereoSide side) currenthotspot=closest; if(currenthotspot!=-1){ if(hotspottype[closest]<=10){ - if(findDistancefast(&player[0].coords,&hotspot[closest])glPrint(10,30,string,0,.8,1024,768); - sprintf (string, "Name: %s", registrationname); - text->glPrint(10,260,string,0,.8,1024,768); - - if(editorenabled) sprintf (string, "Map editor enabled."); else @@ -1215,11 +1220,11 @@ int Game::DrawGLScene(StereoSide side) if(editorenabled){ sprintf (string, "Object size: %f",editorsize); text->glPrint(10,75,string,0,.8,1024,768); - if(editorrotation>=0)sprintf (string, "Object rotation: %f",editorrotation); - else sprintf (string, "Object rotation: Random"); + if(editoryaw>=0)sprintf (string, "Object yaw: %f",editoryaw); + else sprintf (string, "Object yaw: Random"); text->glPrint(10,90,string,0,.8,1024,768); - if(editorrotation2>=0)sprintf (string, "Object rotation2: %f",editorrotation2); - else sprintf (string, "Object rotation2: Random"); + if(editorpitch>=0)sprintf (string, "Object pitch: %f",editorpitch); + else sprintf (string, "Object pitch: Random"); text->glPrint(10,105,string,0,.8,1024,768); sprintf (string, "Object type: %d",editortype); text->glPrint(10,120,string,0,.8,1024,768); @@ -1413,7 +1418,7 @@ int Game::DrawGLScene(StereoSide side) } } - if(minimap&&indialogue==-1){ + if(difficulty<2&&indialogue==-1){ // minimap float mapviewdist = 20000; glDisable(GL_DEPTH_TEST); @@ -1468,7 +1473,7 @@ int Game::DrawGLScene(StereoSide side) float tempdist; //~ int whichclosest; for(i=0;imaxdistance){ //~ whichclosest=i; maxdistance=tempdist; @@ -1476,7 +1481,7 @@ int Game::DrawGLScene(StereoSide side) } for(i=0;imaxdistance){ //~ whichclosest=i; maxdistance=tempdist; @@ -1491,17 +1496,17 @@ int Game::DrawGLScene(StereoSide side) glPushMatrix(); glScalef(1/(1/radius*256*terrain.scale*.4),1/(1/radius*256*terrain.scale*.4),1); glPopMatrix(); - glRotatef(player[0].lookrotation*-1+180,0,0,1); + glRotatef(player[0].lookyaw*-1+180,0,0,1); glTranslatef(-(center.x/terrain.scale/256*-2+1),(center.z/terrain.scale/256*-2+1),0); for(i=0;itypesleeping)glColor4f(0,0,0,opac*(1-distcheck/mapviewdist)); else if(player[i].dead)glColor4f(.3,.3,.3,opac*(1-distcheck/mapviewdist)); @@ -1571,7 +1576,7 @@ int Game::DrawGLScene(StereoSide side) else if(player[i].aitype==passivetype)glColor4f(0,1,0,opac*(1-distcheck/mapviewdist)); else glColor4f(1,1,0,1); glTranslatef(player[i].coords.x/terrain.scale/256*-2+1,player[i].coords.z/terrain.scale/256*2-1,0); - glRotatef(player[i].rotation+180,0,0,1); + glRotatef(player[i].yaw+180,0,0,1); glScalef(.005,.005,.005); glBegin(GL_QUADS); glTexCoord2f(0,0); @@ -1762,7 +1767,7 @@ int Game::DrawGLScene(StereoSide side) } glClear(GL_DEPTH_BUFFER_BIT); - ReSizeGLScene(90,.1f); + Game::ReSizeGLScene(90,.1f); glViewport(0,0,screenwidth,screenheight); if(drawmode!=normalmode){ @@ -2028,63 +2033,14 @@ int Game::DrawGLScene(StereoSide side) return 0; } -vector Game::ListCampaigns() { - DIR *campaigns = opendir(ConvertFileName(":Data:Campaigns")); - struct dirent *campaign = NULL; - if(!campaigns) { - perror("Problem while loading campaigns"); - cerr << "campaign folder was : " << ConvertFileName(":Data:Campaigns") << endl; - exit(EXIT_FAILURE); - } - vector campaignNames; - while ((campaign = readdir(campaigns)) != NULL) { - string name(campaign->d_name); - if(name.length()<5) - continue; - if(!name.compare(name.length()-4,4,".txt")) { - campaignNames.push_back(name.substr(0,name.length()-4)); - } - } - closedir(campaigns); - return campaignNames; -} - -void Game::LoadCampaign() { - if(!accountactive) - return; - ifstream ipstream(ConvertFileName((":Data:Campaigns:"+accountactive->getCurrentCampaign()+".txt").c_str())); - ipstream.ignore(256,':'); - int numlevels; - ipstream >> numlevels; - campaignlevels.clear(); - for(int i=0;i> cl; - campaignlevels.push_back(cl); - } - ipstream.close(); - - ifstream test(ConvertFileName((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str())); - if(test.good()) { - LoadTexture((":Data:Textures:"+accountactive->getCurrentCampaign()+":World.png").c_str(),&Mainmenuitems[7],0,0); - } else { - LoadTexture(":Data:Textures:World.png",&Mainmenuitems[7],0,0); - } - - if(accountactive->getCampaignChoicesMade()==0) { - accountactive->setCampaignScore(0); - accountactive->resetFasttime(); - } -} - -void Game::DrawMenu() { +void DrawMenu() { // !!! FIXME: hack: clamp framerate in menu so text input works correctly on fast systems. SDL_Delay(15); glDrawBuffer(GL_BACK); glReadBuffer(GL_BACK); glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - ReSizeGLScene(90,.1f); + Game::ReSizeGLScene(90,.1f); //draw menu background glClear(GL_DEPTH_BUFFER_BIT); @@ -2122,7 +2078,7 @@ void Game::DrawMenu() { glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); glEnable(GL_TEXTURE_2D); - glBindTexture( GL_TEXTURE_2D, Mainmenuitems[4]); + Game::Mainmenuitems[4].bind(); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex3f(-1,-1,0); @@ -2175,14 +2131,14 @@ void Game::DrawMenu() { glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); glPopMatrix(); - if(!waiting) { // hide the cursor while waiting for a key + if(!Game::waiting) { // hide the cursor while waiting for a key glPushMatrix(); - glTranslatef(mousecoordh-screenwidth/2,mousecoordv*-1+screenheight/2,0); + glTranslatef(Game::mousecoordh-screenwidth/2,Game::mousecoordv*-1+screenheight/2,0); glScalef((float)screenwidth/64,(float)screenwidth/64,1); glTranslatef(1,-1,0); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glColor4f(1,1,1,1); - glBindTexture( GL_TEXTURE_2D, cursortexture); + Game::cursortexture.bind(); glPushMatrix(); //glScalef(.25,.25,.25); glBegin(GL_QUADS);