summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-07-27 19:06:17 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-07-27 19:06:17 (GMT)
commit5befe5c25f8f188e7588de44ab2c8bead22ae999 (patch)
tree643b02af217770c1a3156be03e01442557795760 /src/game
parentf8ca8af387b8611c18ca7c5357efd19c8bc28941 (diff)
downloadpowder-5befe5c25f8f188e7588de44ab2c8bead22ae999.zip
powder-5befe5c25f8f188e7588de44ab2c8bead22ae999.tar.gz
Local file browser + some more interesting things like Progress bar UI component
Diffstat (limited to 'src/game')
-rw-r--r--src/game/GameController.cpp27
-rw-r--r--src/game/GameController.h3
-rw-r--r--src/game/GameModel.cpp28
-rw-r--r--src/game/GameModel.h1
-rw-r--r--src/game/GameView.cpp43
-rw-r--r--src/game/GameView.h5
6 files changed, 104 insertions, 3 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index 4d13e52..db23bb8 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -16,6 +16,7 @@
#include "elementsearch/ElementSearchActivity.h"
#include "update/UpdateActivity.h"
#include "Notification.h"
+#include "filebrowser/FileBrowserActivity.h"
using namespace std;
@@ -523,6 +524,32 @@ void GameController::OpenSearch()
ui::Engine::Ref().ShowWindow(search->GetView());
}
+void GameController::OpenLocalSaveWindow()
+{
+
+}
+
+void GameController::LoadSaveFile(SaveFile * file)
+{
+ gameModel->SetSaveFile(file);
+}
+
+void GameController::OpenLocalBrowse()
+{
+ class LocalSaveOpenCallback: public FileSelectedCallback
+ {
+ GameController * c;
+ public:
+ LocalSaveOpenCallback(GameController * _c): c(_c) {}
+ virtual ~LocalSaveOpenCallback() {};
+ virtual void FileSelected(SaveFile* file)
+ {
+ c->LoadSaveFile(file);
+ }
+ };
+ new FileBrowserActivity(LOCAL_SAVE_DIR PATH_SEP, new LocalSaveOpenCallback(this));
+}
+
void GameController::OpenLogin()
{
loginWindow = new LoginController(new LoginCallback(this));
diff --git a/src/game/GameController.h b/src/game/GameController.h
index 441aeeb..335e624 100644
--- a/src/game/GameController.h
+++ b/src/game/GameController.h
@@ -86,9 +86,12 @@ public:
void SetActiveTool(int toolSelection, Tool * tool);
void SetColour(ui::Colour colour);
void SetToolStrength(float value);
+ void LoadSaveFile(SaveFile * file);
void OpenSearch();
void OpenLogin();
void OpenTags();
+ void OpenLocalSaveWindow();
+ void OpenLocalBrowse();
void OpenOptions();
void OpenRenderOptions();
void OpenSaveWindow();
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index 536ca42..fef4e61 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -308,6 +308,34 @@ void GameModel::SetSave(SaveInfo * newSave)
notifySaveChanged();
}
+void GameModel::SetSaveFile(SaveFile * newSave)
+{
+ SetSave(NULL);
+
+ if(newSave && newSave->GetGameSave())
+ {
+ GameSave * saveData = newSave->GetGameSave();
+ SetPaused(saveData->paused & GetPaused());
+ sim->gravityMode = saveData->gravityMode;
+ sim->air->airMode = saveData->airMode;
+ sim->legacy_enable = saveData->legacyEnable;
+ sim->water_equal_test = saveData->waterEEnabled;
+ if(saveData->gravityEnable && !sim->grav->ngrav_enable)
+ {
+ sim->grav->start_grav_async();
+ }
+ else if(!saveData->gravityEnable && sim->grav->ngrav_enable)
+ {
+ sim->grav->stop_grav_async();
+ }
+ sim->clear_sim();
+ sim->Load(saveData);
+ }
+ delete newSave;
+
+ notifySaveChanged();
+}
+
Simulation * GameModel::GetSimulation()
{
return sim;
diff --git a/src/game/GameModel.h b/src/game/GameModel.h
index 28b86e6..afe1960 100644
--- a/src/game/GameModel.h
+++ b/src/game/GameModel.h
@@ -95,6 +95,7 @@ public:
SaveInfo * GetSave();
Brush * GetBrush();
void SetSave(SaveInfo * newSave);
+ void SetSaveFile(SaveFile * newSave);
void AddObserver(GameView * observer);
Tool * GetActiveTool(int selection);
void SetActiveTool(int selection, Tool * tool);
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index 5bf7043..7e34b85 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -37,7 +37,8 @@ GameView::GameView():
toolTip(""),
infoTip(""),
infoTipPresence(0),
- toolTipPosition(-1, -1)
+ toolTipPosition(-1, -1),
+ alternativeSaveSource(false)
{
int currentX = 1;
@@ -49,7 +50,10 @@ GameView::GameView():
SearchAction(GameView * _v) { v = _v; }
void ActionCallback(ui::Button * sender)
{
- v->c->OpenSearch();
+ if(v->GetAlternativeSourceEnabled())
+ v->c->OpenLocalBrowse();
+ else
+ v->c->OpenSearch();
}
};
@@ -89,7 +93,10 @@ GameView::GameView():
SaveSimulationAction(GameView * _v) { v = _v; }
void ActionCallback(ui::Button * sender)
{
- v->c->OpenSaveWindow();
+ if(v->GetAlternativeSourceEnabled())
+ v->c->OpenLocalSaveWindow();
+ else
+ v->c->OpenSaveWindow();
}
};
saveSimulationButton = new ui::Button(ui::Point(currentX, Size.Y-16), ui::Point(150, 15), "[untitled simulation]");
@@ -847,6 +854,7 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
drawMode = DrawFill;
else
drawMode = DrawRect;
+ enableHDDSave();
break;
case KEY_SHIFT:
if(drawModeReset)
@@ -940,6 +948,9 @@ void GameView::OnKeyRelease(int key, Uint16 character, bool shift, bool ctrl, bo
case KEY_ALT:
drawSnap = false;
break;
+ case KEY_CTRL:
+ disableHDDSave();
+ break;
case 'z':
if(!zoomCursorFixed)
c->SetZoomEnabled(false);
@@ -1152,6 +1163,32 @@ void GameView::changeColour()
c->SetColour(ui::Colour(colourRSlider->GetValue(), colourGSlider->GetValue(), colourBSlider->GetValue(), colourASlider->GetValue()));
}
+void GameView::enableHDDSave()
+{
+ if(!alternativeSaveSource)
+ {
+ alternativeSaveSource = true;
+
+ saveSimulationButton->Appearance.BackgroundInactive = ui::Colour(255, 255, 255);
+ saveSimulationButton->Appearance.TextInactive = ui::Colour(0, 0, 0);
+ searchButton->Appearance.BackgroundInactive = ui::Colour(255, 255, 255);
+ searchButton->Appearance.TextInactive = ui::Colour(0, 0, 0);
+ }
+}
+
+void GameView::disableHDDSave()
+{
+ if(alternativeSaveSource)
+ {
+ alternativeSaveSource = false;
+
+ saveSimulationButton->Appearance.BackgroundInactive = ui::Colour(0, 0, 0);
+ saveSimulationButton->Appearance.TextInactive = ui::Colour(255, 255, 255);
+ searchButton->Appearance.BackgroundInactive = ui::Colour(0, 0, 0);
+ searchButton->Appearance.TextInactive = ui::Colour(255, 255, 255);
+ }
+}
+
void GameView::OnDraw()
{
Graphics * g = ui::Engine::Ref().g;
diff --git a/src/game/GameView.h b/src/game/GameView.h
index ad9e095..2bf8e9e 100644
--- a/src/game/GameView.h
+++ b/src/game/GameView.h
@@ -37,6 +37,7 @@ private:
bool zoomEnabled;
bool zoomCursorFixed;
bool drawSnap;
+ bool alternativeSaveSource;
int toolIndex;
int infoTipPresence;
@@ -94,12 +95,16 @@ private:
void changeColour();
virtual ui::Point lineSnapCoords(ui::Point point1, ui::Point point2);
virtual ui::Point rectSnapCoords(ui::Point point1, ui::Point point2);
+
+ void enableHDDSave();
+ void disableHDDSave();
public:
GameView();
//Breaks MVC, but any other way is going to be more of a mess.
ui::Point GetMousePosition();
void SetSample(SimulationSample sample);
+ bool GetAlternativeSourceEnabled(){ return alternativeSaveSource; }
void AttachController(GameController * _c){ c = _c; }
void NotifyRendererChanged(GameModel * sender);