#include "Input.h"
#include "Awards.h"
+#include <dirent.h>
+
using namespace std;
extern XYZ viewer;
return 0;
}
+vector<string> 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<string> 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() {
- ifstream ipstream(ConvertFileName(":Data:Campaigns:main.txt"));
+ if(!accountactive)
+ return;
+ ifstream ipstream(ConvertFileName((":Data:Campaigns:"+accountactive->getCurrentCampaign()+".txt").c_str()));
ipstream.ignore(256,':');
ipstream >> campaignnumlevels;
- for(int i=0;i<campaignnumlevels;i++){
+ for(int i=0;i<campaignnumlevels;i++) {
ipstream.ignore(256,':');
ipstream.ignore(256,':');
ipstream.ignore(256,' ');
levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)];
levelvisible[levelorder[i+1]]=1;
}
- int whichlevelstart = (accountactive?accountactive->getCampaignChoicesMade():0)-1;
+ int whichlevelstart = accountactive->getCampaignChoicesMade()-1;
if(whichlevelstart<0){
- if(accountactive) {
- accountactive->setCampaignScore(0);
- accountactive->resetFasttime();
- }
+ accountactive->setCampaignScore(0);
+ accountactive->resetFasttime();
campaignchoicenum=1;
campaignchoicewhich[0]=0;
}
starty[9]=10;
endy[9]=starty[9]+20;
}
+
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;
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){
}
if(mainmenu==1||mainmenu==2){
- nummenuitems=7;
+ nummenuitems=4;
startx[0]=150;
starty[0]=480-128;
endx[0]=150+256;
endy[3]=480-306;
}
- /*startx[4]=150;
- starty[4]=480-256;
- endx[4]=150+256;
- endy[4]=480;
- */
- /*if(anim==0){
- startx[4]=380;
- starty[4]=480-140-256;
- endx[4]=380+256;
- endy[4]=480-140;
-
- startx[5]=145;
- starty[5]=480-138-256;
- endx[5]=145+256;
- endy[5]=480-138;
-
- startx[6]=254;
- starty[6]=480-144-256;
- endx[6]=254+256;
- endy[6]=480-144;
- }*/
}
selected=-1;
- if(mainmenu==1||mainmenu==2)
- for(i=1;i<4;i++){
- if((mousecoordh/screenwidth*640)>startx[i]&&(mousecoordh/screenwidth*640)<endx[i]&&480-(mousecoordv/screenheight*480)>starty[i]&&480-(mousecoordv/screenheight*480)<endy[i]) {
- selected=i;
- }
- }
-
- if(mainmenu==3||mainmenu==4||mainmenu==5||mainmenu==6||mainmenu==7||mainmenu==8||mainmenu==9||mainmenu==10||mainmenu==18)
- for(i=0;i<nummenuitems;i++) {
- if((mousecoordh/screenwidth*640)>startx[i]&&(mousecoordh/screenwidth*640)<endx[i]&&480-(mousecoordv/screenheight*480)>starty[i]&&480-(mousecoordv/screenheight*480)<endy[i]) {
- if(mainmenu!=5) selected=i;
- else if( (i!=0) && (i!=6) ) selected=i;
- }
+ for(i=0;i<nummenuitems;i++) {
+ if((mousecoordh/screenwidth*640)>startx[i]&&(mousecoordh/screenwidth*640)<endx[i]&&480-(mousecoordv/screenheight*480)>starty[i]&&480-(mousecoordv/screenheight*480)<endy[i]) {
+ if(mainmenu!=5) selected=i;
+ else if( (i>0) && (i!=NB_CAMPAIGN_MENU_ITEM) ) selected=i;
}
+ }
for(i=0;i<nummenuitems;i++){
if(selected==i) {
offsety[i]*=.06f;
offsetx[i]=0;
offsety[i]=0;
- if(i>=4&&(mainmenu==1||mainmenu==2)){
- selectedlong[i]=0;
- offsetx[i]=(startx[i]+endx[i])/2-(640+190)/2;
- offsety[i]=(starty[i]+endy[i])/2-(336+150)/2;
- offsetx[i]*=.06f;
- offsety[i]*=.06f;
- }
}
if(mainmenu==1||mainmenu==2){
glEnable(GL_TEXTURE_2D);
for(j=0;j<nummenuitems;j++)
{
- if(j>3 && (mainmenu==1||mainmenu==2))
- continue;
//glDisable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glPopMatrix();
glEnable(GL_BLEND);
//glDisable(GL_ALPHA_TEST);
- if(j<4)glBlendFunc(GL_SRC_ALPHA,GL_ONE);
+ glBlendFunc(GL_SRC_ALPHA,GL_ONE);
for(i=0;i<10;i++)
{
if(1-((float)i)/10-(1-selectedlong[j])>0)
}
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||j<NB_CAMPAIGN_MENU_ITEM)
{
glColor4f(1,0,0,1);
if( (mainmenu==9) && j>accountactive->getProgress() && (j<numchallengelevels) )
}
else
{
+ if(j==NB_CAMPAIGN_MENU_ITEM) {
+ //glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); // black background for the map
+ glBlendFunc(GL_SRC_ALPHA,GL_ONE); // no background
+ }
+
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.001f);
glDisable(GL_DEPTH_TEST); // Disables Depth Testing
glDisable(GL_CULL_FACE);
glDisable(GL_LIGHTING);
- if(j==6)glColor4f(1,1,1,1);
+ if(j==NB_CAMPAIGN_MENU_ITEM) glColor4f(1,1,1,1);
else glColor4f(1,0,0,1);
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
//Draw world, draw map
glTranslatef(2,-5,0);
- if(j>6&&j<nummenuitems-1)
+ if(j>NB_CAMPAIGN_MENU_ITEM&&j<nummenuitems-1)
{
XYZ linestart,lineend,offset;
XYZ fac;
//float linestartx,lineendx,linestarty,lineendy,offsetx,offsety;
linestart.x=(startx[j]+endx[j])/2;
linestart.y=(starty[j]+endy[j])/2;
- if(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;
}
Normalise(&offset);
glDisable(GL_TEXTURE_2D);
- if(j<6+(accountactive?accountactive->getCampaignChoicesMade():0)){
+ if(j<NB_CAMPAIGN_MENU_ITEM+(accountactive?accountactive->getCampaignChoicesMade():0)){
glColor4f(0.5,0,0,1);
endsize=.5;
} else {
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);
}
- 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();
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)
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);
}
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);
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glPopMatrix();
//}
+ }
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glPushMatrix(); // Store The Projection Matrix