/*
Copyright (C) 2003, 2010 - Wolfire Games
-Copyright (C) 2010 - MCMic
+Copyright (C) 2010 - Côme <MCMic> BERNIGAUD
This file is part of Lugaru.
vector<Account*> Account::accounts = vector<Account*>();
-Account::Account(string n) {
+Account::Account(string n) : campaignProgress() {
name = string(n);
difficulty = 0;
progress = 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));
+
+ setCurrentCampaign("main");
+}
+
+void Account::setCurrentCampaign(string name) {
+ currentCampaign = name;
}
Account* Account::add(string name) {
return NULL;
}
}
- printf("Unexpected error : User %s not found %d\n",a->getName(),a);
+ printf("Unexpected error : User %s not found\n",a->getName());
return accounts.front();
}
}
void Account::endGame() {
- campaignchoicesmade=0;
- campaignscore=0;
- campaigntime=0;
+ campaignProgress[currentCampaign].choices.clear();
+ campaignProgress[currentCampaign].score=0;
+ campaignProgress[currentCampaign].time=0;
}
void Account::winCampaignLevel(int choice, float score, float time) {
- campaignchoices[campaignchoicesmade++] = choice;
- setCampaignScore(campaignscore+score);
- campaigntime = time;
+ campaignProgress[currentCampaign].choices.push_back(choice);
+ setCampaignScore(campaignProgress[currentCampaign].score+score);
+ campaignProgress[currentCampaign].time = time;
}
void Account::winLevel(int level, float score, float time) {
FILE *tfile;
int numaccounts;
int accountactive;
- int j;
tfile=fopen(ConvertFileName(filename.c_str()), "rb" );
{
printf("loading account %d/%d\n",i,numaccounts);
Account* acc = new Account();
- funpackf(tfile, "Bf", &(acc->campaigntime));
- 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;j<acc->campaignchoicesmade;j++)
- {
- funpackf(tfile, "Bi", &(acc->campaignchoices[j]));
- if (acc->campaignchoices[j] >= 10)
+ int nbCampaigns;
+ funpackf(tfile, "Bi", &nbCampaigns);
+ //~ printf("loading %d campaign progress info\n",nbCampaigns);
+
+ for(int k=0;k<nbCampaigns;++k) {
+ string campaignName = "";
+ int t;
+ char c;
+ funpackf(tfile, "Bi", &t);
+ for(int j=0;j<t;j++)
{
- acc->campaignchoices[j] = 0;
+ funpackf(tfile, "Bb", &c);
+ campaignName.append(1,c);
}
+ //~ printf("loading %s campaign progress info\n",campaignName.c_str());
+ funpackf(tfile, "Bf", &(acc->campaignProgress[campaignName].time));
+ funpackf(tfile, "Bf", &(acc->campaignProgress[campaignName].score));
+ funpackf(tfile, "Bf", &(acc->campaignProgress[campaignName].fasttime));
+ funpackf(tfile, "Bf", &(acc->campaignProgress[campaignName].highscore));
+ int campaignchoicesmade,campaignchoice;
+ funpackf(tfile, "Bi", &campaignchoicesmade);
+ for(int j=0;j<campaignchoicesmade;j++)
+ {
+ funpackf(tfile, "Bi", &campaignchoice);
+ if (campaignchoice >= 10) // what is that for?
+ {
+ campaignchoice = 0;
+ }
+ acc->campaignProgress[campaignName].choices.push_back(campaignchoice);
+ }
+ }
+
+ acc->currentCampaign = "";
+ int t;
+ char c;
+ funpackf(tfile, "Bi", &t);
+ for(int i=0;i<t;i++)
+ {
+ funpackf(tfile, "Bb", &c);
+ acc->currentCampaign.append(1,c);
}
+
funpackf(tfile, "Bf", &(acc->points));
- for(j=0;j<50;j++)
+ for(int i=0;i<50;i++)
{
- funpackf(tfile, "Bf", &(acc->highscore[j]));
- funpackf(tfile, "Bf", &(acc->fasttime[j]));
+ funpackf(tfile, "Bf", &(acc->highscore[i]));
+ funpackf(tfile, "Bf", &(acc->fasttime[i]));
}
- for(j=0;j<60;j++)
+ for(int i=0;i<60;i++)
{
- funpackf(tfile, "Bb", &(acc->unlocked[j]));
+ funpackf(tfile, "Bb", &(acc->unlocked[i]));
}
int temp;
char ctemp;
funpackf(tfile, "Bi", &temp);
- for(j=0;j<temp;j++)
+ for(int i=0;i<temp;i++)
{
funpackf(tfile, "Bb", &ctemp);
acc->name.append(1,ctemp);
void Account::saveFile(string filename, Account* accountactive) {
FILE *tfile;
- int numaccounts;
int j;
tfile=fopen(ConvertFileName(filename.c_str(), "wb"), "wb" );
{
Account* a = Account::get(i);
printf("writing account %d/%d (%s)\n",i+1,getNbAccounts(),a->getName());
- 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;j<a->campaignchoicesmade;j++)
+ fpackf(tfile, "Bi", a->campaignProgress.size());
+
+ map<string,CampaignProgress>::const_iterator it;
+ for( it=a->campaignProgress.begin(); it!= a->campaignProgress.end(); ++it) {
+ fpackf(tfile, "Bi", it->first.size());
+ for(j=0;j<it->first.size();j++)
+ {
+ fpackf(tfile, "Bb", it->first[j]);
+ }
+ fpackf(tfile, "Bf", it->second.time);
+ fpackf(tfile, "Bf", it->second.score);
+ fpackf(tfile, "Bf", it->second.fasttime);
+ fpackf(tfile, "Bf", it->second.highscore);
+ fpackf(tfile, "Bi", it->second.choices.size());
+ for(j=0;j<it->second.choices.size();j++)
+ {
+ fpackf(tfile, "Bi", it->second.choices[j]);
+ }
+ }
+
+ fpackf(tfile, "Bi", a->getCurrentCampaign().size());
+ for(j=0;j<a->getCurrentCampaign().size();j++)
{
- fpackf(tfile, "Bi", a->campaignchoices[j]);
+ fpackf(tfile, "Bb", a->getCurrentCampaign()[j]);
}
+
fpackf(tfile, "Bf", a->points);
for(j=0;j<50;j++)
{