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