Author: shadowmaster
Date: Tue Mar 31 18:06:04 2009
New Revision: 34337
URL: http://svn.gna.org/viewcvs/wesnoth?rev=34337&view=rev
Log:
More stuff for the storyscreen code refactoring.
The code at the moment is sketchy and messy; this will change later.
Added:
trunk/src/storyscreen_controller.cpp
trunk/src/storyscreen_controller.hpp
trunk/src/storyscreen_page.cpp
trunk/src/storyscreen_page.hpp
Modified:
trunk/src/CMakeLists.txt
trunk/src/Makefile.am
trunk/src/SConscript
trunk/src/intro.cpp
trunk/src/storyscreen.cpp
trunk/src/storyscreen.hpp
Modified: trunk/src/CMakeLists.txt
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/CMakeLists.txt?rev=34337&r1=34336&r2=34337&view=diff
==============================================================================
--- trunk/src/CMakeLists.txt (original)
+++ trunk/src/CMakeLists.txt Tue Mar 31 18:06:04 2009
@@ -307,6 +307,8 @@
statistics.cpp
statistics_dialog.cpp
storyscreen.cpp
+ storyscreen_controller.cpp
+ storyscreen_page.cpp
team.cpp
terrain_filter.cpp
time_of_day.cpp
Modified: trunk/src/Makefile.am
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/Makefile.am?rev=34337&r1=34336&r2=34337&view=diff
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Tue Mar 31 18:06:04 2009
@@ -144,6 +144,8 @@
statistics.cpp \
statistics_dialog.cpp \
storyscreen.cpp \
+ storyscreen_controller.cpp \
+ storyscreen_page.cpp \
team.cpp \
terrain_filter.cpp \
text.cpp \
Modified: trunk/src/SConscript
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/SConscript?rev=34337&r1=34336&r2=34337&view=diff
==============================================================================
--- trunk/src/SConscript (original)
+++ trunk/src/SConscript Tue Mar 31 18:06:04 2009
@@ -199,6 +199,8 @@
statistics.cpp
statistics_dialog.cpp
storyscreen.cpp
+ storyscreen_controller.cpp
+ storyscreen_page.cpp
team.cpp
terrain_filter.cpp
time_of_day.cpp
Modified: trunk/src/intro.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/intro.cpp?rev=34337&r1=34336&r2=34337&view=diff
==============================================================================
--- trunk/src/intro.cpp (original)
+++ trunk/src/intro.cpp Tue Mar 31 18:06:04 2009
@@ -17,8 +17,6 @@
* Introduction sequence at start of a scenario, End-screen after end of
* campaign.
*/
-
-// Do not remove the #ifndef below. See storyscreen.hpp.
#ifndef SHADOWM_STORYSCREEN
#include "global.hpp"
Modified: trunk/src/storyscreen.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/storyscreen.cpp?rev=34337&r1=34336&r2=34337&view=diff
==============================================================================
--- trunk/src/storyscreen.cpp (original)
+++ trunk/src/storyscreen.cpp Tue Mar 31 18:06:04 2009
@@ -13,16 +13,20 @@
See the COPYING file for more details.
*/
-// This code is work in progress, and shouldn't be enabled for production
-// builds. It is supposed to completely replace the old story screens code
-// at intro.cpp, introducing new WML conventions while at it.
-//
-// Do not remove the #ifdef below.
+/**
+ * @file storyscreen.cpp
+ * This code is work in progress, and shouldn't be enabled for production
+ * builds. It is supposed to completely replace the old story screens code
+ * at intro.cpp, introducing new WML conventions while at it.
+ */
#ifdef SHADOWM_STORYSCREEN
#include "global.hpp"
#include "foreach.hpp"
#include "variable.hpp"
+
+#include "storyscreen.hpp"
+#include "storyscreen_controller.hpp"
#include "display.hpp"
#include "game_events.hpp"
@@ -39,33 +43,22 @@
#define ERR_DI LOG_STREAM(err , display)
// TODO: remove when completed
-#include "boost/current_function.hpp"
-#define STUB() \
- std::cerr << "OUCH: entered stub " << BOOST_CURRENT_FUNCTION << " [at "
<< __FILE__ << ":" << __LINE__ << "]\n"
-
-class storyscreen
-{
-public:
- storyscreen(display& disp, const vconfig& data, const config&
scenario_cfg);
-
-private:
- display& disp_;
- vconfig data_;
- config scenario_;
-};
+#include "stub.hpp"
namespace {
- void write_generic_endscreen_config(config& append_to_cfg)
+ void generate_endscreen_page_config(config& append_to_cfg)
{
config& partcfg =
append_to_cfg.add_child("story").add_child("page");
partcfg["text_align"] = "centered";
}
} // end anonymous namespace
-void show_storyscreen(display& disp, const vconfig& data, const config&
scenario_cfg)
+void show_storyscreen(display& disp, const vconfig& story_cfg, const
std::string& scenario_name)
{
STUB();
LOG_NG << "entering storyscreen procedure...\n";
+
+ storyscreen::controller ctl(disp, story_cfg, scenario_name);
// FIXME: stub!
@@ -77,6 +70,8 @@
STUB();
LOG_NG << "show_endscreen() invoked...\n";
+ config story_cfg;
+
// FIXME: stub!
LOG_NG << "show_endscreen() completed...\n";
@@ -85,7 +80,8 @@
// Trivial drop-in compatibility with intro.cpp
void show_intro(display &disp, const vconfig& data, const config& level)
{
- show_storyscreen(disp,data,level);
+ const std::string scenario_name = level["name"];
+ show_storyscreen(disp,data,scenario_name);
}
void the_end(display &disp, std::string text, unsigned int duration)
Modified: trunk/src/storyscreen.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/storyscreen.hpp?rev=34337&r1=34336&r2=34337&view=diff
==============================================================================
--- trunk/src/storyscreen.hpp (original)
+++ trunk/src/storyscreen.hpp Tue Mar 31 18:06:04 2009
@@ -13,14 +13,13 @@
See the COPYING file for more details.
*/
-/** @file storyscreen.hpp */
// FIXME: textscreen.[ch]pp ??
-
-// This code is work in progress, and shouldn't be enabled for production
-// builds. It is supposed to completely replace the old story screens code
-// at intro.cpp, introducing new WML conventions while at it.
-//
-// Do not remove the #ifdef below.
+/**
+ * @file storyscreen.hpp
+ * This code is work in progress, and shouldn't be enabled for production
+ * builds. It is supposed to completely replace the old story screens code
+ * at intro.cpp, introducing new WML conventions while at it.
+ */
#ifdef SHADOWM_STORYSCREEN
#ifndef STORYSCREEN_HPP_INCLUDED
@@ -30,13 +29,12 @@
class vconfig;
class display;
class t_string;
-#include "SDL.h"
#include <string>
/**
* Function to show an introduction sequence using story WML.
- * The WML config data has a format similar to:
+ * The WML config data (story_cfg) has a format similar to:
* @code
* [part]
* id='id'
@@ -49,7 +47,7 @@
* be displayed in turn, with the user able to go to the next part, or skip
* it entirely.
*/
-void show_storyscreen(display& disp, const vconfig& data, const config&
scenario_cfg);
+void show_storyscreen(display& disp, const vconfig& story_cfg, const
std::string& scenario_name);
/**
* Displays a simple fading screen with any user-provided text.
Added: trunk/src/storyscreen_controller.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/storyscreen_controller.cpp?rev=34337&view=auto
==============================================================================
--- trunk/src/storyscreen_controller.cpp (added)
+++ trunk/src/storyscreen_controller.cpp Tue Mar 31 18:06:04 2009
@@ -1,0 +1,102 @@
+/* $Id$ */
+/*
+ Copyright (C) 2003 - 2009 by David White <[email protected]>
+ Copyright (C) 2009 by Ignacio R. Morelle <[email protected]>
+ Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ or at your option any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY.
+
+ See the COPYING file for more details.
+*/
+
+// FIXME: textscreen.[ch]pp ??
+/**
+ * @file storyscreen_controller.cpp
+ * This code is work in progress, and shouldn't be enabled for production
+ * builds. It is supposed to completely replace the old story screens code
+ * at intro.cpp, introducing new WML conventions while at it.
+ */
+#ifdef SHADOWM_STORYSCREEN
+
+#include "global.hpp"
+#include "SDL.h"
+
+#include "storyscreen_controller.hpp"
+#include "storyscreen_page.hpp"
+
+#include "asserts.hpp"
+#include "foreach.hpp"
+#include "variable.hpp"
+
+#include "display.hpp"
+#include "game_events.hpp"
+#include "gamestatus.hpp"
+#include "gettext.hpp"
+#include "intro.hpp"
+#include "language.hpp"
+#include "log.hpp"
+#include "sound.hpp"
+#include "text.hpp"
+
+#define ERR_NG LOG_STREAM(err , engine)
+#define LOG_NG LOG_STREAM(info, engine)
+#define ERR_DI LOG_STREAM(err , display)
+
+// TODO: remove when completed
+#include "stub.hpp"
+
+namespace storyscreen {
+
+controller::controller(display& disp, const vconfig& data, const std::string&
scenario_name)
+ : disp_(disp)
+ , disp_resize_lock_()
+ , evt_context_()
+ , data_(data)
+ , scenario_name_(scenario_name)
+ , pages_()
+ , gamestate_(game_events::get_state_of_game())
+{
+ ASSERT_LOG(gamestate_ != NULL, "Ouch: gamestate is NULL when
initializing storyscreen controller");
+ build_pages();
+}
+
+controller::~controller()
+{
+ clear_pages();
+}
+
+void controller::build_pages()
+{
+
+
+ for(vconfig::all_children_iterator i = data_.ordered_begin(); i !=
data_.ordered_end(); i++) {
+ const std::pair<const std::string, const vconfig> item = *i;
+
+ if(item.first == "page" && !item.second.empty()) {
+ vconfig cfg = item.second;
+ // Use scenario name as page title if the WML doesn't
supply a custom one.
+// if(cfg["title"].empty()) {
+// cfg["title"] = scenario_name_;
+// }
+
+ page* story_page = new page(*gamestate_, cfg);
+ }
+
+ }
+}
+
+void controller::clear_pages()
+{
+ foreach(page* p, pages_) {
+ delete p;
+ }
+ pages_.clear();
+}
+
+} // end namespace storyscreen
+
+#endif /* SHADOWM_STORYSCREEN */
Added: trunk/src/storyscreen_controller.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/storyscreen_controller.hpp?rev=34337&view=auto
==============================================================================
--- trunk/src/storyscreen_controller.hpp (added)
+++ trunk/src/storyscreen_controller.hpp Tue Mar 31 18:06:04 2009
@@ -1,0 +1,81 @@
+/* $Id$ */
+/*
+ Copyright (C) 2003 - 2009 by David White <[email protected]>
+ Copyright (C) 2009 by Ignacio R. Morelle <[email protected]>
+ Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ or at your option any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY.
+
+ See the COPYING file for more details.
+*/
+
+// FIXME: textscreen.[ch]pp ??
+/**
+ * @file storyscreen_controller.hpp
+ * This code is work in progress, and shouldn't be enabled for production
+ * builds. It is supposed to completely replace the old story screens code
+ * at intro.cpp, introducing new WML conventions while at it.
+ */
+#ifdef SHADOWM_STORYSCREEN
+
+#ifndef STORYSCREEN_CONTROLLER_HPP_INCLUDED
+#define STORYSCREEN_CONTROLLER_HPP_INCLUDED
+
+#include "events.hpp"
+#include "variable.hpp"
+#include "video.hpp"
+
+class display;
+class game_state;
+// class vconfig;
+
+namespace storyscreen {
+
+class page;
+class floating_image;
+
+class controller
+{
+public:
+ controller(display& disp, const vconfig& data, const std::string&
scenario_name);
+ ~controller();
+
+ /**
+ * Display story screen pages.
+ */
+ void show_all_pages() const;
+
+
+private:
+ // Used by ctor; processes possible WML branching instructions
+ // ([if]/[else] and [switch]) and builds the page cache.
+ void build_pages();
+ // Used by dtor.
+ void clear_pages();
+
+ display& disp_;
+ const resize_lock disp_resize_lock_;
+ const events::event_context evt_context_;
+
+ vconfig data_;
+ std::string scenario_name_;
+
+ // The page cache.
+ std::vector<page*> pages_;
+
+ // The state of the world.
+ game_state* gamestate_;
+
+public:
+ struct no_pages {};
+
+};
+
+} // end namespace storyscreen
+
+#endif /* ! STORYSCREEN_CONTROLLER_HPP_INCLUDED */
+#endif /* SHADOWM_STORYSCREEN */
Added: trunk/src/storyscreen_page.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/storyscreen_page.cpp?rev=34337&view=auto
==============================================================================
--- trunk/src/storyscreen_page.cpp (added)
+++ trunk/src/storyscreen_page.cpp Tue Mar 31 18:06:04 2009
@@ -1,0 +1,142 @@
+/* $Id$ */
+/*
+ Copyright (C) 2009 by Ignacio R. Morelle <[email protected]>
+ Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ or at your option any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY.
+
+ See the COPYING file for more details.
+*/
+
+#ifdef SHADOWM_STORYSCREEN
+#include "global.hpp"
+#include "asserts.hpp"
+#include "log.hpp"
+#include "storyscreen_page.hpp"
+
+#include "config.hpp"
+#include "gamestatus.hpp"
+#include "game_events.hpp"
+#include "serialization/string_utils.hpp"
+#include "util.hpp"
+#include "variable.hpp"
+
+// TODO: remove when completed
+#include "stub.hpp"
+
+namespace storyscreen {
+
+floating_image::floating_image(const config& cfg)
+ : file_(cfg["file"])
+ , x_(lexical_cast_default<int>(cfg["x"]))
+ , y_(lexical_cast_default<int>(cfg["y"]))
+ , delay_(lexical_cast_default<int>(cfg["delay"]))
+ , autoscaled_(utils::string_bool(cfg["scaled"], false))
+ , centered_(utils::string_bool(cfg["centered"], false))
+{
+}
+
+page::page(game_state& state_of_game, const vconfig& page_cfg)
+ : scale_background_(utils::string_bool(page_cfg["scale_background"],
true))
+ , background_file_(page_cfg["background"])
+ , show_title_(utils::string_bool(page_cfg["show_title"], false))
+ , text_(page_cfg["story"])
+ , text_title_(page_cfg["title"])
+ , text_block_loc_(string_tblock_loc(page_cfg["text_layout"]))
+ , music_(page_cfg["music"])
+ , floating_images_()
+{
+ resolve_wml(page_cfg);
+}
+
+page::TEXT_BLOCK_LOCATION page::string_tblock_loc(const std::string& s)
+{
+ if(s.empty() != true) {
+ if(s == "top") {
+ return page::TOP;
+ }
+ else if(s == "middle" || s == "center") {
+ return page::MIDDLE;
+ }
+ }
+
+ return page::BOTTOM;
+}
+
+void page::resolve_wml(const vconfig& page_cfg)
+{
+ STUB();
+ for(vconfig::all_children_iterator i = page_cfg.ordered_begin(); i !=
page_cfg.ordered_end(); ++ i) {
+ const std::pair<const std::string, const vconfig> xi = *i;
+ if(xi.first == "image") {
+
floating_images_.push_back(xi.second.get_parsed_config());
+ }
+ else if(xi.first == "if") {
+ const std::string type =
game_events::conditional_passed(
+ NULL, xi.second) ? "then":"else";
+ const vconfig branch = xi.second.child(type);
+ if(!branch.empty()) {
+ if(branch.has_attribute("background")) {
+ this->background_file_ =
branch["background"];
+ }
+ if(branch.has_attribute("scale_background")) {
+ this->scale_background_ =
utils::string_bool(branch["scale_background"], true);
+ }
+ if(branch.has_attribute("show_title")) {
+ this->show_title_ =
utils::string_bool(branch["show_title"], false);
+ }
+ if(branch.has_attribute("title")) {
+ this->text_title_ = branch["title"];
+ }
+ if(branch.has_attribute("story")) {
+ this->text_ = branch["story"];
+ }
+ if(branch.has_attribute("text_layout")) {
+ this->text_block_loc_ =
string_tblock_loc(branch["text_layout"]);
+ }
+ if(branch.has_attribute("music")) {
+ this->text_ = branch["music"];
+ }
+
+ // TODO recursive eval
+ // TODO image stack
+
+ }
+ }
+ else if(xi.first == "switch") {
+ }
+ else if(xi.first == "deprecated_message") {
+ const std::string dmsg = (xi.second)["message"];
+ if(!dmsg.empty()) {
+ lg::wml_error << dmsg << '\n';
+ }
+ }
+ }
+}
+
+floating_image::floating_image()
+ : file_(), x_(0), y_(0), delay_(0), autoscaled_(false), centered_(false)
+{
+ ASSERT_EQ(0xBAD,0xBEEF);
+}
+
+page::page()
+ : scale_background_()
+ , background_file_()
+ , show_title_()
+ , text_()
+ , text_title_()
+ , text_block_loc_()
+ , music_()
+ , floating_images_()
+{
+ ASSERT_EQ(0xDEAD,0xBEEF);
+}
+
+} // end namespace storyscreen
+
+#endif /* SHADOWM_STORYSCREEN */
Added: trunk/src/storyscreen_page.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/storyscreen_page.hpp?rev=34337&view=auto
==============================================================================
--- trunk/src/storyscreen_page.hpp (added)
+++ trunk/src/storyscreen_page.hpp Tue Mar 31 18:06:04 2009
@@ -1,0 +1,103 @@
+/* $Id$ */
+/*
+ Copyright (C) 2009 by Ignacio R. Morelle <[email protected]>
+ Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ or at your option any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY.
+
+ See the COPYING file for more details.
+*/
+
+#ifdef SHADOWM_STORYSCREEN
+#ifndef STORYSCREEN_PAGE_HPP_INCLUDED
+#define STORYSCREEN_PAGE_HPP_INCLUDED
+
+#include <string>
+#include <vector>
+
+class config;
+class vconfig;
+class game_state;
+
+namespace storyscreen {
+
+/**
+ * Represents and contains informations about image labels used
+ * in story screen pages.
+ */
+class floating_image
+{
+public:
+ floating_image(const config& cfg);
+
+ /** Returns the referential X coordinate of the image. */
+ int ref_x() const { return x_; }
+ /** Returns the referential Y coordinate of the image. */
+ int ref_y() const { return y_; }
+
+ bool autoscale() const { return autoscaled_; }
+ bool centered() const { return centered_; }
+
+ /** Delay before displaying, in milliseconds. */
+ int display_delay() const { return delay_; }
+
+private:
+ floating_image();
+
+ std::string file_;
+ int x_, y_; // referential (non corrected) x,y
+ int delay_;
+ bool autoscaled_;
+ bool centered_;
+};
+
+/**
+ * Represents and contains information about a single storyscreen page.
+ */
+class page
+{
+public:
+ enum TEXT_BLOCK_LOCATION {
+ TOP,
+ MIDDLE,
+ BOTTOM
+ };
+
+ page(game_state& state_of_game, const vconfig& page_cfg);
+
+ bool scale_background() const { return scale_background_; }
+ const std::string& background() const { return background_file_; }
+
+ bool show_title() const { return show_title_; }
+ const std::string& text() const { return text_; }
+ const std::string& title() const { return text_title_; }
+
+private:
+ page();
+
+ void resolve_wml(const vconfig& page_cfg);
+
+ static TEXT_BLOCK_LOCATION string_tblock_loc(const std::string& s);
+
+ bool scale_background_;
+ std::string background_file_;
+
+ bool show_title_;
+ std::string text_;
+ std::string text_title_;
+ TEXT_BLOCK_LOCATION text_block_loc_;
+
+ std::string music_;
+
+ std::vector<floating_image> floating_images_;
+};
+
+} // end namespace storyscreen
+
+
+#endif /* ! STORYSCREEN_PAGE_HPP_INCLUDED */
+#endif /* ! SHADOWM_STORYSCREEN */
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits