summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-07 00:58:46 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-07 00:58:46 (GMT)
commit46b2def1930b8a6741916b1b4dfebfed97f7e64d (patch)
tree2a23b13b5c5c81e0fb4b1ba3005baac77eb0f7e9 /src
parent51657b8575ce690ddc22b130861a7cf0211227db (diff)
downloadpowder-46b2def1930b8a6741916b1b4dfebfed97f7e64d.zip
powder-46b2def1930b8a6741916b1b4dfebfed97f7e64d.tar.gz
Save as current name complete, resolves #5
Diffstat (limited to 'src')
-rw-r--r--src/game/GameController.cpp22
-rw-r--r--src/game/GameView.cpp2
-rw-r--r--src/save/ServerSaveActivity.cpp63
-rw-r--r--src/save/ServerSaveActivity.h7
-rw-r--r--src/tasks/Task.cpp6
5 files changed, 84 insertions, 16 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index f46708a..cea50cb 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -19,6 +19,7 @@
#include "filebrowser/FileBrowserActivity.h"
#include "save/LocalSaveActivity.h"
#include "save/ServerSaveActivity.h"
+#include "interface/Keys.h"
using namespace std;
@@ -433,26 +434,26 @@ bool GameController::KeyRelease(int key, Uint16 character, bool shift, bool ctrl
if(ret)
{
Simulation * sim = gameModel->GetSimulation();
- if (key == SDLK_RIGHT || key == SDLK_LEFT)
+ if (key == KEY_RIGHT || key == KEY_LEFT)
{
sim->player.pcomm = sim->player.comm; //Saving last movement
sim->player.comm = (int)(sim->player.comm)&12; //Stop command
}
- if (key == SDLK_UP)
+ if (key == KEY_UP)
{
sim->player.comm = (int)(sim->player.comm)&11;
}
- if (key == SDLK_DOWN)
+ if (key == KEY_DOWN)
{
sim->player.comm = (int)(sim->player.comm)&7;
}
- if (key == SDLK_d || key == SDLK_a)
+ if (key == KEY_d || key == KEY_a)
{
sim->player2.pcomm = sim->player2.comm; //Saving last movement
sim->player2.comm = (int)(sim->player2.comm)&12; //Stop command
}
- if (key == SDLK_w)
+ if (key == KEY_w)
{
sim->player2.comm = (int)(sim->player2.comm)&11;
}
@@ -852,11 +853,8 @@ void GameController::SaveAsCurrent()
//c->LoadSave(&save);
}
};
- if(!gameModel->GetSave() || gameModel->GetUser().Username != gameModel->GetSave()->GetUserName())
- {
- OpenSaveWindow();
- }
- if(gameModel->GetUser().ID)
+
+ if(gameModel->GetSave() && gameModel->GetUser().ID && gameModel->GetUser().Username == gameModel->GetSave()->GetUserName())
{
Simulation * sim = gameModel->GetSimulation();
GameSave * gameSave = sim->Save();
@@ -886,6 +884,10 @@ void GameController::SaveAsCurrent()
}
}
}
+ else if(gameModel->GetUser().ID)
+ {
+ OpenSaveWindow();
+ }
else
{
new ErrorMessage("Error", "You need to login to upload saves.");
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index 7d21f02..9bb1ee7 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -54,7 +54,7 @@ public:
{
if(leftDown)
DoLeftAction();
- if(rightDown)
+ else if(rightDown)
DoRightAction();
}
ui::Button::OnMouseUp(x, y, button);
diff --git a/src/save/ServerSaveActivity.cpp b/src/save/ServerSaveActivity.cpp
index d367e61..3de1f37 100644
--- a/src/save/ServerSaveActivity.cpp
+++ b/src/save/ServerSaveActivity.cpp
@@ -8,6 +8,7 @@
#include "dialogues/ErrorMessage.h"
#include "dialogues/ConfirmPrompt.h"
#include "client/Client.h"
+#include "tasks/Task.h"
#include "Style.h"
class ServerSaveActivity::CancelAction: public ui::ButtonAction
@@ -32,11 +33,46 @@ public:
}
};
+//Currently, reading is done on another thread, we can't render outside the main thread due to some bullshit with OpenGL
+class SaveUploadTask: public Task
+{
+ SaveInfo save;
+
+ virtual void before()
+ {
+
+ }
+
+ virtual void after()
+ {
+
+ }
+
+ virtual bool doWork()
+ {
+ notifyProgress(-1);
+ return Client::Ref().UploadSave(save) == RequestOkay;
+ }
+
+public:
+ SaveInfo GetSave()
+ {
+ return save;
+ }
+
+ SaveUploadTask(SaveInfo save):
+ save(save)
+ {
+
+ }
+};
+
ServerSaveActivity::ServerSaveActivity(SaveInfo save, ServerSaveActivity::SaveUploadedCallback * callback) :
WindowActivity(ui::Point(-1, -1), ui::Point(440, 200)),
thumbnail(NULL),
save(save),
- callback(callback)
+ callback(callback),
+ saveUploadTask(NULL)
{
ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point((Size.X/2)-8, 16), "Save to server:");
titleLabel->SetTextColour(style::Colour::InformationTitle);
@@ -98,13 +134,27 @@ ServerSaveActivity::ServerSaveActivity(SaveInfo save, bool saveNow, ServerSaveAc
WindowActivity(ui::Point(-1, -1), ui::Point(200, 50)),
thumbnail(NULL),
save(save),
- callback(callback)
+ callback(callback),
+ saveUploadTask(NULL)
{
ui::Label * titleLabel = new ui::Label(ui::Point(0, 0), Size, "Saving to server...");
titleLabel->SetTextColour(style::Colour::InformationTitle);
titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignCentre;
titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(titleLabel);
+
+ saveUploadTask = new SaveUploadTask(save);
+ saveUploadTask->AddTaskListener(this);
+ saveUploadTask->Start();
+}
+
+void ServerSaveActivity::NotifyDone(Task * task)
+{
+ Exit();
+ if(!task->GetSuccess())
+ {
+ new ErrorMessage("Error", "Error while saving");
+ }
}
void ServerSaveActivity::Save()
@@ -169,6 +219,12 @@ void ServerSaveActivity::Exit()
WindowActivity::Exit();
}
+void ServerSaveActivity::OnTick(float dt)
+{
+ if(saveUploadTask)
+ saveUploadTask->Poll();
+}
+
void ServerSaveActivity::OnDraw()
{
Graphics * g = ui::Engine::Ref().g;
@@ -192,5 +248,6 @@ void ServerSaveActivity::OnThumbnailReady(Thumbnail * thumbnail)
ServerSaveActivity::~ServerSaveActivity()
{
-
+ if(saveUploadTask)
+ delete saveUploadTask;
} \ No newline at end of file
diff --git a/src/save/ServerSaveActivity.h b/src/save/ServerSaveActivity.h
index 23d7153..4bf581c 100644
--- a/src/save/ServerSaveActivity.h
+++ b/src/save/ServerSaveActivity.h
@@ -3,6 +3,7 @@
#include "Activity.h"
#include "client/SaveInfo.h"
#include "client/ThumbnailListener.h"
+#include "tasks/TaskListener.h"
namespace ui
{
@@ -10,8 +11,9 @@ namespace ui
class Checkbox;
}
+class Task;
class Thumbnail;
-class ServerSaveActivity: public WindowActivity, public ThumbnailListener
+class ServerSaveActivity: public WindowActivity, public ThumbnailListener, public TaskListener
{
public:
class SaveUploadedCallback
@@ -28,8 +30,11 @@ public:
virtual void Exit();
virtual void OnDraw();
virtual void OnThumbnailReady(Thumbnail * thumbnail);
+ virtual void OnTick(float dt);
virtual ~ServerSaveActivity();
protected:
+ virtual void NotifyDone(Task * task);
+ Task * saveUploadTask;
SaveUploadedCallback * callback;
SaveInfo save;
Thumbnail * thumbnail;
diff --git a/src/tasks/Task.cpp b/src/tasks/Task.cpp
index 01acb2c..c9af99e 100644
--- a/src/tasks/Task.cpp
+++ b/src/tasks/Task.cpp
@@ -102,7 +102,11 @@ void Task::Poll()
Task::~Task()
{
-
+ if(!done)
+ {
+ pthread_join(doWorkThread, NULL);
+ pthread_mutex_destroy(&taskMutex);
+ }
}
void Task::before()