summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-08 20:32:10 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-08 20:32:10 (GMT)
commitd352a10d802e7358c5034f500bfec21cc55e7e6e (patch)
tree36a4c2e3cd2ec200aa716cb194cd694c8fdcb565 /src
parent435c680f010508eced376dbe7e6fd659fbbb3415 (diff)
downloadpowder-d352a10d802e7358c5034f500bfec21cc55e7e6e.zip
powder-d352a10d802e7358c5034f500bfec21cc55e7e6e.tar.gz
PTsave opening
Diffstat (limited to 'src')
-rw-r--r--src/PowderToySDL.cpp65
-rw-r--r--src/client/Client.cpp11
-rw-r--r--src/client/Client.h1
-rw-r--r--src/game/GameView.cpp5
4 files changed, 80 insertions, 2 deletions
diff --git a/src/PowderToySDL.cpp b/src/PowderToySDL.cpp
index 5bbd5dc..eac1bc5 100644
--- a/src/PowderToySDL.cpp
+++ b/src/PowderToySDL.cpp
@@ -22,6 +22,7 @@
#endif
#include "Format.h"
+#include "Style.h"
#include "interface/Engine.h"
#include "interface/Button.h"
#include "interface/Panel.h"
@@ -365,7 +366,9 @@ int main(int argc, char * argv[])
if(arguments["open"].length())
{
- std::cout << arguments["open"] << std::endl;
+#ifdef DEBUG
+ std::cout << "Loading " << arguments["open"] << std::endl;
+#endif
if(Client::Ref().FileExists(arguments["open"]))
{
try
@@ -396,6 +399,66 @@ int main(int argc, char * argv[])
}
}
+ if(arguments["ptsave"].length())
+ {
+ engine->g->fillrect((engine->GetWidth()/2)-101, (engine->GetHeight()/2)-26, 202, 52, 0, 0, 0, 210);
+ engine->g->drawrect((engine->GetWidth()/2)-100, (engine->GetHeight()/2)-25, 200, 50, 255, 255, 255, 180);
+ engine->g->drawtext((engine->GetWidth()/2)-(Graphics::textwidth("Loading save...")/2), (engine->GetHeight()/2)-5, "Loading save...", style::Colour::InformationTitle.Red, style::Colour::InformationTitle.Green, style::Colour::InformationTitle.Blue, 255);
+
+#ifdef OGLI
+ blit();
+#else
+ if(engine->Scale==2)
+ blit2(engine->g->vid, engine->Scale);
+ else
+ blit(engine->g->vid);
+#endif
+ std::string ptsaveArg = arguments["ptsave"];
+ try
+ {
+ if(!ptsaveArg.find("ptsave:"))
+ {
+ std::string saveIdPart = "";
+ int saveId;
+ int hashPos = ptsaveArg.find('#');
+ if(hashPos != std::string::npos)
+ {
+ saveIdPart = ptsaveArg.substr(7, hashPos-7);
+ }
+ else
+ {
+ saveIdPart = ptsaveArg.substr(7);
+ }
+ if(saveIdPart.length())
+ {
+#ifdef DEBUG
+ std::cout << "Got Ptsave: id: " << saveIdPart << std::endl;
+#endif
+ saveId = format::StringToNumber<int>(saveIdPart);
+ if(!saveId)
+ throw std::runtime_error("Invalid Save ID");
+
+ SaveInfo * newSave = Client::Ref().GetSave(saveId, 0);
+ GameSave * newGameSave = new GameSave(Client::Ref().GetSaveData(saveId, 0));
+ newSave->SetGameSave(newGameSave);
+ if(!newSave)
+ throw std::runtime_error("Could not load save");
+
+ gameController->LoadSave(newSave);
+ delete newSave;
+ }
+ else
+ {
+ throw std::runtime_error("No Save ID");
+ }
+ }
+ }
+ catch (std::exception & e)
+ {
+ new ErrorMessage("Error", "Invalid save link");
+ }
+ }
+
SDL_Event event;
while(engine->Running())
{
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index 740f1d6..eb55f8e 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -741,6 +741,17 @@ unsigned char * Client::GetSaveData(int saveID, int saveDate, int & dataLength)
return NULL;
}
+std::vector<unsigned char> Client::GetSaveData(int saveID, int saveDate)
+{
+ int dataSize;
+ unsigned char * data = GetSaveData(saveID, saveDate, dataSize);
+
+ std::vector<unsigned char> saveData(data, data+dataSize);
+
+ delete[] data;
+ return saveData;
+}
+
LoginStatus Client::Login(string username, string password, User & user)
{
lastError = "";
diff --git a/src/client/Client.h b/src/client/Client.h
index 748c96e..375c072 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -111,6 +111,7 @@ public:
RequestStatus AddComment(int saveID, std::string comment);
unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength);
+ std::vector<unsigned char> GetSaveData(int saveID, int saveDate);
LoginStatus Login(string username, string password, User & user);
void ClearThumbnailRequests();
std::vector<SaveInfo*> * SearchSaves(int start, int count, string query, string sort, string category, int & resultCount);
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index 8d53439..65c0ddd 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -819,6 +819,9 @@ void GameView::NotifySaveChanged(GameModel * sender)
{
if(sender->GetSave())
{
+ if(introText > 50)
+ introText = 50;
+
saveSimulationButton->SetText(sender->GetSave()->GetName());
if(sender->GetSave()->GetUserName() == sender->GetUser().Username)
((SplitButton*)saveSimulationButton)->SetShowSplit(true);
@@ -1324,7 +1327,7 @@ void GameView::OnTick(float dt)
}
if(introText)
{
- introText -= int(dt)>0?int(dt):1;
+ introText -= int(dt)>0?std::min(int(dt), 5):1;
if(introText < 0)
introText = 0;
}