Class to store the actions that a player can undo and redo. More...
#include <undo.hpp>
Public Member Functions | |
undo_list (const undo_list &)=delete | |
undo_list & | operator= (const undo_list &)=delete |
undo_list () | |
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::direction::indeterminate) |
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... | |
bool | 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 std::unique_ptr< undo_action_base > | create_action (const config &cfg) |
Creates an undo_action based on a config. More... | |
Private Types | |
typedef std::unique_ptr< undo_action_base > | action_ptr_t |
typedef std::vector< action_ptr_t > | action_list |
typedef std::vector< std::unique_ptr< config > > | redos_list |
Private Member Functions | |
void | add (std::unique_ptr< 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 |
|
private |
|
delete |
actions::undo_list::undo_list | ( | ) |
|
inlineprivate |
Adds an action to the undo stack.
Definition at line 109 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 133 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 146 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 138 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::direction::indeterminate |
||
) |
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 166 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 175 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 186 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 429 of file undo.cpp.
References team::auto_shroud_updates(), actions::clear_shroud(), actions::shroud_clearer::clear_unit(), actions::shroud_clearer::fire_events(), team::fog_or_shroud(), resources::gameboard, cursor::get(), game_display::get_singleton(), game_board::get_team(), i, actions::shroud_clearer::invalidate_after_clear(), game_display::invalidate_unit(), synced_context::is_synced(), LOG_NG, side_, and undos_.
Referenced by clear(), and commit_vision().
|
inline |
True if there are actions that can be redone.
Definition at line 101 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 99 of file undo.hpp.
References undos_.
Referenced by play_controller::can_undo(), and playmp_controller::send_actions().
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 199 of file undo.cpp.
References apply_shroud_changes(), committed_actions_, redos_, and undos_.
Referenced by synced_context::block_undo(), ai::recall_result::do_execute(), ai::recruit_result::do_execute(), wb::side_actions::execute(), playsingle_controller::play_ai_turn(), playmp_controller::play_human_turn(), synced_context::run(), wb::manager::set_active(), and playmp_controller::surrender().
bool actions::undo_list::commit_vision | ( | ) |
Updates fog/shroud based on the undo stack, then updates stack as needed.
Returns true if somethign was cleared.
Call this when "updating shroud now". This may fire events and change the game state.
Definition at line 221 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 62 of file undo.cpp.
References config::child_or_empty(), ERR_NG, unit_type_data::find(), config::mandatory_child(), map_location::parse_direction(), and unit_types.
Referenced by read().
void actions::undo_list::new_side_turn | ( | int | side | ) |
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 241 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 90 of file undo.hpp.
References committed_actions_, and undos_.
void actions::undo_list::read | ( | const config & | cfg | ) |
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 267 of file undo.cpp.
References config::child_range(), committed_actions_, create_action(), e, ERR_NG, redos_, side_, and undos_.
void actions::undo_list::redo | ( | ) |
Redoes the top action on the redo stack.
Definition at line 383 of file undo.cpp.
References _(), data, ERR_NG, game_display::get_singleton(), wfl::msg(), resources::recorder, replay::redo(), redos_, synced_context::run(), and gui2::show_transient_message().
Referenced by play_controller::redo().
void actions::undo_list::undo | ( | ) |
Undoes the top action on the undo stack.
Definition at line 326 of file undo.cpp.
References ERR_NG, resources::gameboard, n_unit::id_manager::get_save_id(), game_display::get_singleton(), resources::recorder, replay::redo(), redos_, 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().
void actions::undo_list::write | ( | config & | cfg | ) | const |
Write the undo_list into the provided config.
Definition at line 310 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 121 of file undo.hpp.
Referenced by clear(), commit_vision(), new_side_turn(), player_acted(), read(), and write().
|
private |
Definition at line 116 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 119 of file undo.hpp.
Referenced by apply_shroud_changes(), new_side_turn(), read(), undo(), and write().
|
private |
Definition at line 115 of file undo.hpp.
Referenced by add(), apply_shroud_changes(), can_undo(), clear(), commit_vision(), new_side_turn(), player_acted(), read(), undo(), and write().