PTsave opening

This commit is contained in:
Simon Robertshaw 2012-08-08 21:32:10 +01:00
parent 435c680f01
commit d352a10d80
4 changed files with 80 additions and 2 deletions

View File

@ -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())
{

View File

@ -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 = "";

View File

@ -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);

View File

@ -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;
}