X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameDraw.cpp;h=dd74893d7a9e80aa6b0b1f43e3247113f7eb3f02;hb=710fa624080c2f2db7923832e2fd9945f4dd8254;hp=7fe9f199164961f1cc22b12419979caa67ffed23;hpb=6e5fc0433956e44ba9ae92b544e51ac15c27c451;p=lugaru.git diff --git a/Source/GameDraw.cpp b/Source/GameDraw.cpp index 7fe9f19..dd74893 100644 --- a/Source/GameDraw.cpp +++ b/Source/GameDraw.cpp @@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Input.h" #include "Awards.h" +#include + using namespace std; extern XYZ viewer; @@ -1996,9 +1998,37 @@ 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)); + } + } + return campaignNames; +} + void Game::LoadCampaign() { if(!accountactive) return; + if(!Mainmenuitems[7]) { + 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); + } + } ifstream ipstream(ConvertFileName((":Data:Campaigns:"+accountactive->getCurrentCampaign()+".txt").c_str())); ipstream.ignore(256,':'); ipstream >> campaignnumlevels; @@ -2335,7 +2365,7 @@ void Game::DrawMenu() } if(mainmenu==5){ - nummenuitems=7+(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum; + nummenuitems=NB_CAMPAIGN_MENU_ITEM+1+(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum; sprintf (menustring[0], "%s",accountactive->getName()); startx[0]=5; @@ -2372,33 +2402,41 @@ void Game::DrawMenu() endx[5]=startx[5]+strlen(menustring[5])*10; starty[5]=180; endy[5]=starty[5]+20; + + sprintf (menustring[6], "Campaign : %s", accountactive->getCurrentCampaign().c_str()); + startx[6]=200; + endx[6]=startx[6]+strlen(menustring[6])*10; + starty[6]=420; + endy[6]=starty[6]+20; //World - sprintf (menustring[6], "World"); - startx[6]=30+120; - starty[6]=30+480-400-50; - endx[6]=startx[6]+400; - endy[6]=30+480-50; + sprintf (menustring[NB_CAMPAIGN_MENU_ITEM], "World"); + startx[NB_CAMPAIGN_MENU_ITEM]=30+120; + starty[NB_CAMPAIGN_MENU_ITEM]=30+480-400-50; + endx[NB_CAMPAIGN_MENU_ITEM]=startx[NB_CAMPAIGN_MENU_ITEM]+400; + endy[NB_CAMPAIGN_MENU_ITEM]=30+480-50; if((accountactive?accountactive->getCampaignChoicesMade():0)) { for(i=0;i<(accountactive?accountactive->getCampaignChoicesMade():0);i++) { - sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]); - startx[7+i]=30+120+campaignlocationx[levelorder[i]]*400/512; - starty[7+i]=30+30+(512-campaignlocationy[levelorder[i]])*400/512; - endx[7+i]=startx[7+i]+10; - endy[7+i]=starty[7+i]+10; + sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1+i], "%s", campaigndescription[levelorder[i]]); + startx[NB_CAMPAIGN_MENU_ITEM+1+i]=30+120+campaignlocationx[levelorder[i]]*400/512; + starty[NB_CAMPAIGN_MENU_ITEM+1+i]=30+30+(512-campaignlocationy[levelorder[i]])*400/512; + endx[NB_CAMPAIGN_MENU_ITEM+1+i]=startx[NB_CAMPAIGN_MENU_ITEM+1+i]+10; + endy[NB_CAMPAIGN_MENU_ITEM+1+i]=starty[NB_CAMPAIGN_MENU_ITEM+1+i]+10; } } - if(campaignchoicenum>0) + if(campaignchoicenum>0) { for(i=(accountactive?accountactive->getCampaignChoicesMade():0);i<(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum;i++){ - sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]); - startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-((accountactive?accountactive->getCampaignChoicesMade():0))]]*400/512; - starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-((accountactive?accountactive->getCampaignChoicesMade():0))]])*400/512; - endx[7+i]=startx[7+i]+10; - endy[7+i]=starty[7+i]+10; + sprintf (menustring[NB_CAMPAIGN_MENU_ITEM+1+i], "%s", campaigndescription[levelorder[i]]); + startx[NB_CAMPAIGN_MENU_ITEM+1+i]=30+120+campaignlocationx[campaignchoicewhich[i-((accountactive?accountactive->getCampaignChoicesMade():0))]]*400/512; + starty[NB_CAMPAIGN_MENU_ITEM+1+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-((accountactive?accountactive->getCampaignChoicesMade():0))]])*400/512; + endx[NB_CAMPAIGN_MENU_ITEM+1+i]=startx[NB_CAMPAIGN_MENU_ITEM+1+i]+10; + endy[NB_CAMPAIGN_MENU_ITEM+1+i]=starty[NB_CAMPAIGN_MENU_ITEM+1+i]+10; } + } + } if(mainmenu==6){ @@ -2655,7 +2693,7 @@ void Game::DrawMenu() for(i=0;istartx[i]&&(mousecoordh/screenwidth*640)starty[i]&&480-(mousecoordv/screenheight*480)0) && (i!=NB_CAMPAIGN_MENU_ITEM) ) selected=i; } } @@ -2816,7 +2854,7 @@ void Game::DrawMenu() } if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==18) { - if(mainmenu!=5||j<6) + if(mainmenu!=5||jaccountactive->getProgress() && (j6&&jNB_CAMPAIGN_MENU_ITEM&&j=6+(accountactive?accountactive->getCampaignChoicesMade():0)){ + if(j>=NB_CAMPAIGN_MENU_ITEM+(accountactive?accountactive->getCampaignChoicesMade():0)){ linestart.x=(startx[6+(accountactive?accountactive->getCampaignChoicesMade():0)]+endx[6+(accountactive?accountactive->getCampaignChoicesMade():0)])/2; linestart.y=(starty[6+(accountactive?accountactive->getCampaignChoicesMade():0)]+endy[6+(accountactive?accountactive->getCampaignChoicesMade():0)])/2; } @@ -2913,7 +2951,7 @@ void Game::DrawMenu() Normalise(&offset); glDisable(GL_TEXTURE_2D); - if(j<6+(accountactive?accountactive->getCampaignChoicesMade():0)){ + if(jgetCampaignChoicesMade():0)){ glColor4f(0.5,0,0,1); endsize=.5; } else { @@ -2925,7 +2963,7 @@ void Game::DrawMenu() linestart+=fac*4*startsize; lineend-=fac*4*endsize; - if(!(j>7+(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum)){ + if(!(j>NB_CAMPAIGN_MENU_ITEM+1+(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum)){ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); glBegin(GL_QUADS); @@ -2944,21 +2982,24 @@ void Game::DrawMenu() } - if(j==6) glBindTexture( GL_TEXTURE_2D, Mainmenuitems[7]); + if(j==NB_CAMPAIGN_MENU_ITEM) glBindTexture( GL_TEXTURE_2D, Mainmenuitems[7]); else glBindTexture( GL_TEXTURE_2D, Mapcircletexture); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - if(j-7<(accountactive?accountactive->getCampaignChoicesMade():0)) glColor4f(0.5,0,0,1); - if(j-7>=(accountactive?accountactive->getCampaignChoicesMade():0)) glColor4f(1,0,0,1); - if(j==6) glColor4f(1,1,1,1); + if(j-NB_CAMPAIGN_MENU_ITEM-1 < (accountactive?accountactive->getCampaignChoicesMade():0)) glColor4f(0.5,0,0,1); + if(j-NB_CAMPAIGN_MENU_ITEM-1 >= (accountactive?accountactive->getCampaignChoicesMade():0)) glColor4f(1,0,0,1); + if(j==NB_CAMPAIGN_MENU_ITEM) glColor4f(1,1,1,1); XYZ midpoint; float itemsize; itemsize=abs(startx[j]-endx[j])/2; midpoint=0; midpoint.x=(startx[j]+endx[j])/2; midpoint.y=(starty[j]+endy[j])/2; - if(j>6&&(j-7<(accountactive?accountactive->getCampaignChoicesMade():0)))itemsize*=.5; - if(!(j-7>(accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum)) + if (j>NB_CAMPAIGN_MENU_ITEM && + (j-NB_CAMPAIGN_MENU_ITEM-1 < (accountactive?accountactive->getCampaignChoicesMade():0))) { + itemsize*=.5; + } + if(!(j-NB_CAMPAIGN_MENU_ITEM-1 > (accountactive?accountactive->getCampaignChoicesMade():0)+campaignchoicenum)) { glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); @@ -2975,7 +3016,7 @@ void Game::DrawMenu() glPopMatrix(); glEnable(GL_BLEND); //glDisable(GL_ALPHA_TEST); - if(j<4)glBlendFunc(GL_SRC_ALPHA,GL_ONE); + if(j<4) glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Black is transparent for(i=0;i<10;i++) { if(1-((float)i)/10-(1-selectedlong[j])>0) @@ -3003,7 +3044,7 @@ void Game::DrawMenu() glPopMatrix(); glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - if(j-7>=(accountactive?accountactive->getCampaignChoicesMade():0)){ + if(j-NB_CAMPAIGN_MENU_ITEM-1>=(accountactive?accountactive->getCampaignChoicesMade():0)){ text.glPrintOutlined(0.9,0,0,startx[j]+10,starty[j]-4,menustring[j],0,0.6,640,480); glDisable(GL_DEPTH_TEST); } @@ -3015,8 +3056,8 @@ void Game::DrawMenu() glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPopMatrix(); - if(mainmenu==1||mainmenu==2) - //if(transition<.1||transition>.9){ + if(mainmenu==1||mainmenu==2) { + //if(transition<.1||transition>.9) { glClear(GL_DEPTH_BUFFER_BIT); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.001f); @@ -3044,6 +3085,7 @@ void Game::DrawMenu() glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPopMatrix(); //} + } glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPushMatrix(); // Store The Projection Matrix