From: Côme BERNIGAUD Date: Sat, 5 Jun 2010 20:51:18 +0000 (+0400) Subject: Move player account handling into separate class X-Git-Url: https://git.jsancho.org/?a=commitdiff_plain;h=cd46cab54acd39ff8c02b204844f1ce53fd2edbc;p=lugaru.git Move player account handling into separate class --- CMakeLists.txt | 2 + Source/Account.cpp | 221 ++++++++++++++++++++++++++++++ Source/Account.h | 90 ++++++++++++ Source/GameDraw.cpp | 142 ++++++++----------- Source/GameInitDispose.cpp | 117 +---------------- Source/GameTick.cpp | 324 ++++++++++---------------------------------- Source/Globals.cpp | 14 -- 7 files changed, 452 insertions(+), 458 deletions(-) create mode 100644 Source/Account.cpp create mode 100644 Source/Account.h --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 766bd37..d19e669 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") set(LUGARU_SRCS ${SRCDIR}/Frustum.cpp + ${SRCDIR}/Account.cpp ${SRCDIR}/GameDraw.cpp ${SRCDIR}/GameInitDispose.cpp ${SRCDIR}/GameTick.cpp @@ -84,6 +85,7 @@ set(LUGARU_SRCS set(LUGARU_H ${SRCDIR}/Constants.h ${SRCDIR}/Frustum.h + ${SRCDIR}/Account.h ${SRCDIR}/Game.h ${SRCDIR}/Lights.h ${SRCDIR}/LinkedList.h diff --git a/Source/Account.cpp b/Source/Account.cpp new file mode 100644 index 0000000..90b585a --- /dev/null +++ b/Source/Account.cpp @@ -0,0 +1,221 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010 - MCMic + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "Account.h" +#include "binio.h" +#include +#include "MacCompatibility.h" +#include "string.h" + +using namespace std; + +extern bool debugmode; + +vector Account::accounts = vector(); + +Account::Account(string n) { + name = string(n); + difficulty = 0; + progress = 0; + points = 0; + memset(highscore, 0, sizeof(highscore)); + memset(fasttime, 0, sizeof(fasttime)); + memset(unlocked, 0, sizeof(unlocked)); + campaignhighscore = 0; + campaignfasttime = 0; + campaignscore = 0; + campaigntime = 0; + campaignchoicesmade = 0; + memset(campaignchoices, 0, sizeof(campaignchoices)); +} + +Account* Account::add(string name) { + accounts.push_back(new Account(name)); + return accounts.back(); +} + +Account* Account::get(int i) { + if(igetName(),a); + return accounts.front(); +} + +int Account::getDifficulty() { + return difficulty; +} + +void Account::endGame() { + campaignchoicesmade=0; + campaignscore=0; + campaigntime=0; +} + +void Account::winCampaignLevel(int choice, float score, float time) { + campaignchoices[campaignchoicesmade++] = choice; + setCampaignScore(campaignscore+score); + campaigntime = time; +} + +void Account::winLevel(int level, float score, float time) { + if(!debugmode) { + if(score>highscore[level]) + highscore[level]=score; + if(timecampaigntime)); + funpackf(tfile, "Bf", &(acc->campaignscore)); + funpackf(tfile, "Bf", &(acc->campaignfasttime)); + funpackf(tfile, "Bf", &(acc->campaignhighscore)); + funpackf(tfile, "Bi", &(acc->difficulty)); + funpackf(tfile, "Bi", &(acc->progress)); + funpackf(tfile, "Bi", &(acc->campaignchoicesmade)); + for(j=0;jcampaignchoicesmade;j++) + { + funpackf(tfile, "Bi", &(acc->campaignchoices[j])); + if (acc->campaignchoices[j] >= 10) + { + acc->campaignchoices[j] = 0; + } + } + funpackf(tfile, "Bf", &(acc->points)); + for(j=0;j<50;j++) + { + funpackf(tfile, "Bf", &(acc->highscore[j])); + funpackf(tfile, "Bf", &(acc->fasttime[j])); + } + for(j=0;j<60;j++) + { + funpackf(tfile, "Bb", &(acc->unlocked[j])); + } + int temp; + char ctemp; + funpackf(tfile, "Bi", &temp); + for(j=0;jname.append(1,ctemp); + } + if(!strcmp(acc->name.c_str(),"")) + acc->name="Lugaru Player"; // no empty player name security. + accounts.push_back(acc); + } + + fclose(tfile); + return get(accountactive); + } else { + printf("filenotfound\n"); + return NULL; + } +} + +void Account::saveFile(string filename, Account* accountactive) { + FILE *tfile; + int numaccounts; + int j; + + tfile=fopen(ConvertFileName(filename.c_str()), "wb" ); + if(tfile) + { + printf("writing %d accounts :\n",getNbAccounts()); + fpackf(tfile, "Bi", getNbAccounts()); + fpackf(tfile, "Bi", indice(accountactive)); + + for(int i=0;igetName()); + fpackf(tfile, "Bf", a->campaigntime); + fpackf(tfile, "Bf", a->campaignscore); + fpackf(tfile, "Bf", a->campaignfasttime); + fpackf(tfile, "Bf", a->campaignhighscore); + fpackf(tfile, "Bi", a->difficulty); + fpackf(tfile, "Bi", a->progress); + fpackf(tfile, "Bi", a->campaignchoicesmade); + for(j=0;jcampaignchoicesmade;j++) + { + fpackf(tfile, "Bi", a->campaignchoices[j]); + } + fpackf(tfile, "Bf", a->points); + for(j=0;j<50;j++) + { + fpackf(tfile, "Bf", a->highscore[j]); + fpackf(tfile, "Bf", a->fasttime[j]); + } + for(j=0;j<60;j++) + { + fpackf(tfile, "Bb", a->unlocked[j]); + } + fpackf(tfile, "Bi", a->name.size()); + for(j=0;jname.size();j++) + { + fpackf(tfile, "Bb", a->name[j]); + } + } + + fclose(tfile); + } +} + +int Account::indice(Account* a) { + for(int i=0; i < accounts.size(); i++) { + if(accounts[i]==a) + return i; + } + return -1; +} diff --git a/Source/Account.h b/Source/Account.h new file mode 100644 index 0000000..3cf94dd --- /dev/null +++ b/Source/Account.h @@ -0,0 +1,90 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games +Copyright (C) 2010 - MCMic + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#ifndef _Account_H_ +#define _Account_H_ + +#include +#include +#include + + +class Account { + public: + static void destroy(int i); + static Account* destroy(Account* a); + static Account* add(std::string name); + static Account* get(int i); + static Account* loadFile(std::string filename); + static void saveFile(std::string filename, Account* accountactive); + static int indice(Account* a); + + void endGame(); + void winCampaignLevel(int choice, float score, float time); + void winLevel(int level, float score, float time); + + // getter and setters + int getDifficulty(); + void setDifficulty(int i) { difficulty = i; }; + const char* getName() { return name.c_str(); }; + float getCampaignScore() { return campaignscore; }; + int getCampaignChoicesMade() { return campaignchoicesmade; }; + int getCampaignChoice(int i) { return campaignchoices[i]; }; + void setCampaignScore(int s) { + campaignscore=s; + if(s>campaignhighscore) + campaignhighscore=s; + }; + void setCampaignFinalTime(float t) { + campaigntime = t; + if((t accounts; +}; + +#endif diff --git a/Source/GameDraw.cpp b/Source/GameDraw.cpp index 083af9d..288022d 100644 --- a/Source/GameDraw.cpp +++ b/Source/GameDraw.cpp @@ -107,17 +107,7 @@ extern XYZ hotspot[40]; extern int hotspottype[40]; extern float hotspotsize[40]; extern char hotspottext[40][256]; -extern int currenthotspot; - -extern int numaccounts; -extern int accountactive; -extern int accountdifficulty[10]; -extern int accountprogress[10]; -extern float accountpoints[10]; -extern float accounthighscore[10][50]; -extern float accountfasttime[10][50]; -extern bool accountunlocked[10][60]; -extern char accountname[10][256]; +extern int currenthotspot;; extern int numfalls; extern int numflipfail; @@ -165,14 +155,6 @@ extern int directing; extern float dialoguetime; extern int dialoguegonethrough[20]; -extern int accountcampaignchoicesmade[10]; -extern int accountcampaignchoices[10][5000]; - -extern float accountcampaignhighscore[10]; -extern float accountcampaignfasttime[10]; -extern float accountcampaignscore[10]; -extern float accountcampaigntime[10]; - extern bool gamestarted; extern bool showdamagebar; @@ -1212,8 +1194,8 @@ int Game::DrawGLScene(StereoSide side) if(!tutoriallevel&&!winfreeze&&indialogue==-1&&!mainmenu){ if(campaign){ - if(!scoreadded)sprintf (string, "Score: %d", (int)accountcampaignscore[accountactive]+(int)bonustotal);//(int)bonustotal); - if(scoreadded)sprintf (string, "Score: %d", (int)accountcampaignscore[accountactive]);//(int)bonustotal); + if(!scoreadded)sprintf (string, "Score: %d", (int)accountactive->getCampaignScore()+(int)bonustotal);//(int)bonustotal); + if(scoreadded)sprintf (string, "Score: %d", (int)accountactive->getCampaignScore());//(int)bonustotal); } if(!campaign)sprintf (string, "Score: %d", (int)bonustotal); glColor4f(0,0,0,1); @@ -2355,7 +2337,7 @@ int Game::DrawGLScene(StereoSide side) if(mainmenu==5){ ifstream ipstream(ConvertFileName(":Data:Campaigns:main.txt")); //campaignnumlevels=0; - //accountcampaignchoicesmade[accountactive]=0; + //accountactive->getCampaignChoicesMade()=0; ipstream.ignore(256,':'); ipstream >> campaignnumlevels; for(i=0;igetCampaignChoicesMade()) + for(i=0;igetCampaignChoicesMade();i++){ + levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)]; levelvisible[levelorder[i+1]]=1; } int whichlevelstart; - whichlevelstart=accountcampaignchoicesmade[accountactive]-1; + whichlevelstart=accountactive->getCampaignChoicesMade()-1; if(whichlevelstart<0){ - accountcampaignscore[accountactive]=0; - accountcampaignfasttime[accountactive]=0; + accountactive->setCampaignScore(0); + accountactive->resetFasttime(); campaignchoicenum=1; campaignchoicewhich[0]=0; } @@ -2411,8 +2393,7 @@ int Game::DrawGLScene(StereoSide side) { campaignchoicenum=campaignnumnext[levelorder[whichlevelstart]]; if(campaignchoicenum==0){ - if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive]; - if(accountcampaignfasttime[accountactive]==0||accountcampaigntime[accountactive]getCampaignFasttime()==0||accountcampaigntime[accountactive]getCampaignFasttime())accountactive->getCampaignFasttime()=accountcampaigntime[accountactive]; } if(campaignchoicenum) for(i=0;igetCampaignChoicesMade()+campaignchoicenum; - sprintf (menustring[0], "%s",accountname[accountactive]); + sprintf (menustring[0], "%s",accountactive->getName()); startx[0]=5; starty[0]=400; endx[0]=startx[0]+strlen(menustring[0])*10; @@ -2779,8 +2760,8 @@ int Game::DrawGLScene(StereoSide side) movex[6]=0; movey[6]=0; - if(accountcampaignchoicesmade[accountactive]) - for(i=0;igetCampaignChoicesMade()) + for(i=0;igetCampaignChoicesMade();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; @@ -2791,10 +2772,10 @@ int Game::DrawGLScene(StereoSide side) } if(campaignchoicenum>0) - for(i=accountcampaignchoicesmade[accountactive];igetCampaignChoicesMade();igetCampaignChoicesMade()+campaignchoicenum;i++){ sprintf (menustring[7+i], "%s", campaigndescription[levelorder[i]]); - startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-(accountcampaignchoicesmade[accountactive])]]*400/512; - starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-(accountcampaignchoicesmade[accountactive])]])*400/512; + startx[7+i]=30+120+campaignlocationx[campaignchoicewhich[i-(accountactive->getCampaignChoicesMade())]]*400/512; + starty[7+i]=30+30+(512-campaignlocationy[campaignchoicewhich[i-(accountactive->getCampaignChoicesMade())]])*400/512; endx[7+i]=startx[7+i]+10; endy[7+i]=starty[7+i]+10; movex[7+i]=0; @@ -2894,12 +2875,12 @@ int Game::DrawGLScene(StereoSide side) movey[5]=0; } - if(mainmenu==7){ - nummenuitems=numaccounts+2; + if(mainmenu==7){ + nummenuitems=Account::getNbAccounts()+2; int num; - if(numaccounts<8) + if(Account::getNbAccounts()<8) sprintf (menustring[0], "New User"); else sprintf (menustring[0], "No More Users"); @@ -2915,26 +2896,25 @@ int Game::DrawGLScene(StereoSide side) num=1; - if(numaccounts) - for(i=0;igetName()); startx[num]=10; + starty[num]=360-20-20*num; endx[num]=startx[num]+strlen(menustring[num])*10; - starty[num]=10; endy[num]=starty[num]+20; movex[num]=0; movey[num]=0; + + num++; + } + + sprintf (menustring[num], "Back"); + startx[num]=10; + endx[num]=startx[num]+strlen(menustring[num])*10; + starty[num]=10; + endy[num]=starty[num]+20; + movex[num]=0; + movey[num]=0; } if(mainmenu==8){ nummenuitems=3; @@ -2976,14 +2956,14 @@ int Game::DrawGLScene(StereoSide side) strcpy(menustring[j],temp); for(i=0;i<17;i++)if(menustring[j][i]=='\0')menustring[j][i]=' '; menustring[j][17]='\0'; - sprintf (temp, "%d",(int)accounthighscore[accountactive][j]); + sprintf (temp, "%d",(int)accountactive->getHighScore(j)); strcat(menustring[j],temp); for(i=18;i<32;i++)if(menustring[j][i]=='\0')menustring[j][i]=' '; menustring[j][32]='\0'; - sprintf (temp, "%d:",(int)(((int)accountfasttime[accountactive][j]-(int)(accountfasttime[accountactive][j])%60)/60)); + sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(j)-(int)(accountactive->getFastTime(j))%60)/60)); strcat(menustring[j],temp); - if((int)(accountfasttime[accountactive][j])%60<10)strcat(menustring[j],"0"); - sprintf (temp, "%d",(int)(accountfasttime[accountactive][j])%60); + if((int)(accountactive->getFastTime(j))%60<10)strcat(menustring[j],"0"); + sprintf (temp, "%d",(int)(accountactive->getFastTime(j))%60); strcat(menustring[j],temp); startx[j]=10; @@ -3023,14 +3003,14 @@ int Game::DrawGLScene(StereoSide side) strcpy(menustring[j],temp); for(i=0;i<17;i++)if(menustring[j][i]=='\0')menustring[j][i]=' '; menustring[j][17]='\0'; - sprintf (temp, "%d",(int)accounthighscore[accountactive][j]); + sprintf (temp, "%d",(int)accountactive->getHighScore(j)); strcat(menustring[j],temp); for(i=18;i<32;i++)if(menustring[j][i]=='\0')menustring[j][i]=' '; menustring[j][32]='\0'; - sprintf (temp, "%d:",(int)(((int)accountfasttime[accountactive][j]-(int)(accountfasttime[accountactive][j])%60)/60)); + sprintf (temp, "%d:",(int)(((int)accountactive->getFastTime(j)-(int)(accountactive->getFastTime(j))%60)/60)); strcat(menustring[j],temp); - if((int)(accountfasttime[accountactive][j])%60<10)strcat(menustring[j],"0"); - sprintf (temp, "%d",(int)(accountfasttime[accountactive][j])%60); + if((int)(accountactive->getFastTime(j))%60<10)strcat(menustring[j],"0"); + sprintf (temp, "%d",(int)(accountactive->getFastTime(j))%60); strcat(menustring[j],temp); startx[j]=10; @@ -3099,7 +3079,7 @@ int Game::DrawGLScene(StereoSide side) strcpy(menustring[4],temp); for(i=0;i<20;i++)if(menustring[4][i]=='\0')menustring[4][i]=' '; menustring[4][20]='\0'; - sprintf (temp, "%d",(int)accountcampaignscore[accountactive]); + sprintf (temp, "%d",(int)accountactive->getCampaignScore()); strcat(menustring[4],temp); startx[4]=190; endx[4]=startx[4]+strlen(menustring[4])*10; @@ -3127,7 +3107,7 @@ int Game::DrawGLScene(StereoSide side) strcpy(menustring[5],temp); for(i=0;i<20;i++)if(menustring[5][i]=='\0')menustring[5][i]=' '; menustring[5][20]='\0'; - sprintf (temp, "%d",(int)accountcampaignhighscore[accountactive]); + sprintf (temp, "%d",(int)accountactive->getCampaignHighScore()); strcat(menustring[5],temp); startx[5]=190; endx[5]=startx[5]+strlen(menustring[5])*10; @@ -3141,7 +3121,7 @@ int Game::DrawGLScene(StereoSide side) strcpy(menustring[7],temp); for(i=0;i<20;i++)if(menustring[7][i]=='\0')menustring[7][i]=' '; menustring[7][20]='\0'; - sprintf (temp, "%d",(int)accountcampaignfasttime[accountactive]); + sprintf (temp, "%d",(int)accountactive->getCampaignFasttime()); strcat(menustring[7],temp); startx[7]=200; endx[7]=startx[7]+strlen(menustring[7])*10; @@ -3571,8 +3551,8 @@ int Game::DrawGLScene(StereoSide side) if(mainmenu!=5||j<6) { glColor4f(1,0,0,1); - if(mainmenu==9&&j>accountprogress[accountactive]&&jaccountprogress[accountactive]&&jaccountactive->getProgress()&&jaccountactive->getProgress()&&j0){ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); @@ -3597,8 +3577,8 @@ int Game::DrawGLScene(StereoSide side) if(1-((float)i)/15-(1-selectedlong[j])>0) { glColor4f(1,0,0,(1-((float)i)/10-(1-selectedlong[j]))*.25); - if(mainmenu==9&&j>accountprogress[accountactive]&&jaccountprogress[accountactive]&&jaccountactive->getProgress()&&jaccountactive->getProgress()&&j=6+accountcampaignchoicesmade[accountactive]){ - linestart.x=(startx[6+accountcampaignchoicesmade[accountactive]]+endx[6+accountcampaignchoicesmade[accountactive]])/2; - linestart.y=(starty[6+accountcampaignchoicesmade[accountactive]]+endy[6+accountcampaignchoicesmade[accountactive]])/2; + if(j>=6+accountactive->getCampaignChoicesMade()){ + linestart.x=(startx[6+accountactive->getCampaignChoicesMade()]+endx[6+accountactive->getCampaignChoicesMade()])/2; + linestart.y=(starty[6+accountactive->getCampaignChoicesMade()]+endy[6+accountactive->getCampaignChoicesMade()])/2; } lineend.x=(startx[j+1]+endx[j+1])/2; lineend.y=(starty[j+1]+endy[j+1])/2; @@ -3676,12 +3656,12 @@ int Game::DrawGLScene(StereoSide side) Normalise(&offset); glDisable(GL_TEXTURE_2D); - if(j<6+accountcampaignchoicesmade[accountactive]){ + if(j<6+accountactive->getCampaignChoicesMade()){ glColor4f(0.5,0,0,1); startsize=.5; endsize=.5; } - if(j>=6+accountcampaignchoicesmade[accountactive]){ + if(j>=6+accountactive->getCampaignChoicesMade()){ glColor4f(1,0,0,1); endsize=1; startsize=.5; @@ -3690,7 +3670,7 @@ int Game::DrawGLScene(StereoSide side) linestart+=fac*4*startsize; lineend-=fac*4*endsize; - if(!(j>7+accountcampaignchoicesmade[accountactive]+campaignchoicenum)){ + if(!(j>7+accountactive->getCampaignChoicesMade()+campaignchoicenum)){ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); glBegin(GL_QUADS); @@ -3713,8 +3693,8 @@ int Game::DrawGLScene(StereoSide side) 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=accountcampaignchoicesmade[accountactive])glColor4f(1,0,0,1); + if(j-7getCampaignChoicesMade())glColor4f(0.5,0,0,1); + if(j-7>=accountactive->getCampaignChoicesMade())glColor4f(1,0,0,1); if(j==6)glColor4f(1,1,1,1); XYZ midpoint; float itemsize; @@ -3722,8 +3702,8 @@ int Game::DrawGLScene(StereoSide side) midpoint=0; midpoint.x=(startx[j]+endx[j])/2; midpoint.y=(starty[j]+endy[j])/2; - if(j>6&&(j-7accountcampaignchoicesmade[accountactive]+campaignchoicenum)) + if(j>6&&(j-7getCampaignChoicesMade()))itemsize*=.5; + if(!(j-7>accountactive->getCampaignChoicesMade()+campaignchoicenum)) { glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); @@ -3768,7 +3748,7 @@ int Game::DrawGLScene(StereoSide side) glPopMatrix(); glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix - if(j-7>=accountcampaignchoicesmade[accountactive]){ + if(j-7>=accountactive->getCampaignChoicesMade()){ //glColor4f(0,0,0,1); //text.glPrintOutline(startx[j]+10-1.5,starty[j]-4-1.5,menustring[j],0,0.6*1.25,640,480); //glColor4f(1,0,0,1); diff --git a/Source/GameInitDispose.cpp b/Source/GameInitDispose.cpp index 9fb279b..402c761 100644 --- a/Source/GameInitDispose.cpp +++ b/Source/GameInitDispose.cpp @@ -78,16 +78,6 @@ extern float slomospeed; extern char mapname[256]; extern bool gamestarted; -extern int numaccounts; -extern int accountactive; -extern int accountdifficulty[10]; -extern int accountprogress[10]; -extern float accountpoints[10]; -extern float accounthighscore[10][50]; -extern float accountfasttime[10][50]; -extern bool accountunlocked[10][60]; -extern char accountname[10][256]; - extern int numdialogues; extern int numdialogueboxes[20]; extern int dialoguetype[20]; @@ -131,59 +121,11 @@ void Game::Dispose() LOGFUNC; if(endgame==2){ - accountcampaignchoicesmade[accountactive]=0; - accountcampaignscore[accountactive]=0; - accountcampaigntime[accountactive]=0; + accountactive->endGame(); endgame=0; } - - sprintf (mapname, ":Data:Users"); - - FILE *tfile; - tfile=fopen( ConvertFileName(mapname), "wb" ); - if (tfile) - { - fpackf(tfile, "Bi", numaccounts); - fpackf(tfile, "Bi", accountactive); - if(numaccounts>0) - { - for(i=0;i0) - { - for(j=0;j<(int)strlen(accountname[i]);j++) - { - fpackf(tfile, "Bb", accountname[i][j]); - } - } - } - } - - fclose(tfile); - } + Account::saveFile(":Data:Users", accountactive); TexIter it = textures.begin(); for (; it != textures.end(); ++it) @@ -996,60 +938,7 @@ void Game::InitGame() numchallengelevels=14; - - FILE *tfile; - - accountactive=-1; - - sprintf (mapname, ":Data:Users"); - tfile=fopen( ConvertFileName(mapname), "rb" ); - if(tfile) - { - funpackf(tfile, "Bi", &numaccounts); - funpackf(tfile, "Bi", &accountactive); - if(numaccounts>0) - { - for(i=0;i= 10) - { - accountcampaignchoices[i][j] = 0; - } - } - funpackf(tfile, "Bf", &accountpoints[i]); - for(j=0;j<50;j++) - { - funpackf(tfile, "Bf", &accounthighscore[i][j]); - funpackf(tfile, "Bf", &accountfasttime[i][j]); - } - for(j=0;j<60;j++) - { - funpackf(tfile, "Bb", &accountunlocked[i][j]); - } - int temp; - funpackf(tfile, "Bi", &temp); - if(temp>0) - { - for(j=0;jgetDifficulty(); if(difficulty!=2)minimap=1; else minimap=0; @@ -2536,23 +2518,23 @@ void Game::Tick() } mainmenutogglekeydown=1; } - if(!IsKeyDown(theKeyMap, MAC_ESCAPE_KEY)){ + if(!Input::isKeyDown(SDLK_ESCAPE)){ mainmenutogglekeydown=0; } } /*static bool minimaptogglekeydown; - if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!minimaptogglekeydown){ + if(Input::isKeyDown(SDLK_TAB)&&!minimaptogglekeydown){ minimap=1-minimap; minimaptogglekeydown=1; } - if(!IsKeyDown(theKeyMap, MAC_TAB_KEY)){ + if(!Input::isKeyDown(SDLK_TAB)){ minimaptogglekeydown=0; } */ static bool minimaptogglekeydown; - if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!minimaptogglekeydown&&tutoriallevel){ + if(Input::isKeyDown(SDLK_TAB)&&!minimaptogglekeydown&&tutoriallevel){ if(tutorialstage!=51) tutorialstagetime=tutorialmaxtime; PlaySoundEx( consolefailsound, samp[consolefailsound], NULL, true); @@ -2560,46 +2542,26 @@ void Game::Tick() OPENAL_SetPaused(channels[consolefailsound], false); minimaptogglekeydown=1; } - if(!IsKeyDown(theKeyMap, MAC_TAB_KEY)){ + if(!Input::isKeyDown(SDLK_TAB)){ minimaptogglekeydown=0; } if(mainmenu){ //menu buttons if(mainmenu==1||mainmenu==2){ - if(Button()&&!oldbutton&&selected==1){ + if(Input::Button()&&!oldbutton&&selected==1){ if(!gameon){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; + fireSound(firestartsound); + + flash(); //new game - if(accountactive!=-1)mainmenu=5; - else mainmenu=7; - /* - startbonustotal=0; - - loading=2; - loadtime=0; - if(firstload)TickOnceAfter(); - if(!firstload)LoadStuff(); - else { - Loadlevel(0); + if(accountactive) { + mainmenu=5; + } else { + mainmenu=7; } - mainmenu=0; - gameon=1; - OPENAL_SetPaused(channels[music3], true); */ + selected=-1; } else { @@ -2610,21 +2572,10 @@ void Game::Tick() } } - if(Button()&&!oldbutton&&selected==2){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); + if(Input::Button()&&!oldbutton&&selected==2){ + fireSound(); - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; + flash(); //options @@ -2638,21 +2589,10 @@ void Game::Tick() if(newscreenheight<0)newscreenheight=screenheight; } - if(Button()&&!oldbutton&&selected==3){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); + if(Input::Button()&&!oldbutton&&selected==3){ + fireSound(); - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; + flash(); if(!gameon){ //quit @@ -2665,22 +2605,12 @@ void Game::Tick() mainmenu=1; } } - if(Button())oldbutton=1; - else oldbutton=0; } - if(mainmenu==3){ - if(Button()&&!oldbutton&&selected!=-1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); + if(Input::Button()&&!oldbutton&&selected!=-1){ + fireSound(); } - if(Button()&&!oldbutton&&selected==0){ + if(Input::Button()&&!oldbutton&&selected==0){ extern SDL_Rect **resolutions; bool isCustomResolution = true; @@ -2924,9 +2854,7 @@ void Game::Tick() if(mainmenu==5){ if(endgame==2){ - accountcampaignchoicesmade[accountactive]=0; - accountcampaignscore[accountactive]=0; - accountcampaigntime[accountactive]=0; + accountactive->endGame(); endgame=0; } @@ -2998,8 +2926,8 @@ void Game::Tick() mapname[8]='p'; mapname[9]='s'; mapname[10]=':'; - strcat(mapname,campaignmapname[campaignchoicewhich[selected-7-accountcampaignchoicesmade[accountactive]]]); - whichchoice=selected-7-accountcampaignchoicesmade[accountactive]; + strcat(mapname,campaignmapname[campaignchoicewhich[selected-7-accountactive->getCampaignChoicesMade()]]); + whichchoice=selected-7-accountactive->getCampaignChoicesMade(); visibleloading=1; stillloading=1; Loadlevel(mapname); @@ -3218,156 +3146,59 @@ void Game::Tick() } if(mainmenu==6){ - if(Button()&&!oldbutton&&selected!=-1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - } - if(Button()&&!oldbutton&&selected==1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - for(i=accountactive;i-1){ + fireSound(); + if(selected==1) { + flash(); + accountactive = Account::destroy(accountactive); + mainmenu=7; + } else if(selected==2) { + flash(); + mainmenu=5; } - accountpoints[i]=accountpoints[i+1]; - for(j=0;j<50;j++){ - accounthighscore[i][j]=accounthighscore[i+1][j]; - accountfasttime[i][j]=accountfasttime[i+1][j]; - } - for(j=0;j<60;j++){ - accountunlocked[i][j]=accountunlocked[i+1][j]; - } - for(j=0;j<256;j++){ - accountname[i][j]=accountname[i+1][j]; - } - accountcampaignhighscore[i]=accountcampaignhighscore[i+1]; - accountprogress[i]=accountprogress[i+1]; - accountcampaignfasttime[i]=accountcampaignfasttime[i+1]; - accountcampaignscore[i]=accountcampaignscore[i+1]; - accountcampaigntime[i]=accountcampaigntime[i+1]; } - - numaccounts--; - accountactive=-1; - - - mainmenu=7; - } - if(Button()&&!oldbutton&&selected==2){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); - PlaySoundEx( fireendsound, samp[fireendsound], NULL, true); - OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel); - OPENAL_SetVolume(channels[fireendsound], 256); - OPENAL_SetPaused(channels[fireendsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 8.0f, 2000.0f); - - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; - - mainmenu=5; } if(Button())oldbutton=1; else oldbutton=0; } if(mainmenu==7){ - if(Button()&&!oldbutton&&selected!=-1){ - float gLoc[3]={0,0,0}; - float vel[3]={0,0,0}; - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 9999.0f, 99999.0f); - PlaySoundEx( firestartsound, samp[firestartsound], NULL, true); - OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel); - OPENAL_SetVolume(channels[firestartsound], 256); - OPENAL_SetPaused(channels[firestartsound], false); - OPENAL_Sample_SetMinMaxDistance(samp[firestartsound], 8.0f, 2000.0f); - } - if(Button()&&!oldbutton&&selected==0&&numaccounts<8){ - entername=1; - } - if(Button()&&!oldbutton&&selected>0&&selected-1){ + fireSound(); - if(selected==0)accountdifficulty[accountactive]=0; - if(selected==1)accountdifficulty[accountactive]=1; - if(selected==2)accountdifficulty[accountactive]=2; + if(selected<=2) + accountactive->setDifficulty(selected); mainmenu=5; - flashr=1; - flashg=0; - flashb=0; - flashamount=1; - flashdelay=1; + flash(); } if(Button())oldbutton=1; @@ -8762,24 +8593,19 @@ void Game::TickOnceAfter(){ //high scores, awards, win if(campaign){ won=1; - accountcampaignchoices[accountactive][accountcampaignchoicesmade[accountactive]]=whichchoice; - accountcampaignchoicesmade[accountactive]++; + accountactive->winCampaignLevel(whichchoice, bonustotal, leveltime); + /*accountcampaignchoices[accountactive][accountactive->getCampaignChoicesMade()]=whichchoice; + accountactive->getCampaignChoicesMade()++; accountcampaignscore[accountactive]+=bonustotal; - scoreadded=1; accountcampaigntime[accountactive]+=leveltime; - if(accountcampaignscore[accountactive]>accountcampaignhighscore[accountactive])accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive]; - - //if(accountprogress[accountactive]accountcampaignhighscore[accountactive]) + accountcampaignhighscore[accountactive]=accountcampaignscore[accountactive];*/ + scoreadded=1; } else { won=1; - if(!debugmode){ - if(bonustotal-startbonustotal>accounthighscore[accountactive][whichlevel])accounthighscore[accountactive][whichlevel]=bonustotal-startbonustotal; - if(accountfasttime[accountactive][whichlevel]==0||leveltimewinLevel(whichlevel,bonustotal-startbonustotal,leveltime); } } } @@ -8860,7 +8686,7 @@ void Game::TickOnceAfter(){ mapname[8]='p'; mapname[9]='s'; mapname[10]=':'; - strcat(mapname,campaignmapname[levelorder[accountcampaignchoicesmade[accountactive]]]);//[campaignchoicewhich[whichchoice]]); + strcat(mapname,campaignmapname[levelorder[accountactive->getCampaignChoicesMade()]]);//[campaignchoicewhich[whichchoice]]); Loadlevel(mapname); OPENAL_Sample_SetMinMaxDistance(samp[fireendsound], 9999.0f, 99999.0f); @@ -8957,13 +8783,13 @@ void Game::TickOnceAfter(){ levelorder[0]=0; levelvisible[0]=1; - if(accountcampaignchoicesmade[accountactive]) - for(i=0;igetCampaignChoicesMade()) + for(i=0;igetCampaignChoicesMade();i++){ + levelorder[i+1]=campaignnextlevel[levelorder[i]][accountactive->getCampaignChoice(i)]; levelvisible[levelorder[i+1]]=1; } int whichlevelstart; - whichlevelstart=accountcampaignchoicesmade[accountactive]-1; + whichlevelstart=accountactive->getCampaignChoicesMade()-1; if(whichlevelstart<0){ campaignchoicenum=1; campaignchoicewhich[0]=0; diff --git a/Source/Globals.cpp b/Source/Globals.cpp index 6c59eb2..f272cc9 100644 --- a/Source/Globals.cpp +++ b/Source/Globals.cpp @@ -229,20 +229,6 @@ float bonustotal = 0; float startbonustotal = 0; float bonustime = 0; -int numaccounts = 0; -int accountactive = 0; -int accountdifficulty[10] = {0}; -int accountprogress[10] = {0}; -float accountpoints[10] = {0}; -float accounthighscore[10][50] = {0}; -float accountfasttime[10][50] = {0}; -bool accountunlocked[10][60] = {0}; -char accountname[10][256] = {0}; -float accountcampaignhighscore[10] = {0}; -float accountcampaignfasttime[10] = {0}; -float accountcampaignscore[10] = {0}; -float accountcampaigntime[10] = {0}; -int accountcampaignchoicesmade[10] = {0};int accountcampaignchoices[10][5000] = {0}; bool won = 0;