The Battle for Wesnoth  1.15.11+dev
part.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2009 - 2018 by Iris Morelle <shadowm2006@gmail.com>
3  Part of the Battle for Wesnoth Project https://www.wesnoth.org/
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY.
11 
12  See the COPYING file for more details.
13 */
14 
15 /**
16  * @file
17  * Storyscreen parts and floating images representation.
18  */
19 
20 #pragma once
21 
22 #include "storyscreen/parser.hpp"
23 
24 #include <string>
25 #include <utility>
26 #include <vector>
27 
28 class config;
29 class vconfig;
30 
31 namespace storyscreen
32 {
33 /**
34  * Represents and contains information about image labels used
35  * in story screen parts.
36  */
38 {
39 public:
40  /**
41  * WML-based constructor.
42  * @param cfg Object corresponding to a [image] block's contents from
43  * a [part] node.
44  */
45  floating_image(const config& cfg);
46 
47  floating_image(const floating_image& fi) = default;
48  floating_image(floating_image&& fi) = default;
49 
51  {
52  assign(fi);
53  return *this;
54  }
55 
56  std::string file() const
57  {
58  return file_;
59  }
60 
61  /**
62  * Returns the referential X coordinate of the image.
63  * The actual (corrected) value is determined at render time.
64  */
65  int ref_x() const
66  {
67  return x_;
68  }
69 
70  /**
71  * Returns the referential Y coordinate of the image.
72  * The actual (corrected) value is determined at render time.
73  */
74  int ref_y() const
75  {
76  return y_;
77  }
78 
79  /**
80  * If true, the size of the image is changed in the same way that the ref_x
81  * and ref_y are mapped to use the base layer's pixels as the coordinate
82  * system.
83  */
85  {
87  }
88 
89  /**
90  * Whether the image coordinates specify the location of its
91  * center (true) or top-left corner (false).
92  */
93  bool centered() const
94  {
95  return centered_;
96  }
97 
98  /**
99  * Delay after displaying this image and before displaying the next image,
100  * in milliseconds.
101  */
102  int display_delay() const
103  {
104  return delay_;
105  }
106 
107 private:
108  std::string file_;
109  int x_, y_; // referential (non corrected) x,y
110  int delay_;
112  bool centered_;
113 
114  /** Copy constructor and operator=() implementation details. */
115  void assign(const floating_image& fi);
116 };
117 
119 {
120 public:
122 
123  /**
124  * Constructor. Initializes a background_layer object from a
125  * [background_layer] WML node.
126  */
127  background_layer(const config& cfg);
128 
129  /** Whether the layer should be scaled horizontally. */
130  bool scale_horizontally() const
131  {
132  return scale_horizontally_;
133  }
134 
135  /** Sets whether the layer should be scaled horizontally. */
137  {
138  scale_horizontally_ = b;
139  }
140 
141  /** Whether the layer should be scaled vertically. */
142  bool scale_vertically() const
143  {
144  return scale_vertically_;
145  }
146 
147  /** Sets whether the layer should be scaled vertically. */
149  {
150  scale_vertically_ = b;
151  }
152 
153  /** Whether the layer should be tiled horizontally. */
154  bool tile_horizontally() const
155  {
156  return tile_horizontally_;
157  }
158 
159  /** Sets whether the layer should be tiled horizontally. */
161  {
162  tile_horizontally_ = b;
163  }
164 
165  /** Whether the layer should be tiled vertically. */
166  bool tile_vertically() const
167  {
168  return tile_vertically_;
169  }
170 
171  /** Sets whether the layer should be tiled vertically. */
173  {
174  tile_vertically_ = b;
175  }
176 
177  /** Whether the aspect ratio should be preserved while scaling. */
178  bool keep_aspect_ratio() const
179  {
180  return keep_aspect_ratio_;
181  }
182 
183  /** Sets whether the aspect ratio should be preserved. */
185  {
186  keep_aspect_ratio_ = b;
187  }
188 
189  /** Whether is this layer the base layer. */
190  bool is_base_layer() const
191  {
192  return is_base_layer_;
193  }
194 
195  /** Sets whether is this layer a base layer. */
196  void set_base_layer(bool b)
197  {
198  is_base_layer_ = b;
199  }
200 
201  /** The path to the file to load the image from. */
202  const std::string& file() const
203  {
204  return image_file_;
205  }
206 
207  /** Sets the path to the image file. */
208  void set_file(const std::string& str)
209  {
210  image_file_ = str;
211  }
212 
213 private:
220  std::string image_file_;
221 };
222 
223 /**
224  * Represents and contains information about a single storyscreen part.
225  */
226 class part : private story_parser
227 {
228 public:
229  /**
230  * Currently used to indicate where the text block should be placed.
231  * Note that it will always take as much space as it is
232  * possible horizontally.
233  */
235  BLOCK_TOP, /**< Top of the screen. */
236  BLOCK_MIDDLE, /**< Center of the screen. */
237  BLOCK_BOTTOM /**< Bottom of the screen. This is the default. */
238  };
239 
240  /**
241  * Used to signal user actions.
242  */
243  enum RESULT {
244  NEXT, /**< Jump to next story part. */
245  SKIP, /**< Skip all story parts for this set. */
246  QUIT /**< Quit game and go back to main menu. */
247  };
248 
249  /**
250  * Constructs a storyscreen part from a managed WML node.
251  * @param part_cfg Node object which should correspond to a [part] block's contents.
252  */
253  part(const vconfig& part_cfg);
254 
255  /** Whether the story screen title should be displayed or not. */
256  bool show_title() const
257  {
258  return show_title_;
259  }
260 
261  /** Retrieves the story text itself. */
262  const std::string& text() const
263  {
264  return text_;
265  }
266 
267  /** Changes the story text. */
268  void set_text(const std::string& text)
269  {
270  text_ = text;
271  }
272 
273  /** Retrieves the story screen title. */
274  const std::string& title() const
275  {
276  return text_title_;
277  }
278 
279  /** Changes the story screen title. */
280  void set_title(const std::string& title)
281  {
282  text_title_ = title;
283  }
284 
285  /** Retrieves the background music. */
286  const std::string& music() const
287  {
288  return music_;
289  }
290 
291  /** Retrieves a one-time-only sound effect. */
292  const std::string& sound() const
293  {
294  return sound_;
295  }
296 
297  /** Retrieves a voice track. */
298  const std::string& voice() const
299  {
300  return voice_;
301  }
302 
303  /** Retrieves the area of the screen on which the story text is displayed. */
305  {
306  return text_block_loc_;
307  }
308 
309  /** Retrieves the alignment of the story text within the text area. */
310  const std::string& story_text_alignment() const
311  {
312  return text_alignment_;
313  }
314 
315  /** Retrieves the alignment of the title text against the screen. */
316  const std::string& title_text_alignment() const
317  {
318  return title_alignment_;
319  }
320 
321  /** Retrieve any associated floating images for this story screen. */
322  const std::vector<floating_image>& get_floating_images() const
323  {
324  return floating_images_;
325  }
326 
327  /** Retrieve background layers for this story screen. */
328  const std::vector<background_layer>& get_background_layers() const
329  {
330  return background_layers_;
331  }
332 
333 private:
334  /** Inherited from story_parser. */
335  virtual void resolve_wml(const vconfig& cfg) override;
336 
337  /** Inherited from story_parser. */
338  virtual bool resolve_wml_helper(const std::string& key, const vconfig& node) override;
339 
340  static BLOCK_LOCATION string_tblock_loc(const std::string& s);
341 
343  std::string text_;
344  std::string text_title_;
346  std::string text_alignment_;
347  std::string title_alignment_;
348 
349  std::string music_;
350  std::string sound_;
351  std::string voice_;
352 
353  std::vector<background_layer> background_layers_;
354  std::vector<floating_image> floating_images_;
355 };
356 
357 } // end namespace storyscreen
std::string music_
Definition: part.hpp:349
void set_keep_aspect_ratio(bool b)
Sets whether the aspect ratio should be preserved.
Definition: part.hpp:184
Skip all story parts for this set.
Definition: part.hpp:245
Center of the screen.
Definition: part.hpp:236
bool tile_vertically() const
Whether the layer should be tiled vertically.
Definition: part.hpp:166
int ref_x() const
Returns the referential X coordinate of the image.
Definition: part.hpp:65
bool keep_aspect_ratio() const
Whether the aspect ratio should be preserved while scaling.
Definition: part.hpp:178
const std::string & title_text_alignment() const
Retrieves the alignment of the title text against the screen.
Definition: part.hpp:316
std::string file() const
Definition: part.hpp:56
void set_title(const std::string &title)
Changes the story screen title.
Definition: part.hpp:280
const std::string & music() const
Retrieves the background music.
Definition: part.hpp:286
floating_image & operator=(const floating_image &fi)
Definition: part.hpp:50
bool show_title() const
Whether the story screen title should be displayed or not.
Definition: part.hpp:256
std::string title_alignment_
Definition: part.hpp:347
std::string text_
Definition: part.hpp:343
bool centered() const
Whether the image coordinates specify the location of its center (true) or top-left corner (false)...
Definition: part.hpp:93
std::string voice_
Definition: part.hpp:351
bool scale_vertically() const
Whether the layer should be scaled vertically.
Definition: part.hpp:142
const std::string & text() const
Retrieves the story text itself.
Definition: part.hpp:262
void set_tile_vertically(bool b)
Sets whether the layer should be tiled vertically.
Definition: part.hpp:172
bool resize_with_background() const
If true, the size of the image is changed in the same way that the ref_x and ref_y are mapped to use ...
Definition: part.hpp:84
#define b
Small helper class to encapsulate the common logic for parsing storyscreen WML.
Definition: parser.hpp:27
bool tile_horizontally() const
Whether the layer should be tiled horizontally.
Definition: part.hpp:154
bool is_base_layer() const
Whether is this layer the base layer.
Definition: part.hpp:190
BLOCK_LOCATION text_block_loc_
Definition: part.hpp:345
void set_file(const std::string &str)
Sets the path to the image file.
Definition: part.hpp:208
RESULT
Used to signal user actions.
Definition: part.hpp:243
Represents and contains information about image labels used in story screen parts.
Definition: part.hpp:37
void set_tile_horizontally(bool b)
Sets whether the layer should be tiled horizontally.
Definition: part.hpp:160
int display_delay() const
Delay after displaying this image and before displaying the next image, in milliseconds.
Definition: part.hpp:102
const std::string & story_text_alignment() const
Retrieves the alignment of the story text within the text area.
Definition: part.hpp:310
const std::vector< background_layer > & get_background_layers() const
Retrieve background layers for this story screen.
Definition: part.hpp:328
std::vector< background_layer > background_layers_
Definition: part.hpp:353
BLOCK_LOCATION story_text_location() const
Retrieves the area of the screen on which the story text is displayed.
Definition: part.hpp:304
Represents and contains information about a single storyscreen part.
Definition: part.hpp:226
std::vector< floating_image > floating_images_
Definition: part.hpp:354
std::string sound_
Definition: part.hpp:350
int ref_y() const
Returns the referential Y coordinate of the image.
Definition: part.hpp:74
std::string text_title_
Definition: part.hpp:344
Top of the screen.
Definition: part.hpp:235
const std::string & voice() const
Retrieves a voice track.
Definition: part.hpp:298
const std::string & sound() const
Retrieves a one-time-only sound effect.
Definition: part.hpp:292
void assign(const floating_image &fi)
Copy constructor and operator=() implementation details.
const std::string & file() const
The path to the file to load the image from.
Definition: part.hpp:202
static map_location::DIRECTION s
const std::vector< floating_image > & get_floating_images() const
Retrieve any associated floating images for this story screen.
Definition: part.hpp:322
bool show_title_
Definition: part.hpp:342
bool scale_horizontally() const
Whether the layer should be scaled horizontally.
Definition: part.hpp:130
const std::string & title() const
Retrieves the story screen title.
Definition: part.hpp:274
std::string text_alignment_
Definition: part.hpp:346
void set_base_layer(bool b)
Sets whether is this layer a base layer.
Definition: part.hpp:196
floating_image(const config &cfg)
WML-based constructor.
Definition: part.cpp:27
A variable-expanding proxy for the config class.
Definition: variable.hpp:44
void set_text(const std::string &text)
Changes the story text.
Definition: part.hpp:268
void set_scale_horizontally(bool b)
Sets whether the layer should be scaled horizontally.
Definition: part.hpp:136
A config object defines a single node in a WML file, with access to child nodes.
Definition: config.hpp:59
Jump to next story part.
Definition: part.hpp:244
void set_scale_vertically(bool b)
Sets whether the layer should be scaled vertically.
Definition: part.hpp:148
BLOCK_LOCATION
Currently used to indicate where the text block should be placed.
Definition: part.hpp:234