X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FAccount.cpp;h=560592f62ebf7a0809b579d8b0b1a9757dcbd0e7;hb=f83c7bc4ef12b0bbdc1cfa6bdce35d9665510e6c;hp=a087158dc0b16f2d686af8fe7aeaf6e38a43e4cd;hpb=e2cad9c4ba05196efe03ab2fed8e51bafda53759;p=lugaru.git diff --git a/Source/Account.cpp b/Source/Account.cpp index a087158..560592f 100644 --- a/Source/Account.cpp +++ b/Source/Account.cpp @@ -1,23 +1,21 @@ /* Copyright (C) 2003, 2010 - Wolfire Games -Copyright (C) 2010 - Côme BERNIGAUD +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) 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. +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, +Lugaru 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. +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. +along with Lugaru. If not, see . */ #include "Account.h" @@ -25,16 +23,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include "MacCompatibility.h" #include "string.h" +#include using namespace std; -extern bool debugmode; +extern bool devtools; vector Account::accounts = vector(); +int Account::i_active = -1; -Account::Account(string n) : campaignProgress() +Account::Account(const string& name) : name(name), campaignProgress() { - name = string(n); difficulty = 0; progress = 0; points = 0; @@ -45,40 +44,56 @@ Account::Account(string n) : campaignProgress() setCurrentCampaign("main"); } -void Account::setCurrentCampaign(string name) +void Account::setCurrentCampaign(const string& name) { currentCampaign = name; } -Account* Account::add(string name) +void Account::add(const string& name) { accounts.push_back(new Account(name)); - return accounts.back(); + i_active = accounts.size() - 1; } Account* Account::get(int i) { + return accounts.at(i); +} - if ((i >= 0) && (i < accounts.size())) { - return accounts[i]; - } else - return NULL; +int Account::getNbAccounts() +{ + return accounts.size(); } -void Account::destroy(int i) +bool Account::hasActive() { - accounts.erase(accounts.begin() + i); + return (i_active >= 0); } -Account* Account::destroy(Account* a) + +Account& Account::active() { - for (unsigned i = 0; i < accounts.size(); i++) { - if (accounts[i] == a) { - accounts.erase(accounts.begin() + i); - return NULL; - } + return *(accounts.at(i_active)); +} + +void Account::setActive(int i) +{ + if ((i >= 0) && (i < int(accounts.size()))) { + i_active = i; + } else { + cerr << "Tried to set active account to " << i << " but there is not such account" << endl; + i_active = -1; + } +} + +void Account::destroyActive() +{ + if ((i_active >= 0) && (i_active < int(accounts.size()))) { + accounts.erase(accounts.begin() + i_active); + i_active = -1; + } else { + cerr << "Tried to destroy active account " << i_active << " but there is not such account" << endl; + i_active = -1; } - printf("Unexpected error : User %s not found\n", a->getName()); - return accounts.front(); } int Account::getDifficulty() @@ -102,7 +117,7 @@ void Account::winCampaignLevel(int choice, float score, float time) void Account::winLevel(int level, float score, float time) { - if (!debugmode) { + if (!devtools) { if (score > highscore[level]) highscore[level] = score; if (time < fasttime[level] || fasttime[level] == 0) @@ -112,17 +127,18 @@ void Account::winLevel(int level, float score, float time) progress = level + 1; } -Account* Account::loadFile(string filename) +void Account::loadFile(string filename) { FILE *tfile; int numaccounts; - int accountactive; + int iactive; + errno = 0; - tfile = fopen(ConvertFileName(filename.c_str()), "rb" ); + tfile = fopen(filename.c_str(), "rb" ); if (tfile) { funpackf(tfile, "Bi", &numaccounts); - funpackf(tfile, "Bi", &accountactive); + funpackf(tfile, "Bi", &iactive); printf("number of accounts %d\n", numaccounts); for (int i = 0; i < numaccounts; i++) { printf("loading account %d/%d\n", i, numaccounts); @@ -131,7 +147,6 @@ Account* Account::loadFile(string filename) funpackf(tfile, "Bi", &(acc->progress)); int nbCampaigns; funpackf(tfile, "Bi", &nbCampaigns); - //~ printf("loading %d campaign progress info\n",nbCampaigns); for (int k = 0; k < nbCampaigns; ++k) { string campaignName = ""; @@ -142,7 +157,6 @@ Account* Account::loadFile(string filename) 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)); @@ -188,35 +202,34 @@ Account* Account::loadFile(string filename) } fclose(tfile); - return get(accountactive); + setActive(iactive); } else { - printf("filenotfound\n"); - return NULL; + perror(("Couldn't load users from " + filename).c_str()); + i_active = -1; } } -void Account::saveFile(string filename, Account* accountactive) +void Account::saveFile(string filename) { FILE *tfile; - unsigned j; + errno = 0; - tfile = fopen(ConvertFileName(filename.c_str(), "wb"), "wb" ); + tfile = fopen(filename.c_str(), "wb" ); if (tfile) { - printf("writing %d accounts :\n", getNbAccounts()); fpackf(tfile, "Bi", getNbAccounts()); - fpackf(tfile, "Bi", indice(accountactive)); + fpackf(tfile, "Bi", i_active); for (int i = 0; i < getNbAccounts(); i++) { Account* a = Account::get(i); - printf("writing account %d/%d (%s)\n", i + 1, getNbAccounts(), a->getName()); + printf("writing account %d/%d (%s)\n", i + 1, getNbAccounts(), a->getName().c_str()); fpackf(tfile, "Bi", a->difficulty); fpackf(tfile, "Bi", a->progress); fpackf(tfile, "Bi", a->campaignProgress.size()); map::const_iterator it; - for ( it = a->campaignProgress.begin(); it != a->campaignProgress.end(); ++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++) { + for (unsigned j = 0; j < it->first.size(); j++) { fpackf(tfile, "Bb", it->first[j]); } fpackf(tfile, "Bf", it->second.time); @@ -224,39 +237,32 @@ void Account::saveFile(string filename, Account* accountactive) 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++) { + for (unsigned 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++) { + for (unsigned j = 0; j < a->getCurrentCampaign().size(); j++) { fpackf(tfile, "Bb", a->getCurrentCampaign()[j]); } fpackf(tfile, "Bf", a->points); - for (j = 0; j < 50; j++) { + for (unsigned j = 0; j < 50; j++) { fpackf(tfile, "Bf", a->highscore[j]); fpackf(tfile, "Bf", a->fasttime[j]); } - for (j = 0; j < 60; j++) { + for (unsigned j = 0; j < 60; j++) { fpackf(tfile, "Bb", a->unlocked[j]); } fpackf(tfile, "Bi", a->name.size()); - for (j = 0; j < a->name.size(); j++) { + for (unsigned j = 0; j < a->name.size(); j++) { fpackf(tfile, "Bb", a->name[j]); } } fclose(tfile); + } else { + perror(("Couldn't save users in " + filename).c_str()); } } - -int Account::indice(Account* a) -{ - for (unsigned i = 0; i < accounts.size(); i++) { - if (accounts[i] == a) - return i; - } - return -1; -}