summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-06-10 18:52:24 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-06-10 18:52:24 (GMT)
commitfd572e9da68385d13a147164cd07d50160f2fc69 (patch)
tree2cd99a57db8f11f4d41defe4ca4253553cd0b562 /src
parentcdc4b4df86d61abf8fe08fe120afcb2393755660 (diff)
downloadpowder-fd572e9da68385d13a147164cd07d50160f2fc69.zip
powder-fd572e9da68385d13a147164cd07d50160f2fc69.tar.gz
Change stamp storage to a list, insert new stamps at the begining, 'l' loads the first stamp or the previously used stamp, 'k' shows the stamp browser
Diffstat (limited to 'src')
-rw-r--r--src/client/Client.cpp33
-rw-r--r--src/client/Client.h7
-rw-r--r--src/game/GameController.cpp2
-rw-r--r--src/game/GameModel.cpp14
-rw-r--r--src/game/GameView.cpp5
-rw-r--r--src/localbrowser/LocalBrowserModel.cpp7
6 files changed, 52 insertions, 16 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index 23a487c..68e59e0 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -253,12 +253,12 @@ SaveFile * Client::GetStamp(string stampID)
void Client::DeleteStamp(string stampID)
{
- for(int i = 0; i < stampIDs.size(); i++)
+ for (std::list<string>::iterator iterator = stampIDs.begin(), end = stampIDs.end(); iterator != end; ++iterator)
{
- if(stampIDs[i] == stampID)
+ if((*iterator) == stampID)
{
remove(string(STAMPS_DIR PATH_SEP + stampID + ".stm").c_str());
- stampIDs.erase(stampIDs.begin()+i);
+ stampIDs.erase(iterator);
return;
}
}
@@ -294,7 +294,7 @@ string Client::AddStamp(GameSave * saveData)
stampStream.write((const char *)gameData, gameDataLength);
stampStream.close();
- stampIDs.push_back(saveID.str());
+ stampIDs.push_front(saveID.str());
updateStamps();
@@ -312,18 +312,35 @@ void Client::updateStamps()
std::ofstream stampsStream;
stampsStream.open(string(STAMPS_DIR PATH_SEP "stamps.def").c_str(), ios::binary);
- for(int i = 0; i < stampIDs.size(); i++)
+ for (std::list<string>::const_iterator iterator = stampIDs.begin(), end = stampIDs.end(); iterator != end; ++iterator)
{
- stampsStream.write(stampIDs[i].c_str(), 10);
+ stampsStream.write((*iterator).c_str(), 10);
}
stampsStream.write("\0", 1);
stampsStream.close();
return;
}
-vector<string> Client::GetStamps()
+int Client::GetStampsCount()
{
- return stampIDs;
+ return stampIDs.size();
+}
+
+vector<string> Client::GetStamps(int start, int count)
+{
+ //if(start+count > stampIDs.size()) {
+ // if(start > stampIDs.size())
+ // return vector<string>();
+ // count = stampIDs.size()-start;
+ //}
+
+ vector<string> stampRange;
+ int index = 0;
+ for (std::list<string>::const_iterator iterator = stampIDs.begin(), end = stampIDs.end(); iterator != end; ++iterator, ++index) {
+ if(index>=start && index < start+count)
+ stampRange.push_back(*iterator);
+ }
+ return stampRange;
}
RequestStatus Client::ExecVote(int saveID, int direction)
diff --git a/src/client/Client.h b/src/client/Client.h
index 53f0e79..6c1baa5 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -3,6 +3,7 @@
#include <queue>
#include <vector>
+#include <list>
#include <fstream>
#include "Config.h"
@@ -30,7 +31,7 @@ class Client: public Singleton<Client> {
private:
std::string lastError;
- vector<string> stampIDs;
+ list<string> stampIDs;
int lastStampTime;
int lastStampName;
@@ -58,7 +59,9 @@ public:
SaveFile * GetStamp(string stampID);
void DeleteStamp(string stampID);
string AddStamp(GameSave * saveData);
- vector<string> GetStamps();
+ vector<string> GetStamps(int start, int count);
+ int GetStampsCount();
+ SaveFile * GetFirstStamp();
unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength);
LoginStatus Login(string username, string password, User & user);
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index 7c70797..9cdac6e 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -109,8 +109,6 @@ public:
cc->gameModel->SetStamp(cc->localBrowser->GetSave()->GetGameSave());
cc->LoadStamp();
}
- else
- cc->gameModel->SetStamp(NULL);
}
};
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index 36aef35..99a2cc5 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -130,6 +130,15 @@ GameModel::GameModel():
{
currentUser = Client::Ref().GetAuthUser();
}
+
+ //Set stamp to first stamp in list
+ vector<string> stamps = Client::Ref().GetStamps(0, 1);
+ if(stamps.size()>0)
+ {
+ SaveFile * stampFile = Client::Ref().GetStamp(stamps[0]);
+ if(stampFile && stampFile->GetGameSave())
+ stamp = stampFile->GetGameSave();
+ }
}
GameModel::~GameModel()
@@ -430,7 +439,10 @@ void GameModel::SetStamp(GameSave * save)
{
if(stamp)
delete stamp;
- stamp = new GameSave(*save);
+ if(save)
+ stamp = new GameSave(*save);
+ else
+ stamp = NULL;
}
void GameModel::SetPlaceSave(GameSave * save)
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index dbc2294..26a4311 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -741,6 +741,11 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
}
break;
case 'l':
+ c->LoadStamp();
+ selectPoint2 = ui::Point(-1, -1);
+ selectPoint1 = selectPoint2;
+ break;
+ case 'k':
selectPoint2 = ui::Point(-1, -1);
selectPoint1 = selectPoint2;
c->OpenStamps();
diff --git a/src/localbrowser/LocalBrowserModel.cpp b/src/localbrowser/LocalBrowserModel.cpp
index ca75874..10290cc 100644
--- a/src/localbrowser/LocalBrowserModel.cpp
+++ b/src/localbrowser/LocalBrowserModel.cpp
@@ -15,7 +15,8 @@ LocalBrowserModel::LocalBrowserModel():
currentPage(1)
{
// TODO Auto-generated constructor stub
- stampIDs = Client::Ref().GetStamps();
+ //stampIDs = Client::Ref().GetStamps();
+ stampIDs = Client::Ref().GetStamps(0, 16);
}
@@ -72,9 +73,9 @@ void LocalBrowserModel::UpdateSavesList(int pageNumber)
delete tempStampsList[i];
}*/
- int stampsEnd = pageNumber*20;
+ stampIDs = Client::Ref().GetStamps((pageNumber-1)*20, 20);
- for(int i = stampsEnd-20; i<stampIDs.size() && i<stampsEnd; i++)
+ for(int i = 0; i<stampIDs.size(); i++)
{
SaveFile * tempSave = Client::Ref().GetStamp(stampIDs[i]);
if(tempSave)