Class to store the actions that a player can undo and redo. More...
#include <undo.hpp>
Public Member Functions | |
undo_list (const config &cfg) | |
Constructor. More... | |
~undo_list () | |
Destructor. More... | |
void | add_auto_shroud (bool turned_on) |
Adds an auto-shroud toggle to the undo stack. More... | |
void | add_dummy () |
Adds an auto-shroud toggle to the undo stack. More... | |
void | add_dismissal (const unit_const_ptr u) |
Adds a dismissal to the undo stack. More... | |
void | add_move (const unit_const_ptr u, const std::vector< map_location >::const_iterator &begin, const std::vector< map_location >::const_iterator &end, int start_moves, int timebonus=0, int village_owner=-1, const map_location::DIRECTION dir=map_location::NDIRECTIONS) |
Adds a move to the undo stack. More... | |
void | add_recall (const unit_const_ptr u, const map_location &loc, const map_location &from, int orig_village_owner, bool time_bonus) |
Adds a recall to the undo stack. More... | |
void | add_recruit (const unit_const_ptr u, const map_location &loc, const map_location &from, int orig_village_owner, bool time_bonus) |
Adds a recruit to the undo stack. More... | |
void | add_update_shroud () |
Adds a shroud update to the undo stack. More... | |
void | clear () |
Clears the stack of undoable (and redoable) actions. More... | |
void | commit_vision () |
Updates fog/shroud based on the undo stack, then updates stack as needed. More... | |
void | new_side_turn (int side) |
Performs some initializations and error checks when starting a new side-turn. More... | |
bool | player_acted () const |
Returns true if the player has performed any actions this turn. More... | |
void | read (const config &cfg) |
Read the undo_list from the provided config. More... | |
void | write (config &cfg) const |
Write the undo_list into the provided config. More... | |
bool | can_undo () const |
True if there are actions that can be undone. More... | |
bool | can_redo () const |
True if there are actions that can be redone. More... | |
void | undo () |
Undoes the top action on the undo stack. More... | |
void | redo () |
Redoes the top action on the redo stack. More... | |
Static Public Member Functions | |
static undo_action_base * | create_action (const config &cfg) |
Creates an undo_action based on a config. More... | |
Private Types | |
typedef boost::ptr_vector < undo_action_base > | action_list |
typedef boost::ptr_vector < undo_action > | redos_list |
Private Member Functions | |
void | add (undo_action_base *action) |
Adds an action to the undo stack. More... | |
bool | apply_shroud_changes () const |
Applies the pending fog/shroud changes from the undo stack. More... | |
Private Attributes | |
action_list | undos_ |
redos_list | redos_ |
int | side_ |
Tracks the current side. More... | |
bool | committed_actions_ |
Tracks if actions have been cleared from the stack since the turn began. More... | |
|
private |
|
private |
|
explicit |
|
inlineprivate |
Adds an action to the undo stack.
Definition at line 101 of file undo.hpp.
References redos_, and undos_.
Referenced by add_auto_shroud(), add_dismissal(), add_dummy(), add_move(), add_recall(), add_recruit(), and add_update_shroud().
void actions::undo_list::add_auto_shroud | ( | bool | turned_on | ) |
Adds an auto-shroud toggle to the undo stack.
Definition at line 152 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::add_dismissal | ( | const unit_const_ptr | u | ) |
Adds a dismissal to the undo stack.
Definition at line 171 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::add_dummy | ( | ) |
Adds an auto-shroud toggle to the undo stack.
Definition at line 160 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::add_move | ( | const unit_const_ptr | u, |
const std::vector< map_location >::const_iterator & | begin, | ||
const std::vector< map_location >::const_iterator & | end, | ||
int | start_moves, | ||
int | timebonus = 0 , |
||
int | village_owner = -1 , |
||
const map_location::DIRECTION | dir = map_location::NDIRECTIONS |
||
) |
void actions::undo_list::add_recall | ( | const unit_const_ptr | u, |
const map_location & | loc, | ||
const map_location & | from, | ||
int | orig_village_owner, | ||
bool | time_bonus | ||
) |
Adds a recall to the undo stack.
Definition at line 191 of file undo.cpp.
References add().
Referenced by actions::recall_unit().
void actions::undo_list::add_recruit | ( | const unit_const_ptr | u, |
const map_location & | loc, | ||
const map_location & | from, | ||
int | orig_village_owner, | ||
bool | time_bonus | ||
) |
Adds a recruit to the undo stack.
Definition at line 200 of file undo.cpp.
References add().
Referenced by actions::recruit_unit().
void actions::undo_list::add_update_shroud | ( | ) |
Adds a shroud update to the undo stack.
This is called from within commit_vision(), so there should be no need for this to be publicly visible.
Definition at line 211 of file undo.cpp.
References add().
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
|
private |
Applies the pending fog/shroud changes from the undo stack.
Does nothing if the the current side does not use fog or shroud.
Definition at line 454 of file undo.cpp.
References team::auto_shroud_updates(), actions::clear_shroud(), actions::shroud_clearer::clear_unit(), display::draw(), actions::shroud_clearer::fire_events(), team::fog_or_shroud(), i, actions::shroud_clearer::invalidate_after_clear(), game_display::invalidate_unit(), synced_context::is_synced(), LOG_NG, resources::screen, side_, and undos_.
Referenced by clear(), and commit_vision().
|
inline |
True if there are actions that can be redone.
Definition at line 93 of file undo.hpp.
References redos_.
Referenced by play_controller::can_redo().
|
inline |
True if there are actions that can be undone.
Definition at line 91 of file undo.hpp.
References undos_.
Referenced by play_controller::can_undo().
void actions::undo_list::clear | ( | ) |
Clears the stack of undoable (and redoable) actions.
(Also handles updating fog/shroud if needed.) Call this if an action alters the game state, but add that action to the stack before calling this (if the action is a kind that can be undone). This may fire events and change the game state.
Definition at line 226 of file undo.cpp.
References apply_shroud_changes(), committed_actions_, redos_, and undos_.
Referenced by synced_context::ask_server_choice(), wb::side_actions::execute(), play_controller::finish_side_turn(), playsingle_controller::play_ai_turn(), playmp_controller::play_human_turn(), actions::recall_unit(), actions::recruit_unit(), wb::manager::set_active(), synced_context::set_is_simultaneously(), and SYNCED_COMMAND_HANDLER_FUNCTION().
void actions::undo_list::commit_vision | ( | ) |
Updates fog/shroud based on the undo stack, then updates stack as needed.
Call this when "updating shroud now". This may fire events and change the game state.
[in] | is_replay | Set to true when this is called during a replay. |
Definition at line 249 of file undo.cpp.
References apply_shroud_changes(), committed_actions_, and undos_.
Referenced by SYNCED_COMMAND_HANDLER_FUNCTION().
|
static |
Creates an undo_action based on a config.
Throws bad_lexical_cast or config::error if it cannot parse the config properly.
Definition at line 79 of file undo.cpp.
References config::child(), config::child_or_empty(), ERR_NG, unit_type_data::find(), map_location::parse_direction(), and unit_types.
Referenced by read().
Performs some initializations and error checks when starting a new side-turn.
[in] | side | The side whose turn is about to start. |
Definition at line 268 of file undo.cpp.
References committed_actions_, ERR_NG, redos_, side_, and undos_.
Referenced by play_controller::do_init_side().
|
inline |
Returns true if the player has performed any actions this turn.
Definition at line 82 of file undo.hpp.
References committed_actions_, and undos_.
Referenced by events::menu_handler::end_turn().
Read the undo_list from the provided config.
Currently, this is only used when the undo_list is empty, but in theory it could be used to append the config to the current data.
Definition at line 294 of file undo.cpp.
References config::child_range(), committed_actions_, create_action(), e, ERR_NG, redos_, side_, undos_, and game::error::what().
Referenced by undo_list().
void actions::undo_list::redo | ( | ) |
Redoes the top action on the redo stack.
Definition at line 413 of file undo.cpp.
References display::draw(), ERR_NG, resources::gameboard, n_unit::id_manager::get_save_id(), display::invalidate_game_status(), game_display::invalidate_unit(), redos_, display::redraw_minimap(), resources::screen, n_unit::id_manager::set_save_id(), side_, undos_, game_board::unit_id_manager(), and resources::whiteboard.
Referenced by play_controller::redo().
void actions::undo_list::undo | ( | ) |
Undoes the top action on the undo stack.
Definition at line 362 of file undo.cpp.
References display::draw(), ERR_NG, resources::gameboard, n_unit::id_manager::get_save_id(), display::invalidate_game_status(), game_display::invalidate_unit(), resources::recorder, replay::redo(), redos_, display::redraw_minimap(), resources::screen, n_unit::id_manager::set_save_id(), side_, replay::undo_cut(), undos_, game_board::unit_id_manager(), and resources::whiteboard.
Referenced by playmp_controller::play_human_turn(), and play_controller::undo().
Write the undo_list into the provided config.
Definition at line 346 of file undo.cpp.
References config::add_child(), committed_actions_, redos_, side_, and undos_.
|
private |
Tracks if actions have been cleared from the stack since the turn began.
Definition at line 113 of file undo.hpp.
Referenced by clear(), commit_vision(), new_side_turn(), player_acted(), read(), and write().
|
private |
Definition at line 108 of file undo.hpp.
Referenced by add(), can_redo(), clear(), new_side_turn(), read(), redo(), undo(), and write().
|
private |
Tracks the current side.
Definition at line 111 of file undo.hpp.
Referenced by apply_shroud_changes(), new_side_turn(), read(), redo(), undo(), and write().
|
private |
Definition at line 107 of file undo.hpp.
Referenced by add(), apply_shroud_changes(), can_undo(), clear(), commit_vision(), new_side_turn(), player_acted(), read(), redo(), undo(), and write().