diff options
| author | Simon 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) |
| commit | 5befe5c25f8f188e7588de44ab2c8bead22ae999 (patch) | |
| tree | 643b02af217770c1a3156be03e01442557795760 /src/game | |
| parent | f8ca8af387b8611c18ca7c5357efd19c8bc28941 (diff) | |
| download | powder-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.cpp | 27 | ||||
| -rw-r--r-- | src/game/GameController.h | 3 | ||||
| -rw-r--r-- | src/game/GameModel.cpp | 28 | ||||
| -rw-r--r-- | src/game/GameModel.h | 1 | ||||
| -rw-r--r-- | src/game/GameView.cpp | 43 | ||||
| -rw-r--r-- | src/game/GameView.h | 5 |
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); |
