Author: jhinrichs
Date: Sun Apr 12 19:58:50 2009
New Revision: 34807

URL: http://svn.gna.org/viewcvs/wesnoth?rev=34807&view=rev
Log:
Savegame reorganization Step 1: Providing a simpler interface to saving and 
loading.
Start to implement loading multiplayer games in savegame.cpp.

Modified:
    trunk/src/game.cpp
    trunk/src/multiplayer_connect.cpp
    trunk/src/savegame.cpp
    trunk/src/savegame.hpp

Modified: trunk/src/game.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game.cpp?rev=34807&r1=34806&r2=34807&view=diff
==============================================================================
--- trunk/src/game.cpp (original)
+++ trunk/src/game.cpp Sun Apr 12 19:58:50 2009
@@ -1563,6 +1563,12 @@
                if(result == VICTORY && (state_.campaign_type.empty() || 
state_.campaign_type != "multiplayer")) {
                        the_end(disp(), state_.end_text, 
state_.end_text_duration);
                        about::show_about(disp(),state_.campaign);
+               }
+               if (result == QUIT)
+               {
+                       loaded_game_ = "";
+                       loaded_game_show_replay_ = false;
+                       loaded_game_cancel_orders_ = false;
                }
        } catch(game::load_game_exception& e) {
 

Modified: trunk/src/multiplayer_connect.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/multiplayer_connect.cpp?rev=34807&r1=34806&r2=34807&view=diff
==============================================================================
--- trunk/src/multiplayer_connect.cpp (original)
+++ trunk/src/multiplayer_connect.cpp Sun Apr 12 19:58:50 2009
@@ -27,6 +27,7 @@
 #include "log.hpp"
 #include "map.hpp"
 #include "multiplayer_connect.hpp"
+#include "savegame.hpp"
 #include "statistics.hpp"
 #include "unit_id.hpp"
 #include "wml_separators.hpp"
@@ -1514,56 +1515,13 @@
 void connect::load_game()
 {
        if(params_.saved_game) {
-               bool show_replay = false;
-               //bool cancel_orders = false;
-               const std::string game = dialogs::load_game_dialog(disp(),
-                                                                game_config(), 
&show_replay,
-                                                                NULL);
-
-               if(game.empty()) {
+               try{
+                       multiplayer_loadgame load(disp(), game_config(), 
state_);
+                       load.load_game();
+               }
+               catch (load_game_cancelled_exception){
                        set_result(CREATE);
                        return;
-               }
-
-               std::string error_log;
-               {
-                       cursor::setter cur(cursor::WAIT);
-                       ::load_game(game, state_, &error_log);
-               }
-               if(!error_log.empty()) {
-                       gui::show_error_message(disp(),
-                                       _("The file you have tried to load is 
corrupt: '") +
-                                       error_log);
-                       set_result(CREATE);
-                       return;
-               }
-
-               if(state_.campaign_type != "multiplayer") {
-                       /* GCC-3.3 needs a temp var otherwise compilation fails 
*/
-                       gui::message_dialog dlg(disp(), "", _("This is not a 
multiplayer save"));
-                       dlg.show();
-                       set_result(CREATE);
-                       return;
-               }
-
-               if(state_.version != game_config::version) {
-                       // Do not load if too old, but if either the savegame or
-                       // the current game has the version 'test' allow 
loading.
-                       
if(!game_config::is_compatible_savegame_version(state_.version)) {
-                               /* GCC-3.3 needs a temp var otherwise 
compilation fails */
-                               gui::message_dialog dlg2(disp(), "", _("This 
save is from a version too old to be loaded."));
-                               dlg2.show();
-                               set_result(CREATE);
-                               return;
-                       }
-
-                       const int res = gui::dialog(disp(), "",
-                                       _("This save is from a different 
version of the game. Do you want to try to load it?"),
-                                       gui::YES_NO).show();
-                       if(res == 1) {
-                               set_result(CREATE);
-                               return;
-                       }
                }
 
                level_["savegame"] = "yes";

Modified: trunk/src/savegame.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/savegame.cpp?rev=34807&r1=34806&r2=34807&view=diff
==============================================================================
--- trunk/src/savegame.cpp (original)
+++ trunk/src/savegame.cpp Sun Apr 12 19:58:50 2009
@@ -46,33 +46,32 @@
        bool show_replay_dialog = show_replay;
        bool cancel_orders_dialog = cancel_orders;
 
-       if (filename_.empty())
-       {
-               //FIXME: Integrate the load_game dialog into this class
-               filename_ = dialogs::load_game_dialog(gui_, game_config_, 
&show_replay_dialog, &cancel_orders_dialog);
-
+       //FIXME: Integrate the load_game dialog into this class
+       filename_ = dialogs::load_game_dialog(gui_, game_config_, 
&show_replay_dialog, &cancel_orders_dialog);
+
+       show_replay_ = show_replay;
+       cancel_orders_ = cancel_orders;
+}
+
+void loadgame::load_game()
+{
+       show_dialog(false, false);
+
+       if(filename_ != "")
+               throw game::load_game_exception(filename_, show_replay_, 
cancel_orders_);
+}
+
+void loadgame::load_game(std::string& filename, bool show_replay, bool 
cancel_orders)
+{
+       filename_ = filename;
+
+       if (filename_.empty()){
+               show_dialog(show_replay, cancel_orders);
+       }
+       else{
                show_replay_ = show_replay;
                cancel_orders_ = cancel_orders;
        }
-}
-
-void loadgame::load_game()
-{
-       show_dialog(false, false);
-
-       if(filename_ != "")
-               throw game::load_game_exception(filename_, show_replay_, 
cancel_orders_);
-}
-
-void loadgame::load_game(std::string& filename, bool show_replay, bool 
cancel_orders)
-{
-       filename_ = filename;
-       show_dialog(show_replay, cancel_orders);
-       show_replay_ = show_replay;
-       cancel_orders_ = cancel_orders;
-
-       if (filename_.empty())
-               show_dialog(show_replay, cancel_orders);
 
        if (filename_.empty())
                throw load_game_cancelled_exception();
@@ -136,6 +135,55 @@
        const unsigned calls = show_replay_ ? 0 :
                lexical_cast_default<unsigned> 
(gamestate_.snapshot["random_calls"]);
        gamestate_.rng().seed_random(seed, calls);
+}
+
+multiplayer_loadgame::multiplayer_loadgame(display& gui, const config& 
game_config, game_state& gamestate)
+       : loadgame(gui, game_config, gamestate)
+{}
+
+void multiplayer_loadgame::load_game()
+{
+       show_dialog(false, NULL);
+
+       if (this->filename().empty())
+               throw load_game_cancelled_exception();
+
+       std::string error_log;
+       {
+               cursor::setter cur(cursor::WAIT);
+               ::load_game(this->filename(), gamestate(), &error_log);
+       }
+
+       if(!error_log.empty()) {
+               gui::show_error_message(gui(),
+                               _("The file you have tried to load is corrupt: 
'") +
+                               error_log);
+               throw load_game_cancelled_exception();
+       }
+
+       if(gamestate().campaign_type != "multiplayer") {
+               /* GCC-3.3 needs a temp var otherwise compilation fails */
+               gui::message_dialog dlg(gui(), "", _("This is not a multiplayer 
save"));
+               dlg.show();
+               throw load_game_cancelled_exception();
+       }
+
+       if(gamestate().version != game_config::version) {
+               // Do not load if too old, but if either the savegame or
+               // the current game has the version 'test' allow loading.
+               
if(!game_config::is_compatible_savegame_version(gamestate().version)) {
+                       /* GCC-3.3 needs a temp var otherwise compilation fails 
*/
+                       gui::message_dialog dlg2(gui(), "", _("This save is 
from a version too old to be loaded."));
+                       dlg2.show();
+                       throw load_game_cancelled_exception();
+               }
+
+               const int res = gui::dialog(gui(), "",
+                               _("This save is from a different version of the 
game. Do you want to try to load it?"),
+                               gui::YES_NO).show();
+               if(res == 1)
+                       throw load_game_cancelled_exception();
+       }
 }
 
 savegame::savegame(game_state& gamestate, const std::string title)

Modified: trunk/src/savegame.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/savegame.hpp?rev=34807&r1=34806&r2=34807&view=diff
==============================================================================
--- trunk/src/savegame.hpp (original)
+++ trunk/src/savegame.hpp Sun Apr 12 19:58:50 2009
@@ -32,16 +32,21 @@
        loadgame(display& gui, const config& game_config, game_state& 
gamestate);
        virtual ~loadgame() {}
 
-       void load_game();
+       virtual void load_game();
        void load_game(std::string& filename, bool show_replay, bool 
cancel_orders);
        void set_gamestate();
 
        bool show_replay() const { return show_replay_; }
        bool cancel_orders() const { return cancel_orders_; }
-
-private:
+       const std::string filename() const { return filename_; }
+
+protected:
        void show_dialog(bool show_replay, bool cancel_orders);
 
+       game_state& gamestate() const { return gamestate_; }
+       display& gui() const { return gui_; }
+
+private:
        const config& game_config_;
        display& gui_;
 
@@ -50,6 +55,14 @@
        config load_config_;
        bool show_replay_;
        bool cancel_orders_;
+};
+
+class multiplayer_loadgame : public loadgame
+{
+public:
+       multiplayer_loadgame(display& gui, const config& game_config, 
game_state& gamestate);
+
+       virtual void load_game();
 };
 
 /** The base class for all savegame stuff */


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to